• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VBA】IF構文の条件式で範囲が同一の場合)

【VBA】IF構文で範囲が同一の場合の条件式のスッキリした記述方法

このQ&Aのポイント
  • VBAのIF構文で複数条件を指定する方法について質問があります。
  • 具体的には、範囲が同一の場合に条件式をスッキリと記述する方法を知りたいです。
  • 現在の記述では冗長な感じがするので、より効率的な方法があれば教えていただきたいです。

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

  • ベストアンサー
回答No.5

InStrを使うのもシンプルだと思いますが、先頭一文字が対象なら Like演算子 を使ってもいいですね。 If Cells(1, 1) Like "[あいう]*" Then   MsgBox "Hit!" End If

rihitomo
質問者

お礼

なるほど、like演算子にはそういう使い方もあるんですね。とてもわかりやすく、かつシンプルで気に入りました。 すばらしいです。 ありがとうございます。

その他の回答 (6)

回答No.7

ご質問の趣旨からはちょっとずれるかもしれませんが。皆さんが教えてくださっているアイディアに加えて、良かったら次のこともご参考になさってください。 必要はなくても、あえて変数を宣言して放り込んでおくと、文字数が減ってスッキリしたり、分かりやすくはなると思います。 Dim rng As Range Dim cap As String Set rng = Cells(1, 1) cap = Left$(rng, 1) If cap Like "[あいう]*" Then rng.EntireRow.Delete あとご質問の処理の内容では出す余地がなさそうですが、With ステートメントを使うと、行数は増えますが 1 行中の文字数が減ってスッキリします。 With Worksheets(1)   .Range("a1").Value = .Range("b1").Value & .Range("c1").Value   With .Range("e1")     If .Value = 0 Then .ClearContents   End With End With 省略形の「Range("e1") = 0」ではなく、「Range("e1").Value = 0」というふうに考えれば、With により「Range("e1")」を書かないことができるという点に注意してください。

rihitomo
質問者

お礼

1度しか使わないコードは宣言しなかったんですが、たしかに宣言したほうが見やすいこともありますね。 参考にさせていただきます。 ありがとうございます。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.6

例えば、 Sub Sample()   Select Case Left$(Cells(1, 1), 1)     Case "あ", "い", "う"       MsgBox "処理1" '    Case Else '      MsgBox "処理2"   End Select End Sub こんなのもアリかもしれないですね。 まだ冗長と言われるかもしれませんが。

rihitomo
質問者

お礼

select caseで一文字目を判別するんですね。 ワークシート関数も色んなやり方があって面白いと思ったんですが、VBAはそれ以上に方法が多彩ですね。 ありがとうございます。

回答No.4

補足、Incharsのテスト画像

回答No.3

IF Inchars("あ,い,う", Left$(Cells(1, 1), 1)) Then と書くことも可能。 ただし、標準モジュールに次の関数を追加する手間があります。 Public Function Inchars(ByVal Text As String, ByVal C As String) As Boolean   Inchars = CBool(InStr(1, Text, C, vbBinaryCompare) > 0) End Function

rihitomo
質問者

お礼

できました。 ありがとうございます。 ユーザー定義関数(?)を使ってやる方法ですね。 なんだか少し上級者になった気がしますw

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ふつーに「マクロ的」には,例えば次のように「1つずつ検査」を必要なだけ繰り返して実現するような手です。 sub macro1()  dim x as string  dim a as variant  dim h as variant  x = left(range("A1"), 1)  a = array("あ","い","う")  for each h in a   if h = x then    msgbox "FOUND"    exit sub   end if  next  msgbox "NOT FOUND" end sub 敢えて奇を衒うなら sub macro2()  dim res as variant  res = filter(array("あ","い","う"), left(range("A1"), 1))  if ubound(res) = -1 then   msgbox "NOT FOUND"  else   msgbox "FOUND"  end if end sub みたいな事もできますが,だから何?ってカンジはします。

rihitomo
質問者

お礼

ありがとうございます。 一旦arrayで配列に組み込んでからやる方法ですね。 勉強になります。

回答No.1

VBAには残念ながらinclude的なものはないので、 逆に考える inStr( "あいう", Left$(Cells(1,1)) )

rihitomo
質問者

お礼

ありがとうございます。 試してみたんですが、"引数は省略できません"のエラーがLeft$で出てしまいました。

関連するQ&A