VBAクラス・モジュール

整数以外の列挙体っぽいものは実現可能なのか

定数的なクラスを列挙体っぽく使う 前回、 akashi-keirin.hatenablog.com クラスモジュールとPropertyを用いて、列挙体的な整数以外の定数が作れるのではないか、と述べたが、かなり浅はかな考えだったようだ。 列挙体の何が便利といって、たとえば、 Public…

整数以外の列挙体っぽい定数を実現する

整数型以外の列挙体ぽいものを実現する 題名が分かりにくくてすまない。 最近、VBA Deveroper's Handbookにハマっている。 んで、その中で面白そうなアイディアを発見したので、ちょっと実験してみた。 今出先で、『VBA Deveroper's Handbook』が手元にない…

プリンタ名を返すProperty

プリンタ名を取得するProperty 前回 akashi-keirin.hatenablog.com の続き。 前回までに作成したInstalledPrinterクラスにPropertyを追加する。 追加するPropertyは、printerName(ByVal printerIndex As Long)とし、引数にインデックスを渡したら、該当する…

クラスのPrivateメソッドもイミディエイトで実行できる

クラスのPrivateメソッドもイミディエイトで実行できる 再び超小ネタ。 クラスモジュールの準備 クラスモジュールを作る。 リスト1 クラスモジュール 'オブジェクト名は"HiddenBooks"' Private Function isHiddenBook( _ ByVal targetBook As Workbook) As …

VirtualTableクラスへのメソッドの追加[getFilteredArrayメソッド]

VirtualTableクラス続報 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com 指定した条件を満たす配列を返すメソッド 任意の列の値が指定した値であるレコードだけを格納した配列を返すメソッドを作ってみた。 ひとまずコードを載っけておく。 get…

VirtualTableクラスは今

VirtualTableクラスは今 VirtualTableクラスの現状 VLOOKUPにせよ、INDEX & MATCHの合わせ技にせよ、セルに数式がずらずらと書き込まれているというのはちょっとイヤなので、表引きは極力VBAでやっている。 んで、VLOOKUPみたいな働きを持ったクラスを作った…

Iteratorクラスを作ってみた

Iteratorクラスを作ってみた デザインパターンをまじめに勉強したくなったので、遊び半分でコーディング。 Iteratorクラス オブジェクト名は「Iterator」です。 リスト1ー1 クラスモジュール 宣言セクション Option Explicit Private Const ERROR_NOT_INITIAL…

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

部屋割りマクロのリファクタリング akashi-keirin.hatenablog.com このときに作成した部屋割りマクロのコードを見直して修正した。 問題点その1 isFull_変数が無意味 Roomクラスの内部に、インスタンスが定員一杯であることを表すisFull_というPrivate変数…

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

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

表を配列として保持するクラス

表を配列化して保持するクラス 前回記事へのコメント Edgeがバグっているせいなのか、なぜかブログにコメントが返せない状態です。 akashi-keirin.hatenablog.com コチラに、id:imihito さん、thom (id:t-hom) さんのお二方からコメントをいただいているにも…

VBAの「コンストラクタに引数渡せない」問題

VBAの「コンストラクタに引数を渡せない」問題 VBAでクラスモジュールを使い始めたときに必ずぶち当たるのが、 なんでコンストラクタに引数が渡せねえんだよ! この金髪豚野郎!!!!!!!!! 問題だろう。(個人の感想です) これは本当に不便な話で、「VBAのイマ…

OutLookメール自動作成メソッド

メール自動作成ツール~Outlookへの対応 このとき akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com 作成したメール自動作成ツール、LotusNotes、Thunderbirdの両方に対応していて非常に便利なので、重宝している。 で、せっかくなのでOutlookに…

乱数を格納した配列を保持するクラスを作ってみた

乱数を格納した配列を保持するクラス クラスへの移行 前回の akashi-keirin.hatenablog.com で、乱数を格納した配列を作るFunctionを作った。 実は、追記のところで、型指定でVariantを使うブサイクさ問題は解決ずみなんだが、乗りかかった船なのでやってお…

ユーザーフォームとPropertyプロシージャと私

ユーザーフォームにプロパティを追加する フォームモジュールにPropertyプロシージャを書いてみる なんかこう、クラスモジュールとフォームモジュールの違いが分からなくなってきている私です。 akashi-keirin.hatenablog.com コチラに、id:imihito さんから…

