【ExcelVBA】Case文の話
お仕事であったしょうもない話題を一つ、備忘録として。
「VBAって何?」な人は無視してください。
Excelにてあるツールを作成したとき、こんなこと⇩を書いて いたのです。
===============================
'「対象」シートのA列に記述された文だけ判定し、各処理を実行 。
Do While ThisWorkbook.Sheets("対象").Cell s(i, 1) <> ""
Select Case Mid(ThisWorkbook.Sheets("対象"). Cells(i, 1), 2, 2)
Case ThisWorkbook.Sheets("参照先").Cel ls(1, 2).Value
処理1
Case ThisWorkbook.Sheets("参照先").Cel ls(2, 2).Value
処理2
Case ThisWorkbook.Sheets("参照先").Cel ls(3, 2).Value
処理3
Select Case Mid(ThisWorkbook.Sheets("対象").
Case ThisWorkbook.Sheets("参照先").Cel
処理1
Case ThisWorkbook.Sheets("参照先").Cel
処理2
Case ThisWorkbook.Sheets("参照先").Cel
処理3
End Select
i = i + 1
Loop
Loop
===============================
実際のものとは当然違いますが、シートは⇩こんな感じ。
Case文って条件節にカンマ区切りで記述しても認識してくれる ので、
参照先がカンマ区切りしてあるからできると思ったんですわ。
Case AG,DA,KO
として判定してくれるだろう、みたいな。
「.Value」の部分を「.Text」にしてもうまくいかないです。
結局データ型に関係なく「AG,DA,KO」というひとかたまりと比較しているらしく、カンマ区切りされたセル内の要素を一つ一つ判定することはできません。
ちなみに、この時の正解はこれ。
↓
↓
===============================
'「対象」シートのA列に記述された分だけ判定し、各処理を実行 。
Do While ThisWorkbook.Sheets("対象").Cell s(i, 1) <> ""
'「対象」シートのA列に記述された分だけ判定し、各処理を実行
Do While ThisWorkbook.Sheets("対象").Cell
'「参照先」シートのB列に対象の文字列が1つ以上含まれていれば、該当処理実行。
Select Case True
Case InStr(ThisWorkbook.Sheets("参照先 ").Cells(1,2).Value,Mid( ThisWorkbook.Sheets("対象"). Cells(i, 1), 2, 2)) > 0
処理1
Case InStr(ThisWorkbook.Sheets("参照先 ").Cells(2,2).Value,Mid( ThisWorkbook.Sheets("対象"). Cells(i, 1), 2, 2)) > 0
処理2
Case InStr(ThisWorkbook.Sheets("参照先 ").Cells(3,2).Value,Mid( ThisWorkbook.Sheets("対象"). Cells(i, 1), 2, 2)) > 0
処理3
Case InStr(ThisWorkbook.Sheets("参照先 ").Cells(4,2).Value,Mid( ThisWorkbook.Sheets("対象"). Cells(i, 1), 2, 2)) > 0
処理4
End Select
Select Case True
Case InStr(ThisWorkbook.Sheets("参照先
処理1
Case InStr(ThisWorkbook.Sheets("参照先
処理2
Case InStr(ThisWorkbook.Sheets("参照先
処理3
Case InStr(ThisWorkbook.Sheets("参照先
処理4
End Select
i = i + 1
Loop
Loop
===============================
Case True、使ったことなかったんですよね。。。
ちょこっと賢くなりました。