VBA一般

部屋割りマクロ(Excel)(2)

部屋割りマクロ クラスを使ってみる 部屋を表すクラスを作って、部屋の数だけインスタンスを生成し、部屋が人間を取り合うようなイメージでコーディングしてみた。 Roomクラス クラスモジュールを挿入し、オブジェクト名は「Room」とした。 リスト1 クラス…

素人、Collectionクラスに入門す

Collectionクラスの使い方の勉強 人のコードを解読する (私が勝手に認定した)VBA四天王の1人(あと3人って誰だよw)thom (id:t-hom) さんが コチラの記事でお書きになっているコード を徹底解剖(笑)する。 参考コード 参考リスト1 Function GetRooms…

部屋割りマクロ(Excel)のリファクタリング(3)

部屋割りマクロのリファクタリング 傍流の処理を外に出す 前回の akashi-keirin.hatenablog.com のリスト2では、大まかに言って 引数のチェック 定員表の配列化 振り番処理 の3つの処理を行っていた。 メインの処理は、当然 3. の振り番処理。あとの2つは…

部屋割りマクロ(Excel)のリファクタリング(2)

部屋割りマクロのリファクタリング 画像ExcelIcon 返り値を改善する 前回の akashi-keirin.hatenablog.com この状態では、処理が無事に終わるとTrue、んで、うまく行かなかった場合は 理由の如何にかかわらずFalseが返る という 超不親切設計 だった。 今回…

部屋割りマクロ(Excel)のリファクタリング(1)

