重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

時間がなかったので、先に回答をいただいた方のやり方で、解決しました。

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

本当にありがとうございました。

お礼日時:2014/02/22 10:43

そのまま、



With WorkSheets("シート名")

Case .Range("A1"), .Range("A2"), .Range("A3")

End With

でいいでしょう。

あるいは、それぞれのセルの値を変数に入れてもいいでしょう。

a=.Range("A1")
b=.Range("A2")
c=.Range("A3")

Case a,b,c

とか。

この回答への補足

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

補足日時:2014/02/19 02:18
    • good
    • 0
この回答へのお礼

値の数は、今のところ多くても10個ぐらいなので、okormazd様の教えてくださったやり方でうまくいきました。

一致する場合に指定した処理をする、という流れなので、値の数が少ない場合はダミーの値を入れておけばいいということを、回答を読むまで思いつきませんでした。

本当にありがとうございました。

お礼日時:2014/02/22 10:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!