エクセルVBAクラス備忘録(作りかけのモジュールメモ)

20240428エクセルVBAクラス備忘録(作りかけのモジュールメモ)

 

<前書き>
エクセルVBAオブジェクト指向、初心者です。
VBA自体は、以前から使用していました。
オブジェクト指向というものがあることは、知っていましたが、ネットなどを見てもよく分からず、挫折した過去あり。
<以上前書き>

(素人なので間違っているかもしれません。汗。)

 

今回は、コードは書いていません。
ここ最近、クラス、オブジェクト指向をやってきて、思ったこととしたことのまとめ?備忘録(まとまっていない)です。

 

〇どういうことをオブジェクト指向ですればいいのか?
個人的には、過去に作った仕事で使うマクロ(手続き型)が、時代とともに仕事のやり方が変わり、古くなってきたので、
この際、オブジェクト指向で、最近の仕事に合わせて作り直そうかと思っています。

 

〇少しオブジェクト指向(クラス)を勉強し始めると、
「あ、こんなことも、オブジェクトなら、いちいち書かなくていいかも」とか
思ったりします。

例えば、今まで、ユーザーフォームで言えば、
○○=textbox1.value
とか書いていたものも、
textbox全部をまとめて処理すれば、(for eachとかで)、
いっぱいコード書かなくていいし、

例えば、今まで、シートで言えば、
□□ = cells(1,i).value
として、列全部を変数に入れていたのも、
列の表題をコレクションとかでリストにして、処理すれば、
いっぱいコード書かなくていいし、
とか、思ったりもします。

でも、そうすると、抽象化というか、ぱっと見何の処理をしているのか、分かりにくくなるし、
そもそも、そんな方法で、VBAの達人の皆様は作成しているのかとか思ったりもします。

オブジェクト指向は、廃れたとかいう記事も見るし・・・どうしようかなという気にもなる。)

 

〇「y-moride.com」様のホームページ、(感謝)
https://y-moride.com/vba/collection-how-to-use.html
【[VBA]Collectionを知り、使い方を知る】
には、データの列の表題をコレクションで取り込み、その標題を使って、処理を行っています。
(コレクションに入れてしまえば、行数・列数は使わない。)
これを見て、こういうやり方でも行けるんだなと思いました。
自分もシートの表の並びを無視して、標題で処理する方法を少し書いていたので。

 

〇自分には、今現在、クラスの「武器」が少ない。
自分の扱えるクラス関係の武器は、「コレクション」だけという感じ。「ディクショナリ」も使えるかもしれないが、
「FileSystemObject」などは、「使ったことあったっけ?」という記憶。
(こんな風につかえるのかなと手探り状態・・・)

 

〇今現在のオブジェクト指向のコードは、手続き型には劣るし、ピボットテーブルやパワークエリでもシート関数でもできることを再現する程度。

 

〇以下、作っては、放棄?のクラスのコード達。(一部)


自分用メモ
①ユーザーフォーム関係
・外部ファイル処理(クラス)
・職員クラス、職員リストクラスを作成
・ユーザーフォームのコンボボックスのデータ(職員リストクラスのデータを利用)

②ワークシート関係
・シートに名前をつけて、セルデータ、セルデータコレクションクラスを作成
・上記、データ取得
・取得したデータをデータベースシートに書き込むため、データベースシートの表題をEnumにして、
該当するセルデータリストの値を、データシート列に書き込む

③ユーザーフォーム関係(まだやり始め)
・ユーザーフォームのコントロールを回し(for each文)、テキストボックスの値を取得

 

まあ、こうしてみると全部の工程が線としてつながれば、形になるのか・・・。


ただし、過去に手続き型で、やった細かい制御まで、再び新たに組み込むことになるが、かなり面倒(不具合があると、いろんなところでサブルーチンを仕込んだ記憶アリ・・・)。
(他人に使ってもらわないと分からないこともあるし。)

要件定義とか仕様とかどう書くのか(書けない。)

 

・・・時代に合わせた新しい作り方・使い方までは、程遠そうです。(しかも2本作り直しを予定)(もうこれらも時代遅れなんでしょうが。)


整理しながら、やるしかないですね。笑