- ベストアンサー
ExcelVBA select case 値設定
ExcelVBAのSelect Caseで Select Case 数式または文字列式 Case 値1, 値2, 値3 処理 Case Else 処理 End Select のようにカンマで区切ると複数の値を指定できるはずです。 この値1, 値2, 値3のところに別のシートのA1、A2、A3に入っている値を設定したいのですが そのようなことは可能でしょうか?(A1→値1 A2→値2 A3→値3) 5年ぶりにVBAを書いていますが、びっくりするぐらい忘れています。。。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> A列で上から順番に値を入力されています。 > そういうパターンに対応できる形にしたいです。 > A列の空白以外のセルの数を取得したりするやり方はわかります。 なら Select Case でやらなくてもいいんじゃないでしょうか? たとえば配列や Collection などを使うとか。 あとはそれをループさせ、ループの中で 1度でもヒットしたところでフラグを立ててループを脱出する。 その後にフラグの状態に合わせて処理を 2分割する。 Collection なら Add メソッドで簡単に要素を追加できるし For Each でループできる。 Dim cellValues As New Collection cellValues.Add Item:="セルの値", Key:="キー情報" Dim cellValue As Variant For Each cellValue In cellValues If hoge = cellValue Then flag = True Exit For End If Next If flag Then 処理 Else 処理 End If
その他の回答 (1)
- okormazd
- ベストアンサー率50% (1224/2412)
そのまま、 With WorkSheets("シート名") Case .Range("A1"), .Range("A2"), .Range("A3") End With でいいでしょう。 あるいは、それぞれのセルの値を変数に入れてもいいでしょう。 a=.Range("A1") b=.Range("A2") c=.Range("A3") Case a,b,c とか。
お礼
値の数は、今のところ多くても10個ぐらいなので、okormazd様の教えてくださったやり方でうまくいきました。 一致する場合に指定した処理をする、という流れなので、値の数が少ない場合はダミーの値を入れておけばいいということを、回答を読むまで思いつきませんでした。 本当にありがとうございました。
補足
値の数は変動します。 A列で上から順番に値を入力されています。 そういうパターンに対応できる形にしたいです。 A列の空白以外のセルの数を取得したりするやり方はわかります。
お礼
時間がなかったので、先に回答をいただいた方のやり方で、解決しました。 急ぎで解決したい表では、Select Caseで指定する値の数が、最大10個ぐらいだたのですが、値が多くなることも考えらるので、時間が出来たら教えていただいたループで試してみたいと思います。 フラグを付ける、というのは使えそうです。 本当にありがとうございました。