質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

3575閲覧

VBAでEnumの利用方法について

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/02/10 10:43

https://teratail.com/questions/173584
前回上記のような質問をさせて頂き、
Enumを利用するのが良いというご意見を
頂きました。

今回、セルの列指定で定数を繰り返し利用しそうなので
Enumを利用しようと思うのですが、
例えば
標準モジュール1...Sheet1のB列、C列、H列を利用
標準モジュール2...Sheet2のB列、C列、I列、Q列を利用

といった形式で複数のモジュールで同じシートの値を利用する場合、
どちらの方法が可読性が高く保守しやすいものになるのでしょうか。

  1. 標準モジュール1など、利用する標準モジュールのどこかに

Sheet1で利用する値をまとめてEnumで定義する

  1. 新規標準モジュールをEnum用に作成し、Sheet1で利用する値をまとめてEnumで定義する

イタリックテキスト
3. 各モジュールで利用する値の分だけ個別にprivate Enumを定義する。

ちなみに今回定義することになる定数の総数は40程度です。

初歩的な質問で申し訳ございませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

先ずは構造化プログラミングについて知識を深められた方が良いように思います。
内容からすると、クラスも視野に入ってくるでしょうし。
VBA モデル化の概念を理解すると、クラスモジュールの使い方が分かる

投稿2019/02/10 13:09

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/10 20:31

ご回答ありがとうございます! データのモデル化という考え方が非常に勉強になりました。 次回以降、定数などを定義して他で利用した方が分かりやすいという場面があったら是非利用してみようと思います。
guest

0

ベストアンサー

私ならモジュールが1つなら1の案で済ませますが、どうしても2つ以上のモジュールから同じシートを参照する場合は2のように定義用のモジュールを作ると思います。

ただ2にするとPublicで宣言することになるので、どのシートの列情報なのか判別がつくように(1以上に)名前を工夫する必要があります。

ちなみに3は絶対やめたほうが良いです。
列が変化した時に二箇所直さなければならず、間違いなく将来後悔します。
せっかくのEnumの自動連番付与も使えなくなりますし・・。

1箇所で全ての列をEnumで定義したほうが保守性としては一番良いと思います。

投稿2019/02/10 10:52

KotorinChunChun

総合スコア73

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/10 20:26

ご回答ありがとうございます! 実は周りにVBAで開発経験がある方がいないので非常に参考になりました。 今回は2の案で命名を明確になるようにしてやってみようと思います。 回答を早く頂け回答が明確だったのでベストアンサーにさせて頂きます。
guest

0

前回上記のような質問をさせて頂き、
Enumを利用するのが良いというご意見を
頂きました。

一案であるだけで、そうしなければならないわけでもなく、
ベストな案かどうかは時と場合によるでしょう。

前回の回答にもあるように、チームで開発しているのですから、
チームのルールにより開発するべきです。
急に変わったことをしたら、混乱を招くことがあるかも知れません。
まずは、Enumで定義するのはありかなしか、
上司や同僚にアドバイスをもらいましょう。

そのうえで、いろんなモジュールで再利用するんだあという方針になったのなら、
第3のモジュールでパブリックで定義することになるかもしれません。
ぼくなら、自作関数で値を呼び出すようにするかもしれませんが、
なんでそんなことでうじうじ悩んでいるかがわかりません。
ConstでといわれたならConstでいけばいいのでは?

なんにしても、一般論を議論してもあまり意味はないような気がします。
ただし、知識を深めていこうと努力されているのには、好感が持てます。
どんどん、がしがし、質問しましょう^^

投稿2019/02/10 13:42

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/10 20:38

ご回答ありがとうございます! 今回、自分1人で開発しており、周囲にVBA開発経験者が誰もいません。 そのためVBAの開発の定石のようなものが分からず、こちらで色々と質問をさせて頂いて勉強させて頂いています。 前回の質問では、意図はなかったのですが愚痴的な質問に見え、気分を害されたのでしたら申し訳ございません。またこの手の質問をしてしまうかもしれませんが、より良い方法や別の方法はないかという意図で質問するようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問