人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBAについて質問です。

VBAで正規表現を行いたいのですがやり方がわからず困惑しております。

html情報を取得する所まではできるのですが、

取得後に、例えば以下のような関数みたいなことはできないでしょうか?

関数(Myhtml(取得したhtmlデータ),正規表現の条件,取得したデータの保存先)

また、情報を取得した後に、指定したエクセルのセルにデータを記入するという所も少しわからず困惑しております。

大変お手数をおかけしますが、わかるかたおりましたらご回答いただければと考えております。

よろしくお願いいたします。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:HTML VBA しわ エクセル セル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● van-dine
●50ポイント

正規表現を使うには次の設定が必要です。

  1. [Alt]+[F11]でVBAの編集画面を開く
  2. ツール(T)→参照設定(R)を選ぶ
  3. Microsoft VBScript Regular Expression 5.5にチェックを入れる

使い方としては、

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とか

のように使います。

詳しい用法は下のページをご覧ください。

http://msdn.microsoft.com/ja-jp/library/cc392484.aspx

◎質問者からの返答

ご回答ありがとうございます。

Set RE = New RegExp

のインスタンスを作成し、これから正規表現を始めます のような宣言みたいなのが必要ということですね^^。

設定したいと思います。←間違えていたらご指摘お願いします。


2 ● jccrh1
●100ポイント

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)
 でできると思います。
  但し、文字数が多い場合はエラーになることもあります。
◎質問者からの返答

ご回答ありがとうございます。


3 ● jccrh1
●100ポイント ベストアンサー

すみません、下のコメントを見ていませんでしたので、再度回答させて頂きます。

郵便番号、住所、氏名、連絡先を取得できるように修正してみました。

【メイン】
 郵便番号 = 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

のようにすればいいのでしょうか?

ここをきちんと定義出来れば、関数が起動して正規表現をしてくれるのではないかと考えているのですが。。。

初心者すぎて申し訳ありません。。。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