IT仕事 MS Access

AccessとBASP21で正規表現を使ってメール文から必要事項を取り出すサンプル

投稿日:2017年4月13日 更新日:

Accessで正規表現を使いたかったのですが、ネット上にはサンプルが少なく、苦労したので、とりあえずツギハギで作った私のコードを披露したいと思います。

Accessで正規表現を使うには、BASP21を使う方法と、RegExpを使う方法がありますが、自分の場合、メール送信にBASP21を使わせていただいているので、まずは、こんな感じでBASP21の正規表現を使えないか、テストしてみました。

[code]
Public Sub test99()
Set bobj = CreateObject("basp21")
out = bobj.MatchEx("/あい./k", "あいうえお", 0)
Debug.Print out(2)
End Sub
[/code]

・・・何度やっても取り出せるのは、「あいうえお」の「えお」になり、「う」がどこかに消える。
マニュアルを読んで、Kオプションをつけているのにダメ。
英語だけだとうまくいった。うむむ。

そこで、BASP21を諦め、Accessの参照設定でMS VBScript Regular Expressionsにチェックして、RegExpを使うことにした。

そうして書いてみたコードが下になる。
メールの読み込みにはBASP21を使わせてもらうけども、文字列解析と取り出しにはRegExpを使う。

[code]
Public Sub testReceiv()

Dim bobj, ar
Dim Server As String, User As String, Pass As String, Command As String
Set bobj = CreateObject("basp21") ”BASP21オブジェクト
Server = "xxxx.com" ”POP3サーバー
User = "xxxx" ”アカウント名
Pass = "xxxxx" ”パスワード
Command = "SAVEALL" ”コマンド

bobj.CodePage = 65001 ‘ WebArenaサーバではこれをつけないと文字化けして読めなかった。CPIサーバは不要だった。
ar = bobj.RcvMail(Server, User, Pass, Command, ">c:\temp")
If IsArray(ar) Then
Para = "from:subject:"
For Each Mail In ar
retv = bobj.ReadMail(Mail, Para, Folder)
If Not IsArray(retv) Then
MsgBox "メールの受信に失敗しました"
Else
Debug.Print (0) ”From
Debug.Print retv(1) ”Subject
‘ Debug.Print retv(2) ”Body

‘ BASP21の正規表現ではうまくいかなかった部分
‘ out = bobj.MatchEx("m/HP/k", retv(2), 0)
‘ Debug.Print "* " & out(2)

‘ AccessのRegExpで文字列解析
Set re = CreateObject("VBScript.RegExp")
sPtn1 = "(ご注文番号 : )(.*)"
With re
.Pattern = sPtn1
.Multiline = False ‘一行のみ
.Global = True
Set mc = .Execute(retv(2))
Debug.Print mc.Count ‘カウント
‘ Debug.Print mc(0)
Debug.Print mc(0).SubMatches(0) ‘検索文字
Debug.Print mc(0).SubMatches(1) ‘検索文字の後ろから右端までの文字
End With
End If
Next Mail
Else
MsgBox "新着メールはありません"
End If
Set bobj = Nothing
End Sub
[/code]

「ご注文番号 : 」のところはわかりにくいと思いますが、やりたかったことは、メール文中の「ご注文番号 : 115383」から「115383」だけを取り出そうと思ったら、こうなる。

うまくいって、満足だ。

さて、1.メールの読み出し、2.メール分から必要事項の取り出し、ときて次は、3.テーブルに書き込み、としたいんだけど、それはまた後日に。
読み出し時に、メールを新着分に限定したり、特定のタイトルで絞ったり、返信を除外したり、する必要があるな。
テーブルへの書き込み時に、同一注文番号があれば除外するか上書きするか(注文訂正があった場合など)、選択できるようにしたほうが良いかな。
(などと、面倒そうなので)

-IT仕事, MS Access

執筆者:

関連記事

no image

ExcelブックをAccessで読みたいときにリンクテーブルを使わない方法があったとは・・・知らなかった

とある業務で、Access内でExcelブックをリンクテーブルで読む・・・という使い方をしてきた。 (AccessのmdbはNASにおいて共有している。Excelのxlsも同じく) これはこれで便利な …

Jazzy Formsで見積を計算してもらいその結果をメールで送る方法

やりたいことは、 「Webサイトの見積フォームを設置し、それを使ってお客さんに見積をしてもらい、その見積結果を管理者宛に送信する」 ・・・というもの。 WordPressのプラグインで、「Jazzy …

no image

AutoHotkeyでNumLockキーをBackSpaceに入れ替え

会社で使っている、HP ProBook470のキーボードが使いにくい。 BackSpaceが小さく、隣のNumLockを間違えて押してしまう。 以下のリンクを参考に、AutoHotkeyというソフトで …

no image

VBAで英字混じりの引数から数字のみを取り出す関数

たとえば、abcABC123456XYGという引数から、123456のみを取り出したい。 VBAの組み込み関数で、適当なのがありそうだけど、無いみたい。 カスタム関数を作るにも、これはという情報がググ …

no image

Artisteer4は、ダメダメ

Artisteerを使っている。 この秋9月からバージョン4になり、CSS3に対応した。 デフォルトデザインが白のシンプルなデザインになり、またスライドを挿入できるなど、機能もアップした。 そこで、今 …