- ベストアンサー
【VBA】IF構文で範囲が同一の場合の条件式のスッキリした記述方法
- VBAのIF構文で複数条件を指定する方法について質問があります。
- 具体的には、範囲が同一の場合に条件式をスッキリと記述する方法を知りたいです。
- 現在の記述では冗長な感じがするので、より効率的な方法があれば教えていただきたいです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
InStrを使うのもシンプルだと思いますが、先頭一文字が対象なら Like演算子 を使ってもいいですね。 If Cells(1, 1) Like "[あいう]*" Then MsgBox "Hit!" End If
その他の回答 (6)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
ご質問の趣旨からはちょっとずれるかもしれませんが。皆さんが教えてくださっているアイディアに加えて、良かったら次のこともご参考になさってください。 必要はなくても、あえて変数を宣言して放り込んでおくと、文字数が減ってスッキリしたり、分かりやすくはなると思います。 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")」を書かないことができるという点に注意してください。
お礼
1度しか使わないコードは宣言しなかったんですが、たしかに宣言したほうが見やすいこともありますね。 参考にさせていただきます。 ありがとうございます。
- tsubuyuki
- ベストアンサー率45% (699/1545)
例えば、 Sub Sample() Select Case Left$(Cells(1, 1), 1) Case "あ", "い", "う" MsgBox "処理1" ' Case Else ' MsgBox "処理2" End Select End Sub こんなのもアリかもしれないですね。 まだ冗長と言われるかもしれませんが。
お礼
select caseで一文字目を判別するんですね。 ワークシート関数も色んなやり方があって面白いと思ったんですが、VBAはそれ以上に方法が多彩ですね。 ありがとうございます。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
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
お礼
できました。 ありがとうございます。 ユーザー定義関数(?)を使ってやる方法ですね。 なんだか少し上級者になった気がしますw
- keithin
- ベストアンサー率66% (5278/7941)
ふつーに「マクロ的」には,例えば次のように「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 みたいな事もできますが,だから何?ってカンジはします。
お礼
ありがとうございます。 一旦arrayで配列に組み込んでからやる方法ですね。 勉強になります。
- play_with_you
- ベストアンサー率37% (112/301)
VBAには残念ながらinclude的なものはないので、 逆に考える inStr( "あいう", Left$(Cells(1,1)) )
お礼
ありがとうございます。 試してみたんですが、"引数は省略できません"のエラーがLeft$で出てしまいました。
お礼
なるほど、like演算子にはそういう使い方もあるんですね。とてもわかりやすく、かつシンプルで気に入りました。 すばらしいです。 ありがとうございます。