• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA: Select Caseを短くしたい)

VBA: Select Caseを短くしたい

このQ&Aのポイント
  • Excel2003のVBAでクラスモジュールを使用している場合、Select Case文でCaseが多い場合にコードを短くするテクニックをご紹介します。
  • 配列にデータを入れることや外部ファイルの使用を避けたい場合、クラスモジュール内で完結する方法があります。
  • この方法を使うと、コードを短くすることができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

何のためにコードを短くしたいのでしょうか? 例えば配列に入れたとすると、i の値に応じて1つの文字列が欲しいだけなのに その前にすべてを配列に入れなければなりません。 一番速いのは最初の Select Case の形でしょう。 それでもコードを短くしたいというのなら、Array関数ですかね。 Str = Array("", "momo", "sakura" ・・・"tsubaki")(i)

masnoske
質問者

お礼

ありがとうございます。 コード利用者から見れば、ファイルサイズは小さく(=コードは短く)、速いというのは重要ですね。 コード保守の面から見れば、コードは判りやすいのが重要。 両立させるのは、難しいですね。 スピードの比較もやってみます。

その他の回答 (5)

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.6

masnoskeさん こんにちは。 【クラスモジュール内だけで完結】は微妙ですが、管理上一番適しているのは、EXCEL表を使用します。 例えば管理用シート(名前は自由に)を作り、A1セルにmomo、A2セルにsakura……A100セルにtsubaki と入力し、範囲(A1:A100)に名前をつけます。例えば【木】とします。 変数Iから、特定の木の種類を求める時は Range("木")(I) で求められます。 コードはすっきりするし、データの管理も表でわかりやすくなるかと思います。 ※必要なら、管理シートを隠せばユーザからはわかりません。 ご検討ください。

masnoske
質問者

お礼

回答ありがとうございます。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.5

strに代入する文字に,がないなら(,があるなら|等を利用する) dim str as string i = 2 としておくと str = split("momo,sakura,・・・,,,,,tsubaki",",") (i) で"sakura"が取れてしまうので、最も短いかなあと思いますが、 お薦めしません! 修正する必要がでたときにわからなくなるのがオチです。 他の方が書いておられるarrayを使う方法や質問文の方法(私もこちらが一番早いと思うが。)のほうが いいです。 書いてあるメソッドの全体が俯瞰しにくいとかが質問の動機なら、 該当部分だけをfunctionにして、 str =funSetStr(i) とかかいて、funSetStr()のほうに書けばいいだけです。

masnoske
質問者

お礼

回答ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

配列の要素番号と配列の値の対応を一致させたら仕舞いではないのか。 VBAではx=Array(””、"桃"、”桜",・・・) これでstr=x(2)で"桜がStrに入るだろう..。 VBAでクラスモジュールなんて言う人が、こんなことを聞くなんて。 ーー 文字列が同じ長さなら、全部結合した文字列から、あり場所は番号で探せる。 ーー あえて最大長に合わすすために後ろのスペースをいれる方法もある。その場合後尾のスペースは、Trimでけずれる。 x="momo sakura tsubaki・・・"(最大長を7と仮定) 2の分は Mid(x,(2-1)*7+1,7) で取れる。あとTrimをかます。

masnoske
質問者

お礼

回答ありがとうございます。

回答No.3

1) :を使って1行に何個も文を書く  Select Case i:Case 1: str = "momo": Case 2: str = "sakura": .... : Case 100: str = "tsubaki": End Select  行は短くなるけど、文字数としてはこっちの方が上か? 2) Array関数を使う  str = Array("momo", "sakura", .... , "tubaki") の2つが思いついたが、どっちもいまいちな感じですね。

masnoske
質問者

お礼

回答ありがとうございます。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

下記の方法もありますね。すでにANo.1さんが書かれていますが。 定義部 Dim vrnArray As Variant Dim i As Integer Dim str As String vrnArray = Array(, "A", "B", "C", "D", "E", _ "F", "G", "H", "I", "J") 実行部 str = vrnArray(i) 'iは1から

masnoske
質問者

お礼

回答ありがとうございます。

関連するQ&A