編集部イチオシ
2020年2月11日

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

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

本題

しょうた⭐️Excel改造で業務効率化するが会社に理解されない経理マン @shota_Excellent

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

2020-02-10 20:15:35
議論なう
はけた@経理のExcel仕事術 発売中 @excelspeedup

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

2020-02-10 21:36:50
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 21:40:46
はけた@経理のExcel仕事術 発売中 @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
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 21:45:21

VBAのクラスについて

山岡様
エクセルの神髄 @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
エクセルの神髄 @yamaoka_ss

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

2020-02-10 11:59:12
ほえほえ様
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:12:02
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:13:59
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:15:41
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:17:06
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:31:29
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:32:49
ほえほえ@DX塾 @hoehoe1234

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

2020-02-10 22:37:57
ちゅんちゅん式
残りを読む(27)

コメント

sake @sake_ne_ku 2020年2月11日
ぶっちゃけ初学者が頭捻ろうがひねろまいがゴミコードができることは確定してるので、下手に考えるより心置きなくチャレンジして、失敗して、学べばいいと思うよ この手の素人の小さいコードはメンテを考えたら負け 次の人はコードリーディング、ヒアリングを通して良くも悪くもインサイトを得て、新しいものを作って学ぶ まともなエンジニアを雇う必要がない会社はそれで十分
6
おろろ @fYe39CoQsPrbZVK 2020年2月11日
Googleのスプレッド使えや。エクセルとかくっさ
0
lion @lion55571 2020年2月11日
VBAってあんまりでかいコード書くイメージじゃないけど、書く人は書くからねぇ。そうなったら他の言語採用して欲しいけど。
6
BugbearR @BugbearR 2020年2月11日
そもそも、クラスを使う使わない、という発想自体が、なんか目的を見失ってる感あります。クラスを使うとここが便利という捉え方が必要だと思いますが。結局構造体+関数の塊じゃん? ってことになりますが。あと、ポリモーフィズムとかもできたりしますが、そこまでする用途がExcelにほとんどないとか。
3
しろうと @sirouto 2020年2月11日
昔の「C++ or Java のクラスはいつ使うのか? なんで使うのか?」の反復。 >いつ? 特に大規模/長期的に開発/保守する場合。 >なんで? 変更コストが下がるから。 なぜ下がる? 色々あるがひとつには、DDDで言う「ドメイン」の言葉をモデリングすると、業務の言葉と開発の言葉が、一致(ユビキタス化)するから。両者を翻訳しなくて済む。まあVBAでのOOPはムダに意識が高く感じるかもだが、「すべてがオブジェクト」のRubyなら、「いつ」ではなく、つねにクラスで全体を構築する(から便利)。
0
Yeme @yer_meme 2020年2月11日
OOPが便利!なレベルのプログラム書くならVBAをそもそも使いたくないっス……何よりVBAって確か第一級関数じゃないっスよね?書き辛くてイライラするっス。いっそcsvでくれ😡
2
スズメ @suzume002 2020年2月11日
クラスモジュールはデバッグの時に内部で止まってくれないのが難点
0
xi @accountLINKonly 2020年2月11日
作るときは手軽でいいけどデバッグやメンテでしねばいいのにってなるクラスモジュールさんマック味あるよねwinだけど
0
えあ @air_aterazawa 2020年2月11日
VBAはクラス使ったことあったかな…たぶんない…誰かの作ったdllならある…ソース見せろksgってなることがあるのでほんといや…クラスの意味…?しらね…
0
ねや @AriaSub 2020年2月12日
みんな使ってるよ。 worksheetクラスを継承した、worksheet1クラスを作成して、そこに_clickとかのabstractメソッドをorverrideしてビジネスロジックを書いてる。 VBは言語使用やRADツールが優秀で、その当たりを全自動でやってくれるからいちいち書かなくて良いだけ。 class構文は他人に使わせるライブラリ側を書くときに使うね。
1
ちゅん🐣VBAer @KotorinChunChun 2020年2月12日
suzume002 クラスの中で止めたい場合は、VBEのオプションを変えると良いですよ。
1
スズメ @suzume002 2020年2月12日
KotorinChunChun 「ツール」「オプション」「全般」「エラートラップ」の「クラス モジュールで中断」ですね。ありがとうございます。
1
sk @sk_exe 2020年2月14日
ただデータをいじくりまわす処理を実行するだけなら「個人の自由」、UI部分(主にイベント周り)に関わる機能の実装も含めるなら「ラッパークラスを作った方が便利な場合がある」という印象。
0
うの @uniquis 2020年2月17日
「この規模だとExcelだと性能出ないですよ止めましょうよ」 「絶対にExcelしかダメ🙅‍♂️」 みたいな案件の時にはクラスモジュール書いた覚えがあるな……
0