• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンボボックスの記述の簡素化)

Excel VBAでコンボボックスの記述を簡素化する方法

このQ&Aのポイント
  • Excel VBAを使用して、コンボボックスのデータを表示するための記述が複雑である場合、より簡素化する方法について説明します。
  • コンボボックスのデータ表示に関する記述が大量に必要な場合、条件分岐を使用して効率的に処理する方法を紹介します。
  • ExcelのVBAを利用して、コンボボックスのデータ表示をスマートに行う方法を解説します。条件分岐を使用することで、短い記述で複数の場合分けを行い、効率的にコードを実装することができます。

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

  • ベストアンサー
  • ponta1971
  • ベストアンサー率30% (361/1191)
回答No.2

お礼見ました。 説明ですね。 a[X][2] = {{"C3","Sheet2!D3:D18"},{"C4","Sheet2!E3:E20"},・・・,{"20","Sheet2!U3:U20"},{"21","Sheet2!V3:V20"}} この部分で、それぞれのIf文の中で値が変わる部分を配列に入れています。 {}の中にさらに{}があります、この中の値と書かれているソースを見比べてもらえれば、どの値を入れているのか分かるかと思います。 ただ、見直したところ、少し間違えていました。 a[X][2] = {{"C3","Sheet2!D3:D18"},{"C4","Sheet2!E3:E20"},・・・,{"C20","Sheet2!U3:U20"},{"C21","Sheet2!V3:V20"}} こちらの記述になります。 ここでXの値ですが、If~ElseIf~ElseIf・・・を何回繰り返すかによります。 5回繰り返せばX=5になります。 配列に格納される値ですが、この場合。 a[0][0] = "C3"、a[0][1] = "Sheet2!D3:D18" a[1][0] = "C4"、a[1][1] = "Sheet2!E3:E20" ・・・ a[X-2][0] = "C20"、a[X-2][1] = "Sheet2!U3:U20" a[X-1][0] = "C21"、a[X-1][1] = "Sheet2!V3:V20" このようになります。 For i = 0 To X-1  If Worksheets("Sheet2").Range(a[i][0]).Value = Worksheets("Sheet2").Range("C2").Value Then   品名リスト.RowSource = a[i][1]   break  End If Next i For文とIf文の書き方は調べていただくとして。 For文でi=0からi=X-1までiを1増やしながら繰り返しています。 Xは配列の数になります。 i=1からi=Xでないのは、配列を利用するときにキー(配列の[]の中の数字)は0から始まるためです。 If文を見てもらえば、書かれていたソースのIf文とほとんど同じだと分かると思います。 違う箇所はa[i][0]とa[i][1]の部分です。 i=0の場合、上の配列の部分で書いたa[0][0]とa[0][1]の値が入ることになります。 If文がTRUEになって処理が実行されれば、breakの処理が行われ、For文のループを抜け、以後の処理は実行されません。 どうも、説明が苦手なので分かりにくいかと思いますが・・・。 こんな感じでどうでしょうか?

1211M
質問者

お礼

ponta1971さん 親切なご回答いただきましてありがとうございました。 感謝申し上げます。 解決できました。

その他の回答 (2)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

こんにちわ Dim n As Long With Worksheets("Sheet2") For n = 3 To 21 'c3 to c21 If .Cells(n, 3).Value = .Cells(2, 3).Value Then '品名リスト.RowSource = "Sheet2!D3:D18" 'Debug.Print "Sheet2!" & Cells(3, n + 1).Resize(16, 1).Address(0, 0) 品名リスト.RowSource = "Sheet2!" & Cells(3, n + 1).Resize(16, 1).Address(0, 0) Exit For End If Next n End With

1211M
質問者

お礼

ki-aaaさん 回答いただきましてありがとうございます。 勉強させていただきます。

  • ponta1971
  • ベストアンサー率30% (361/1191)
回答No.1

>If Worksheets("Sheet2").Range("C3").Value = Worksheets("Sheet2").Range("C2").Value Then 品名リスト.RowSource = "Sheet2!D3:D18" このIF文の中で"C3"の部分と"Sheet2!D3:D18"以外は全て同じようですので。 この部分を配列に入れておいてFOR文で処理を回すのでどうでしょう。 -------------------------------------------- a[X][2] = {{"C3","Sheet2!D3:D18"},{"C4","Sheet2!E3:E20"},・・・,{"20","Sheet2!U3:U20"},{"21","Sheet2!V3:V20"}} For i = 0 To X-1 If Worksheets("Sheet2").Range(a[i][0]).Value = Worksheets("Sheet2").Range("C2").Value Then 品名リスト.RowSource = a[i][1] break End If Next i -------------------------------------------- 文法がまちがってるかもしれませんが、こんな感じでどうでしょう。 Xは配列のサイズの応じて適切な値を入れてください。

1211M
質問者

お礼

ponta1971さんありがとうございます。 高度過ぎて私には理解できませんが、説明文を付けていただけないでしょうか。 また、この適切な値とは何を指すのでしょうか。 勉強不足ですみません。 よろしくお願いします。

関連するQ&A