0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBA パターンマッチング メモ

Last updated at Posted at 2021-05-15

はじめに

学習メモです。間違えている可能性があります。

正規表現(のような)マッチング

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型として宣言された変数に代入される場合、実行時にバインディングされる。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?