![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
下記の記述でコンボボックスにデーターを表示するようにしたのですが
大量に記述が必要になります。
もっと簡素化できないでしょうか。
よろしくお願いします。
If Worksheets("Sheet2").Range("C3").Value = Worksheets("Sheet2").Range("C2").Value Then
品名リスト.RowSource = "Sheet2!D3:D18"
ElseIf Worksheets("Sheet2").Range("C4").Value = Worksheets("Sheet2").Range("C2").Value Then
品名リスト.RowSource = "Sheet2!E3:E20"
― ― 省略 ― ―
ElseIf Worksheets("Sheet2").Range("C20").Value = Worksheets("Sheet2").Range("C2").Value Then
品名リスト.RowSource = "Sheet2!U3:U20"
ElseIf Worksheets("Sheet2").Range("C21").Value = Worksheets("Sheet2").Range("C2").Value Then
品名リスト.RowSource = "Sheet2!V3:V20"
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文のループを抜け、以後の処理は実行されません。
どうも、説明が苦手なので分かりにくいかと思いますが・・・。
こんな感じでどうでしょうか?
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
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は配列のサイズの応じて適切な値を入れてください。
ponta1971さんありがとうございます。
高度過ぎて私には理解できませんが、説明文を付けていただけないでしょうか。
また、この適切な値とは何を指すのでしょうか。
勉強不足ですみません。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBA リスト表示していますが 3 2023/05/18 12:12
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
配列で飛び飛びの値を指定して...
-
特定のセル範囲で4文字以上入力...
-
fortranのプログラムで困ってい...
-
行列の積の計算プログラムを教...
-
VB2008: CSV を二次元配列に読...
-
VB.NET2015 サブルーチンの使い方
-
for each の現在の配列ポインタ...
-
クイックソート
-
fortran 渡す値について
-
コンボボックスの記述の簡素化
-
マクロの記録を使用したマクロ...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
教えて下さい
-
ExcelVBAでPDFを閉じるソース
-
ExcelのVBAを使ってタイトル行...
-
特定のPCだけ動作しないVBAマク...
-
UserForm1.Showでエラーになり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
for each の現在の配列ポインタ...
-
配列変数の添字が範囲外ですと...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
subの配列引数をoptionalで使う...
-
ListViewで、非表示列って作れ...
-
VB6 配列を初期化したい
-
Excel-VBAの配列「Public Const...
-
配列を任意の数値で埋める方法
-
VBのFunctionで、配列を引数...
-
Dim は何の略ですか?
-
2次元動的配列の第一引数のみを...
-
verilogで配列の任意の8bitを取...
-
エクセルで最小値から0を除く方法
-
VBA Match関数の限界
-
Excel VBA配列をFunctionに渡す
-
VB2008: CSV を二次元配列に読...
-
fortranでのcsvファイルの読み込み
おすすめ情報