部屋割りマクロのリファクタリング Ifブロック内のDo~Loop ある程度コードが組み上がってから、 あ、この場合分けを見落としていたよ! ということに気づいて、慌ててコードを付け足したりしたときに、マヌケなコードを書いてしまうことがよくある(よね?…

配列関係の覚書(3)

配列関係の覚書 表を一旦配列にぶち込む まことに今さらながらで恐縮だが、 表のデータを利用するなら先に配列にぶち込むと激速 ということを知った。 っていうか、いろんなところで目にはしていたんだけれども、重要性を認識していなかった、ないしは端的に…

フォルダ選択ダイアログを表示させるFunction

フォルダを選択させてフォルダパスを取得するFunction ファイルをリネームするマクロを作るにあたり、保存先をその都度選べるようにした方が汎用性が高いと思ったので、Functionにしてみようと思った。 すでに akashi-keirin.hatenablog.com このときにクラ…

WordVBAで処理に使うデータを外部化する

指定した文字列のフォントを狙い撃ちで変えるマクロの改良 データを外部ファイル化する たとえば、明朝体で書かれた文書のうち、特定の語句だけを狙い撃ちでゴシック体にしたい、というときには、 ゴシック体に変えたい語句(X) と、 Xを含んでいるけれどゴ…

「"」(ダブルクォーテーション)のエスケープ

「"」(ダブルクォーテーション)のエスケープ 恥ずかしい告白 まことに今さらながら、実は、 「"」(ダブルクォーテーション)のエスケープについて、ちゃんと理解していなかったのである! では、どうしていたのかというと、 そのときどきでテキトーに書い…

モジュール名と同名のプロシージャ

「モジュール」とは何なのか? 「Module1」プロシージャ問題 つらつらとTwitterを眺めていると、フォローしている方が モジュール名とプロシージャ名を同じにしてCallで呼ぼうとするとエラーが出ます。 (中略) 「モジュールではなく、変数またはプロシージャ…

WshScriptのSendKeysメソッドを使う

ち~んw珍現象は続く WshScriptのSendKeysメソッド 前回の akashi-keirin.hatenablog.com コチラの記事にid:imihito さんからコメントをいただいた。 そこでご紹介いただいたのは、コチラの方法。このうち、「WshShellのSendKeysをラップする」というやつを…

Application.GetPhoneticが壊れた???

GetPhonetic関数がおかしい??? GetPhonetic関数の異状 Application.GetPhonetic関数は、2回目以降引数を省略すると、まだ返していないふりがな文字列を返すはず。 しかしながら、何か様子がおかしいのである。 たとえば、次のコード。 リスト1 標準モジ…

○箇月後の○曜日――改良版

「○箇月後の○曜日」割り出しFunctionの改良 akashi-keirin.hatenablog.com VbDayOfWeek型の引数 Twitterのフォロワー氏、及びid:imihito さんが教えてくださった。 vbSundayとかvbMondayって、単なる組み込み定数だと思っていたけれど、正体はVbDayOfWeek列…

○箇月後の直近の○曜日は?

○箇月後の○曜日の日付を求める自作Function 「1箇月後の直近の木曜日を求める」という作業が発生した。別に、暦を見たらいいんだけれど、もし今後たくさんの日付について同じ作業をする必要が生じたらメンドウなので、ちょこちょこっと「1箇月後の直近の木…

素人がアドインの世界に首を突っ込んでみる

素人、アドインに手を出す アドインとは……? 「アドイン」って、よく聞く言葉だったけど、意味が分からんかったのでずっと放置していた。 何かの拍子に「マクロをアドインとしてうんたらかんたら」というのを読んで、ちょっと調べてみた。 そしたらアンタ、…

親ブックから子ブックを量産する

データを変えて親ブックから子ブックを量産するマクロ 子ブック生成部分を切り出す akashi-keirin.hatenablog.com の続き。 FileSystemObjectオブジェクトのCopyFileメソッドを使うと、子ブックの生成が簡単にできることが分かったので、いよいよ量産体制に…

親ブックから子ブックを生成する

子ブック生成マクロ 親ブックから子ブックを生成する方法 akashi-keirin.hatenablog.com 先日、コチラの記事をうpしたところ、twitterのフォロワーさんから、 FileCopyステートメントでよくね??? 的なリプをいただいたのだった。 私自身、 たかがブック…

ゼロ埋め番号文字列を作る関数を自作した

ゼロ埋め番号を作る関数 調子に乗って関数化 こいつら akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com をもとに、最大数に応じてゼロ埋め数字の文字列を返す関数を作ってみた。 仕様 書式 createNumberFilledByZero(最大数 , 対象数) 第1引数…

String関数なるものの存在を知った

String関数を使う 前回の akashi-keirin.hatenablog.com に、id:imihito さんからコメントをいただいた。 特定の1文字の繰り返しは String関数(名前が紛らわしいですが)を使うと簡単に作れたりします。 VBA.Strings.String$(2, "0") とのこと。 へえ! 知…

ゼロ埋め連番を作成する

Format関数の第2引数は、変数でも良かった ゼロ埋め連番文字列を動的に生成する たとえば、 akashi-keirin.hatenablog.com こんなマクロを使って大量にファイルを生成するような場合、ファイル名の先頭がゼロ埋め連番になっていると非常に都合が良い。 で、…

「クソ」としか言いようのない魔Excelに勝利した

クソのようなExcel様式に打ち勝った クソとしか言いようのないExcel様式 「クソ」としか言いようのないExcel様式に出会った。 簡単に言うと、 1つのセルに複数データが入っている というもの。 しかも、[Alt]+[Enter]によるセル内改行ばかりかと思ったら、…

フォルダを作成するクラス

フォルダ作成クラス 任意のディレクトリに任意の名前のフォルダを作る 新規フォルダを作るときは、MkDir関数を使う。 まあ、それはそれでいいのだが、何かこう、作りっぱなし感があって気持ち悪い。 せっかくなので、FileSystemObjectの練習も兼ねて、 フォ…

Addメソッドについて考えた

コレクションのAddメソッドの返り値 Addメソッドの返り値を追加したオブジェクトにするというアイディアを考えたやつは天才 Excelで明細みたいなのを作っていると、それぞれのシートなりブックなりをだいたいはPDF化したり、プリントアウトしたり、という使…

ワークシートをPDF化する(ExportAsFixedFormatメソッド)

ExportAsFixedFormatメソッドの三態 ExportAsFixedFormatメソッドの対象オブジェクト よそにデータを送るときに、PDF化する必要があって、WordであれExcelであれ、よくこのExportAsFixedFormatメソッドにはお世話になっている。 んで、改めて調べてみたら、E…

日付をはじめとする数字の表記の問題

日付の1桁の数字のみ全角にして表示する 変な風習 書類なんかの日付の表記(まあ、日付以外もですけど)について、ウチの職場には、 数字が1桁のときは全角、2桁のときは半角! という謎ルールがあって、これがWordやExcelを使った作業と本当に相性が悪い…

構造体の要素を並べ替える

構造体配列の要素をパラメータの値に従ってソートする なんかこう、仕事が泥沼で、長らく更新できませんでした。今も泥沼の最中なんですが、現実逃避して書いています。 さて、仕事で希望調査みたいなのをやった。まあ、データ集約するだけなら楽勝だったん…

漢字テストメーカーを作ってみた

漢字テストメーカーを作ってみた プロシージャの構成 問題データ抽出用プロシージャ Private Sub extractQuestions 乱数発生・ナンバリング用プロシージャ Private Sub setRandomNumber 抽出問題並べ替えプロシージャ Private Sub sortExtractedQuestions テ…

Wordの表の各セルの文字列を利用しやすくする

Wordの表の中の文字列を取得するクラス WordTableOperatorクラス クラスモジュールを挿入して、オブジェクト名を「WordTableOperator」にした。 とりあえず、次のようなコードを書いた。 リスト1 Option Explicit 'フィールド' Private wordApp_ As Word.Ap…

VBAで名前の定義をするといろいろ楽

セル範囲の名前の定義をVBAでやったら便利 転記するごとにセル範囲を定義し直す このときみたいなデータ転記系の処理をした場合、ワークシート関数のCOUNTIFなんかを使って種別ごとの数を勘定したい、ということがよくある。 しかしながら、転記件数が変化す…

ActiveWindowプロパティでちょっとハマる……

ActiveWindowプロパティの怪 Excel2010でのエラー 職場のPCはOffice2010なんだが、妙なエラーが出た。 ThisWorkbookモジュールに仕込んだWorkbook_Openイベントマクロでの話。 データを集約するマクロを作っていて、データ集約が終わったら、マクロを仕込ん…