ユーザーフォームをクラスっぽく使おう!

ユーザーフォームをクラスっぽく使う ユーザーフォームのテンプレート(?) 前回の akashi-keirin.hatenablog.com で、ユーザーフォームもNewできると分かった。 で、それが何の役に立つのか、イマイチよく分からないんだが、 よく使うパターンのユーザーフ…

ユーザーフォームはNewできるか

ユーザーフォームをNewしてみる ユーザーフォームって、クラスモジュールに似てね? クラスモジュールを使っていなかった頃はなんとも思ってなかったが、クラスモジュールをよく使うようになって、改めてユーザーフォームを使ってみると、結構共通点があった…

Excelのブックを複製するクラス

子ブックを生み出すクラス 元のブックを開いたままでコピーを作成する 元のブックのシートにデータを入力しては別名で保存して、同じ様式でデータの異なるたくさんのブックを作りたいというときがある。 Worksheetオブジェクトの場合なら、Copyメソッドがあ…

任意のワークシートを新規Excelブックとして出力するクラス

ワークシートを新規Excelブックとして出力するクラス ワークシートを新規Excekブックとして出力する 名簿なんかの一覧表をマクロで自動作成して、相手方にPDFで提供すると、しばしば 加工したいからExcelのままでくれ! と言われることがよくある。 大量(っ…

インタフェースを用いたポリモーフィズム

インタフェースを使ったポリモーフィズム コードの微修正 akashi-keirin.hatenablog.com 前回のコードをちょっと書き換えてみた。 擬似コンストラクタのinitメソッドをまとめてみただけですが。 リスト1 インタフェース IMusicPlayer Option Explicit 'Fiel…

VBAでインタフェースを使ってみた

インタフェースを用いたポリモーフィズムをやってみた 立山秀利さんが著書の中で使っていた音楽プレーヤのたとえが私にとっては一番分かりやすかったので、それをVBAでやってみる。 方針としては、 「RecordPlayer」クラス、「CDPlayer」クラス、「MP3Player…

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

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

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

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

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

クラスのプロパティに二次元配列を持たせてみる 表の内容をそのまま配列にする 「表」ということは、二次元配列と同じ形なんである。 そこで、 クラスのプロパティを二次元配列にする ことを試みた。 クラスの改造 まず、前回記事のリスト1のうち、フィール…

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

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

データ抽出用クラスを作る

データ抽出用のクラス AdvancedFilterメソッドを気軽に使う あんまり役に立たないと思うけど、ちょっと作ってみた。 準備として、 データ抽出元のシートを用意。 こんなふうに抽出条件設定用の表を作り、 セル範囲に名前を付けておく。 ちなみに、抽出条件は…

名簿作りマクロ(4)

名簿作りマクロ メインコードの組立 過去記事 akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com akashi-keirin.hatenablog.com 作成するプロシージャ まず、転記処理の流れを整理しておこう。 【プロシージャ1a】「戦法別」シートへの転記開始用…

名簿作りマクロ(2)

文字列をコード番号に置き換えて取得する 前回 akashi-keirin.hatenablog.com のつづき。 VLOOKUPのちょっと邪道な(?)使い方 一覧表の中の文字列をコード番号に変換するのには、VLOOKUPを使うというのが一般的だと思う。 ただ、私は、一覧表にずらずらとV…

名簿作りマクロ(1)

人物データを元に名簿を作成するマクロ 配置転換で行った先で見たもの 新年度の配置転換で、新しい部署に行くことになった。んで、早速名簿作りをしないといけなくなった。 だいたいこんな感じのものが出てきたと思ってください。 どうやら、 こんな元データ…

小さなクラスを作る(7)~セルの列符号が簡単に取得できるラッパークラス

列符号取得が可能なRangeオブジェクトのラッパークラス きっかけ 「列番号はColumプロパティで簡単に取得できるのに、列符号って取り出しにくいよなー」と思って、コチラを参考にXDF列までに対応した自作関数を作ったのがそもそもの始まり。 他のよく使う機…

写しPDF作成マクロ~(4)

クラスを組み合わせる 使用したクラス FileNameGetterクラス FolderCreatorクラス ErrorCatcherクラス DocPDFConverterクラス それぞれのクラスの詳細については、リンク先をどうぞ。 標準モジュールのコード Option Explicit Public Type myFolder fdPath A…