VBA IE操作 サイトを全選択してEXCELシートへコピーアンドペーストにチャレンジ
VBA IE操作の質問 が 来たので、
昔のサンプルを引っ張り出してテストしてみます。
>最悪、サイトを全選択してEXCELシートへコピーアンドペーストしてから、
>シートからの必要情報抽出を行い、整えたファイルを
>新規エクセルファイルとして出力するプログラムに変更しようとも
>考えてるのですが、
>こちらのやり方はVBAで実現可能ですか?
サイトを全選択してEXCELシートへコピーアンドペーストにチャレンジ
単純にコピーすると怒られそうだけど、
IEを起動 Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
ページを表示 objIE.navigate "URL文字列" '文字列でURLを渡す
全選択(CTRL+A) objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択
コピー(CTRL+C) objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
'Excelに貼り付け
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
そんな感じで単純に書いてみました。
http://ie.vba-ken3.jp/Methods/ExecWB/ を 参考にして
Sub ie_test_014() 'IE メニューのコマンドをテスト '全て選択とコピーをIE上で行ない、Excelの新規ブックに貼り付けてみた。 Dim strURL As String 'URL入力用 strURL = InputBox("URLを指定", "URL入力", "http://www.ken3.org/cgi-bin/test/test028-2.asp") Dim objIE As Object 'IEオブジェクト参照用 Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る objIE.Visible = True '見えるようにする(お約束) 'IE 画面サイズの調整(表示場所とサイズ) objIE.FullScreen = False '= Trueで最大化します。 objIE.Top = 200 '左上 Y 表示場所の指定 objIE.Left = 100 '左上 X objIE.Width = 800 '横の幅 objIE.Height = 600 '縦の高さ '指定したページを表示 objIE.navigate strURL '文字列でURLを渡す '表示完了を待つ .readyState と .Busy を見る While objIE.readyState <> 4 Or objIE.Busy = True 'IEがBusyの間 待つ DoEvents Wend DoEvents 'テスト用に新規のブックを追加する Workbooks.Add '新規ブックを追加 '形式を選択して貼り付け Unicode テキスト貼り付けのテスト objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択 objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー Sheets.Add 'テスト用のシートを新規追加する ActiveSheet.Name = "FormatUnicode テキスト" 'シートに名前を付ける Range("A1").Select ActiveSheet.PasteSpecial Format:="Unicode テキスト" '形式を選択して貼り付け テキスト貼り付けのテスト objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択 objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー Sheets.Add 'テスト用のシートを新規追加する ActiveSheet.Name = "Formatテキスト" 'シートに名前を付ける Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト" '形式を選択して貼り付け HTML貼り付けのテスト objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択 objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー Sheets.Add 'テスト用のシートを新規追加する ActiveSheet.Name = "FormatHTML" 'シートに名前を付ける Range("A1").Select ActiveSheet.PasteSpecial Format:="HTML" '終了処理 テストの時は、↓確認して、残しておくと便利ですよ。 If MsgBox("IEを閉じますか?", vbYesNo) = vbYes Then '終了確認 objIE.Quit '.Quitで閉じる End If '使用したオブジェクト変数もキレイにしてね。 Set objIE = Nothing End Sub
www.youtube.com
http://www.youtube.com/watch?v=_JrmoeKxfkM&fmt=18
↑テストで三種類貼り付けていますが、使うのは(使えるのは)
ActiveSheet.PasteSpecial Format:="HTML"
の貼り付けかなぁ?
下記、シートを追加してますが、
'形式を選択して貼り付け HTML貼り付けのテスト
objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択
objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
Sheets.Add 'テスト用のシートを新規追加する
ActiveSheet.Name = "FormatHTML" 'シートに名前を付ける
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
データの形がいつも同じ形なら A10とか指定して、10行目から貼るなど アレンジしてみてください。
'形式を選択して貼り付け HTML貼り付けのテスト
objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択
objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
'前のデータを消してからセットの方が、ほんとはキレイかなぁ?
Range("A10").Select '10行目にセット
ActiveSheet.PasteSpecial Format:="HTML"
↑みたいに、4行で指定位置に貼れると思います。
あとは、Excelの世界なので、お好きなように料理してみてください。
何かの参考となれば、幸いです。 三流プログラマー Ken3