VBAで正規表現を行いたいのですがやり方がわからず困惑しております。
html情報を取得する所まではできるのですが、
取得後に、例えば以下のような関数みたいなことはできないでしょうか?
関数(Myhtml(取得したhtmlデータ),正規表現の条件,取得したデータの保存先)
また、情報を取得した後に、指定したエクセルのセルにデータを記入するという所も少しわからず困惑しております。
大変お手数をおかけしますが、わかるかたおりましたらご回答いただければと考えております。
よろしくお願いいたします。
すみません、下のコメントを見ていませんでしたので、再度回答させて頂きます。
郵便番号、住所、氏名、連絡先を取得できるように修正してみました。
【メイン】 郵便番号 = HTML_抽出処理(str変換HTML, "★郵便番号:(.*?)<br>") 住所 = HTML_抽出処理(str変換HTML, "★住所:(.*?)<br>") 氏名 = HTML_抽出処理(str変換HTML, "★氏名:(.*?)<br>") 連絡先 = HTML_抽出処理(str変換HTML, "★連絡先:(.*?)<br>")
【関数】 Function HTML_抽出処理(strHTML As String, 正規条件 As String) Dim re As Object Dim mc As Object Set re = CreateObject("VBScript.RegExp") HTML_抽出処理 = "" re.Pattern = 正規条件 Set mc = re.Execute(strHTML) If mc.Count >= 1 Then HTML_抽出処理 = mc(0).SubMatches(0) End Function
正規表現を使うには次の設定が必要です。
使い方としては、
Set RE = New RegExp
でインスタンスを作成し、利用するというもの。
たとえば、
Dim url0 As RegExp url0.IgnoreCase = False '大文字・小文字の同一視 url0.Global = False '全部検索するか url0.Pattern = "\{0\}" 'パターン。正規表現的におかしかったので修正しました '中略 url = url1.Replace(BASE_URL, "page9") 'page9とかpage1とか
のように使います。
詳しい用法は下のページをご覧ください。
ご回答ありがとうございます。
Set RE = New RegExp
のインスタンスを作成し、これから正規表現を始めます のような宣言みたいなのが必要ということですね^^。
設定したいと思います。←間違えていたらご指摘お願いします。
html情報から何を取得したいのか分かりませんが、一応作成してみました。
【メイン】 Call HTML_抽出処理(str変換HTML, "<TR.*?>((.|\n)*?)</TR>", "D:\抽出データ.txt")
【サブ】 Sub HTML_抽出処理(strHTML As String, 正規条件 As String, 保存ファイル名 As String) Dim I As Long Dim re As Object Dim mc As Object Set re = CreateObject("VBScript.RegExp") re.MultiLine = True re.Global = True re.IgnoreCase = True re.Pattern = 正規条件 Set mc = re.Execute(strHTML) Open 保存ファイル名 For Output As #1 For I = 0 To mc.Count - 1 Print #1, mc(I) Next I Close #1 End Sub
追加事項 1.Print #1, mc(I).SubMatches(0) にすれば xxxxx が出力できます。 <TR~>xxxxx</TR>の時 2.セルへの設定 Print #1, mc(I)の所を Range("A2").Offset(I) = mc(I) でできると思います。 但し、文字数が多い場合はエラーになることもあります。
ご回答ありがとうございます。
すみません、下のコメントを見ていませんでしたので、再度回答させて頂きます。
郵便番号、住所、氏名、連絡先を取得できるように修正してみました。
【メイン】 郵便番号 = HTML_抽出処理(str変換HTML, "★郵便番号:(.*?)<br>") 住所 = HTML_抽出処理(str変換HTML, "★住所:(.*?)<br>") 氏名 = HTML_抽出処理(str変換HTML, "★氏名:(.*?)<br>") 連絡先 = HTML_抽出処理(str変換HTML, "★連絡先:(.*?)<br>")
【関数】 Function HTML_抽出処理(strHTML As String, 正規条件 As String) Dim re As Object Dim mc As Object Set re = CreateObject("VBScript.RegExp") HTML_抽出処理 = "" re.Pattern = 正規条件 Set mc = re.Execute(strHTML) If mc.Count >= 1 Then HTML_抽出処理 = mc(0).SubMatches(0) End Function
ご回答ありがとうございます。
標準モジュールに関数を設定させていただきました。
また、コードを
Sub Macro()
Const BASE_URL As String = "http://{0}.auctions.yahoo.co.jp/show/contact_detail?aID={1}&target={2}&no=3&.crumb={3}"
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
Range("A1").Select
Do Until ActiveCell.Value = ""
Dim url As String
url = Replace(BASE_URL, "{0}", "page9") 'page9とかpage1とか
url = Replace(url, "{1}", ActiveCell.Value)
url = Replace(url, "{2}", ActiveCell.Offset(0, 1).Value)
url = Replace(url, "{3}", ActiveCell.Offset(0, 2).Value)
ActiveCell.Offset(1, 0).Activate
objIE.Navigate2 url
While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
Sleep 200
Wend
Loop
Myhtml = objIE.Document.Body.innerHTML
Dim a As String
Set a = HTML_抽出処理(str変換HTML, "★郵便番号:(.*?)
")
Debug.Print a
End Sub
のようにして試してみたのですが、
定数が定義されていません。というエラーが表示されてしまいます。
str変換HTML を定義しないといけないみたいですが、定義とは
Dim str変換HTML as string
のようにすればいいのでしょうか?
ここをきちんと定義出来れば、関数が起動して正規表現をしてくれるのではないかと考えているのですが。。。
初心者すぎて申し訳ありません。。。
ご回答ありがとうございます。
標準モジュールに関数を設定させていただきました。
また、コードを
Sub Macro()
Const BASE_URL As String = "http://{0}.auctions.yahoo.co.jp/show/contact_detail?aID={1}&target={2}&no=3&.crumb={3}"
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
Range("A1").Select
Do Until ActiveCell.Value = ""
Dim url As String
url = Replace(BASE_URL, "{0}", "page9") 'page9とかpage1とか
url = Replace(url, "{1}", ActiveCell.Value)
url = Replace(url, "{2}", ActiveCell.Offset(0, 1).Value)
url = Replace(url, "{3}", ActiveCell.Offset(0, 2).Value)
ActiveCell.Offset(1, 0).Activate
objIE.Navigate2 url
While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
Sleep 200
Wend
Loop
Myhtml = objIE.Document.Body.innerHTML
Dim a As String
Set a = HTML_抽出処理(str変換HTML, "★郵便番号:(.*?)
")
Debug.Print a
End Sub
のようにして試してみたのですが、
定数が定義されていません。というエラーが表示されてしまいます。
str変換HTML を定義しないといけないみたいですが、定義とは
Dim str変換HTML as string
のようにすればいいのでしょうか?
ここをきちんと定義出来れば、関数が起動して正規表現をしてくれるのではないかと考えているのですが。。。
初心者すぎて申し訳ありません。。。