はじめに
学習メモです。間違えている可能性があります。
正規表現(のような)マッチング
Like演算子を用いることで、簡易的なパターンマッチングを行うことが出来る。
記号 | 意味 | 例 |
---|---|---|
? | 任意の1文字 | 「ささ?」の場合、ささき/ささや/ささこなど |
* | 0個以上の任意の文字 | 「あ*」の場合、あい/あかさ/あいうえおなど |
# | 1文字の数値 | 「##」の場合、01/34/68など |
[] | []内に指定した文字の中の1文字 | 「[A-C]」の場合、A/B/C |
[!] | [!]内に指定した文字の中に含まれない1文字 | 「[!A-C]」の場合、D/F/Gなど |
4桁数値のチェック(Like演算子)
例)4桁の数値かどうか判別する処理
Sub check()
Dim number As String
number = Cells(1, 1).Value '今回はCells(1,1)に対象があるとする
If number Like "####" Then
Debug.Print ("4桁の数字です")
Else
Debug.Print ("4桁の数字ではありません")
End If
End Sub
「####」は数値4桁を表しているため、このような処理でできる。
VBAで正規表現を利用する(RegExp)
マクロVBAで正規表現を行う場合は、RegExpオブジェクトを使用する。
RegExpオブジェクトは、正規表現の機能を提供するオブジェクトとのこと。
今回は、事前バインディングで使用する。
VBE→ツール→参照設定→「Microsoft VBScript Regular Expressions 5.5」にチェックを入れる。
その後、「Dim 変数名 As New RegExp」と宣言することで使用できるようになる。
4桁数値のチェック(正規表現)
Sub sample()
Dim re As New RegExp '事前バインディング
With re
.Global = True '検索文字列全体について検索する(True)
.IgnoreCase = True '検索するときに大文字と小文字を区別しない(True)
.Pattern = "^\d{4}$" '4桁数値を判別するパターン 先頭と末尾を指定しないと4桁以上も対象となってしまう
If .test(Cells(1, 1)) Then
Debug.Print ("4桁の数値です")
Else
Debug.Print ("4桁の数値ではありません")
End If
End With
End Sub
まず、特定のオブジェクト型(New RegExp)として変数reを宣言。
Withステートメントを用いて、指定オブジェクト名の記述を省略。
今回は3つのRegExpオブジェクトプロパティを指定。
※よく考えたら、Patternプロパティだけでよさそう。とりあえずメモ用なので残しておく。
プロパティ | 説明 |
---|---|
Global | 検索文字列全体について検索する場合True、最初の一致を検索する場合False(既定値) |
IgnoreCase | 検索するときに大文字小文字を区別しない場合True、区別する場合False(既定値) |
Pattern | 検索するパターンの設定 |
このようなプロパティを用いることで、より複雑な検索ができる。
testメソッドは、引数に指定した対象からパターンに一致する場合Trueを返す。一致しない場合Falseを返す。そのためIfステートメントを用いて、各結果に対する文字列を出力している。
パターンに関しては、以下のものを使用。
シンボル | 機能 |
---|---|
^ | 文字列の先頭にのみマッチする |
$ | 文字列の末尾にのみマッチする |
\d | 任意の数字にマッチする。[0-9]と等価 |
{x} | 正規表現のx個の直前の文字にマッチ |
もし、パターンが「\d{4}」だった場合、先頭と末尾を指定していないため
「1234abc5」や「1abc2345」のように4桁の数値がまとまってあればマッチしてしまう。
そのため、「^\d$」と先頭と末尾を指定することで、前後どちらからでも4桁の数値(4桁の数値)となる。
事前バインディングと実行時バインディング(おまけ)
事前バインディングと実行時バインディングとは?
バインディングは、bind=関連付ける、結びつけるという意味。
オブジェクトがオブジェクト変数に代入されるとき、バインディングと呼ばれる処理を実行する。
ざっくりいうと、どちらも外部のActiceXオブジェクトを参照するものでそのタイミングが違う。
ActiveXオブジェクトとは?
ActiveXオブジェクトとは、オートメーションをサポートするアプリケーションがオートメーションインターフェースを通してほかのアプリケーションに公開しているオブジェクト
第138回.外部ライブラリ(ActiveXオブジェクト)
VBAでは、このライブラリのオブジェクトを参照することでアプリケーションを操作できる。
事前バインディング
特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前(コンパイル時)にバインディングされる。ただし、参照設定が必要。
・参照設定
VBEのツール→参照設定から参照したいファイルを指定する。
そうすることで、参照設定で直接オブジェクトを呼び出すことが出来る。
実行時バインディング
オブジェクトがObject型として宣言された変数に代入される場合、実行時にバインディングされる。