• ベストアンサー

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を書いていますが、びっくりするぐらい忘れています。。。

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

  • ベストアンサー
  • x-1919
  • ベストアンサー率52% (91/173)
回答No.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

MISAKI123
質問者

お礼

時間がなかったので、先に回答をいただいた方のやり方で、解決しました。 急ぎで解決したい表では、Select Caseで指定する値の数が、最大10個ぐらいだたのですが、値が多くなることも考えらるので、時間が出来たら教えていただいたループで試してみたいと思います。 フラグを付ける、というのは使えそうです。 本当にありがとうございました。

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

そのまま、 With WorkSheets("シート名") Case .Range("A1"), .Range("A2"), .Range("A3") End With でいいでしょう。 あるいは、それぞれのセルの値を変数に入れてもいいでしょう。 a=.Range("A1") b=.Range("A2") c=.Range("A3") Case a,b,c とか。

MISAKI123
質問者

お礼

値の数は、今のところ多くても10個ぐらいなので、okormazd様の教えてくださったやり方でうまくいきました。 一致する場合に指定した処理をする、という流れなので、値の数が少ない場合はダミーの値を入れておけばいいということを、回答を読むまで思いつきませんでした。 本当にありがとうございました。

MISAKI123
質問者

補足

値の数は変動します。 A列で上から順番に値を入力されています。 そういうパターンに対応できる形にしたいです。 A列の空白以外のセルの数を取得したりするやり方はわかります。

関連するQ&A