編集部イチオシ

VBAのクラスはいつ使うのか?なんで使うのか?

時々話題になるVBAのクラスの使いどころが分からないという話。 今日もちょっとした一言から良いお話がいっぱい聞けたので整理しておきました。
72

本題

しょうた⭐️優良IT企業に40歳で転職←ITに理解ゼロのク○企業から @shota_Excellent

やっぱ何度勉強しても、Excel VBAのクラスを使う気が起きない。どうしてもクラスじゃなきゃ実現できないってほどのことが、あるのか実務で分からない。

2020-02-10 20:15:35

議論なう

はけた@できるExcel2021 @excelspeedup

@shota_Excellent 大抵のものはクラスモジュールはなくても、どうにかなります。 感覚的には、次のようなイメージです。 ・クラスモジュールを使うと「ちょっと便利」 → 結構ある ・クラスモジュールを使わないと「困る」。 → たまにある

2020-02-10 21:36:50
ほえほえ@スプシマン @hoehoe1234

@excelspeedup @shota_Excellent この説にいまさら納得。理由はいろいろあるんですけど簡単なところではクラスの機能が低い+配列を含めて標準関数が便利。ということであまり差がないというか、そんな感じなんですよね。

2020-02-10 21:40:46
はけた@できるExcel2021 @excelspeedup

@hoehoe1234 @shota_Excellent 私の中では、クラスを使うと「ちょっと便利」なのは、 ・コンストラクタ、デストラクタがある ・複数の返り値を返したい場合(Typeの代わり) でしょうか。 これらだけが目的なら、クラスを使わないでも、大抵、どうにかなる印象です。

2020-02-10 21:44:17
reime @_reime

@shota_Excellent わざわざ自作しなくても既に便利なクラスがいっぱいありますしね。

2020-02-10 21:00:14
サモイタ@VBAって凄すぎ @biitarou

@_reime @shota_Excellent クラスモジュールに書くのは、オブジェクトのひな形。 とすると、 Worksheet オブジェクトとかRangeオブジェクト。 これらのひな形も同じように書いてあるんですよね。

2020-02-10 21:27:50
reime @_reime

@biitarou @shota_Excellent VBAで書いてあるわけではないと思いますけどそうですよね。 知らないうちにクラスを使っているのがVBAです。

2020-02-10 21:39:24
ほえほえ@スプシマン @hoehoe1234

@_reime @biitarou @shota_Excellent これ、重要な観点で、実はエクセルのクラスを単に使ってるのではなくて「クラスライブラリ」(複数のクラス群が有機的に結びついたもの)を使ってるんですよね。だからめちゃくちゃ使いやすい。VBAではこれができない半端者なので結局クラスは単機能クラス以外は使わない。ってなちゃうんだと思います

2020-02-10 21:45:21

VBAのクラスについて

山岡様

VBA100本ノックとエクセル問題 @yamaoka_ss

一年前には、こんなことを言ってる人がいた。 twitter.com/yamaoka_ss/sta…

2020-02-10 22:02:16
エクセルの神髄 @yamaoka_ss

無理してクラスを使う必要性はないと思っています。VBAの場合は、完成後にプロではない他人(ユーザー等)にとって易しくわかりやすく書くことが重要だと思います。なので私は極力クラスは使わずに易しいコードで、それでいて速度が速くなるように書くことを心がけています。 twitter.com/sugoi_kaizen/s…

2019-01-27 00:20:46
VBA100本ノックとエクセル問題 @yamaoka_ss

無理してクラスを使う必要性はないと思っています。VBAの場合は、完成後にプロではない他人(ユーザー等)にとって易しくわかりやすく書くことが重要だと思います。なので私は極力クラスは使わずに易しいコードで、それでいて速度が速くなるように書くことを心がけています。 twitter.com/sugoi_kaizen/s…

2019-01-27 00:20:46
吉田拳@Excel作業代行の㈱すごい改善 @sugoi_kaizen

実は勉強せずにここまで来てしまったんです。クラスに関する是非を含めた知見についてはうちの山岡先生が極致だと思いますので教えを乞うておきたいと思います。 twitter.com/Higo_Daisuki2/…

2019-01-26 22:52:14
VBA100本ノックとエクセル問題 @yamaoka_ss

仕事柄、他人の書いたプログラムを修正する機会は多いです。 そういう時には、元のソースに溶け込むように修正することを意識します。コーディングスタイルを合わせて書きますよ、お仕事ですから。

2020-02-10 11:59:12

ほえほえ様

ほえほえ@スプシマン @hoehoe1234

構造体ほしい→せやTypeや→バリアントに入らない→なんならコレクションにも入らない→せやクラスや→1クラス1モジュールまじかよ?→はっ!別ブックでNewでけんの?→staticクラス+ファクトリで解決や→クラスってモジュールだったのね→ならモジュール変数はインスタンス変数と同じやね→

2020-02-10 22:12:02
ほえほえ@スプシマン @hoehoe1234

ならクラスは何が便利やねん?→そらnewしたりできることやろ→実は構造体で多値が返したかったのを思い出す→配列でええやん。VBAの配列は値型やからインスタンス変数と同じやで→newの利点ってなんだったけ?ああ、そうだインスタンス変数の共有→ならモジュール変数と同じやん→コンストラクターが

2020-02-10 22:13:59
ほえほえ@スプシマン @hoehoe1234

あって便利やね→せやけどこのためにクラス作るほどか?→標準モジュールのモジュール変数初期化できんがな→プロパティ手法あるで→そういやクラスラぶらりが作りたかったり→夢を追いかけるのはやめときや→ならクラスはなんで必要なんやねん→そら参照やから便利やろ→

2020-02-10 22:15:41
ほえほえ@スプシマン @hoehoe1234

だけど値クラスのために1モジュールは酷くないか?→しゃーないやん→やっぱり参照の取れる構造体ほしい→もとに戻る。 を10週ぐらい繰り返して今は単独機能モジュール以外はクラスでなくてもええな。という立場。なんと言っても1クラス1モジュールが致命的w。

2020-02-10 22:17:06
ほえほえ@スプシマン @hoehoe1234

この統一性のなさがVBAであり良くも悪くもVBA。他の言語では多値の返し方はそれしかないと大体決まっている。クラスを使う使わいなという検討はない。設計レベルでどうクラス群を設計するかという議論になる。VBAという言語系は「これが正しい」という意図があえて隠されている。

2020-02-10 22:31:29
ほえほえ@スプシマン @hoehoe1234

なので自由だけど難しい。技術力の優劣がつきにくい。他言語ではれば優劣はコードをみればわかる。VBAでは違うスタイルとなるので優劣というよりもスタイルの問題になる。スタイルに優劣はない。なので多人数での作業は困難になる。どうとでもかけるから。今なら業務ならクラスを外すのは正解だと思う

2020-02-10 22:32:49
ほえほえ@スプシマン @hoehoe1234

参照を多用しなければVBAでは実現できないんだけど、これを複数人のうちの一人だけが採用したらメンテナンスできなくなるだろう。多くのスタイルに合わせるしかない。クラスにしても同様。まず使う、使わないから検討しなければいけない。なのでVBAって面白いけど大変w。

2020-02-10 22:37:57

ちゅんちゅん式