相変わらず、Excel/VBAについて記載していきます。
前回までは、Ifの条件式として、”完全一致”を例にしてきました。
しかし、文字を対象にした場合、完全一致では難しいこともあります。
※完全一致は、その名の通りです。
東京都と完全一致するのは、「東京都」であり、「東京」は完全一致になりません。
そこで使いたくなるのが、
前回までは、Ifの条件式として、”完全一致”を例にしてきました。
しかし、文字を対象にした場合、完全一致では難しいこともあります。
※完全一致は、その名の通りです。
東京都と完全一致するのは、「東京都」であり、「東京」は完全一致になりません。
そこで使いたくなるのが、
- 〜を含む(部分一致)
- 〜で始まる(前方一致)
- 〜で終わる(後方一致)
といった、条件です。
例えば、
- 豆乳プリン
→「プリン」を含む、または「プリン」で終わる - プリンアラモード
→「プリン」を含む、または「プリン」で始まる - カスタードプリンパフェ
→「プリン」を含む
とかですね。
その場合はどのような書き方をすればよいのか、ご案内していきます。
1.完全一致と、それ以外の表記の違い
まず完全一致には、A = Bというように、条件式を記載します。
ActiveCell.Value = "プリン"
Range("A1").Value = ”プリン”
それ以外の条件の場合は、「=」ではなく「Like」と記載します。
ActiveCell.Value Like "プリン"
Range("A1").Value Like ”プリン”
しかしながら、このままでは完全一致のままです。
部分一致や前方一致を行う場合は、対象の文字列側にも記載の工夫をする必要があります。
それは、ワイルドカード「*」です。
2.〜を含む(部分一致)を記載してみる
早速、部分一致を書いてみます。
部分一致の場合は、前項の通り「Like」を使うことと、条件として指定したい文言を「*」で囲みます。
今回は、「プリンを含む」としたいので、Like "*プリン*"としましょう。
【サンプルデータ】
【サンプルマクロ】
〜〜〜ここから〜〜〜
Sub プリン()
Range("A1").Select
Do
If ActiveCell.Value Like "*プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンを含む"
ElseIf ActiveCell = "" Then
Exit Do
End If
ActiveCell.Offset(1).Select
Loop
End Sub
〜〜〜ここまで〜〜〜
【サンプル実施結果】
このように、今回のサンプルでは、全て”プリン”を含みますので、B列には全て
「プリンを含む」という値が入りました。
3.〜から始まる(前方一致)を記載してみる
次は、前方一致です。
前方一致の場合は、同様に「Like」を使い、条件として指定したい文言の後ろに「*」を付けます。
今回は、「プリンから始まる」としたいので、Like "プリン*"とします。
【サンプルデータ】
【サンプルマクロ】
前項の部分一致は、ElseIfとして、前方一致の後の条件に残しています。
※前方一致より、部分一致のほうが対象が広いので、部分一致を後にしています。
〜〜〜ここから〜〜〜
Sub プリン()
Range("A1").Select
Do
If ActiveCell.Value Like "プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンで始まる"
ElseIf ActiveCell.Value Like "*プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンを含む"
ElseIf ActiveCell = "" Then
Exit Do
End If
ActiveCell.Offset(1).Select
Loop
End Sub
〜〜〜ここまで〜〜〜
【サンプル実施結果】
このように、「プリン」で始まる、「プリン」と「プリンアラモード」には、「プリンで始まる」と入りました。
4.〜で終わる(後方一致)を記載してみる
最後は、後方一致です。
後方一致の場合は、同様に「Like」を使い、条件として指定したい文言の前に「*」を付けます。
今回は、「プリンで終わる」としたいので、Like "*プリン"とします。
【サンプルデータ】
【サンプルマクロ】
前項の前方一致は、ElseIfとして、後方一致の後の条件に残しています。
※前方一致と後方一致は、条件的に重ならないので、どちらを先に設定しても問題ありません。
唯一、完全一致だけは、「前方一致」でもあり、「後方一致」なので、先に設定したほうが優先されます。
〜〜〜ここから〜〜〜
Sub プリン()
Range("A1").Select
Do
If ActiveCell.Value Like "*プリン" Then
ActiveCell.Offset(0, 1).Value = "プリンで終わる"
ElseIf ActiveCell.Value Like "プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンで始まる"
ElseIf ActiveCell.Value Like "*プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンを含む"
ElseIf ActiveCell = "" Then
Exit Do
End If
ActiveCell.Offset(1).Select
Loop
End Sub
〜〜〜ここまで〜〜〜
【サンプル実施結果】
狙い通り、豆乳プリンは、後方一致と判定され、「プリンで終わる」と入力されています。
一つだけ問題があり、「プリン」も後方一致判定されてしまっています。
これは、先ほども記載した通り、完全一致のワードは、「前方一致」でもあり、「後方一致」でもあるので、
先に書いたほうが処理されます。
5.完全一致も含めて、完成させる
最後です。
条件としては、完全一致が一番対象が狭いですので、一番最初に設定します。
少し汚い図ですが、上記のような感じです。
条件分岐は、狭い範囲から削り取っていくイメージなので、まず一番最初に、完全一致の部分を設定します。
次に、前方一致か後方一致を順不同で設定します。
最後は、部分一致です。
これは、条件に一致するデータしか存在しないのであれば、Else(その他)でOKです。
逆に、条件に一致しないデータ(サンプルの場合は「チョコレート」とか)が存在するのであれば、
部分一致の条件式を設定しておいて、最後にElseを設定します。
【サンプルマクロ】
今回は、その他も記載しておきます。
〜〜〜ここから〜〜〜
Sub プリン()
Range("A1").Select
Do
If ActiveCell.Value = "プリン" Then
ActiveCell.Offset(0, 1).Value = "プリン"
ElseIf ActiveCell.Value Like "*プリン" Then
ActiveCell.Offset(0, 1).Value = "プリンで終わる"
ElseIf ActiveCell.Value Like "プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンで始まる"
ElseIf ActiveCell.Value Like "*プリン*" Then
ActiveCell.Offset(0, 1).Value = "プリンを含む"
ElseIf ActiveCell = "" Then
Exit Do
Else
ActiveCell.Offset(0, 1).Value = "その他"
End If
ActiveCell.Offset(1).Select
Loop
End Sub
〜〜〜ここまで〜〜〜
【サンプル実施結果】
このようになります。
6.まとめ
ここまでで、条件分岐については、ほぼ網羅できたかと思います。
繰り返し処理、条件分岐を駆使して、データ精査に活用いただけると幸いです。
次回は、For~Nextを使った繰り返し処理をご案内したいと考えています。
それではまた
コメント
コメントを投稿