エクセルマクロオンライン講座 質問と回答

  • このエントリーをはてなブックマークに追加

無料・有料のオンライン講座で 寄せられたメッセージの一部を紹介致します。

[5723] エクセルマクロVBA「Web連携」DOM(Document Object Model)を使った解析_概要

伊久間博之さんからの投稿です。

こんにちは。いつもお世話になっております。

WinHttp Services 5.1を使ってとってきたDOMを使った解析についてわからないことがありますので質問させてください。
metaタグのコレクションが取得できません。


JR東日本から(http://www.jreast.co.jp/)から
metaタグを抜き出そうとして以下のコードを書きました。


Sub GetRequestSimple2()
Dim url As String
url = "http://www.jreast.co.jp/"

Dim xh As New WinHttp.WinHttpRequest
xh.Open "GET", url, False
xh.send

Dim sCode As String
sCode = xh.Status
If sCode <> 200 Then
MsgBox "リクエストに失敗しました" & vbNewLine & sCode
End If

'htmlをDOMとして取得する。そのための変数を宣言。
Dim oHTml As New MSHTML.HTMLDocument
oHTml.body.innerHTML = xh.ResponseText 'htmlボディーをDOMとして取得

Debug.Print xh.GetAllResponseHeaders
Debug.Print oHTml.body.innerHTML 'xh.ResponseText
Range("B1").Value = xh.GetAllResponseHeaders
Range("B2").Value = oHTml.body.innerHTML ' xh.ResponseText

Dim oM As MSHTML.HTMLHeadElement
For Each oM In oHTml.getElementsByTagName("meta")
Debug.Print oM.outerHTML
Debug.Print oM.innerHTML
Debug.Print oM.innerText
Next
End Sub



が、取得できません。
Range("B2").Value をみると<body>以下が出力されていますので
[code] oHTml.body.innerHTML = xh.ResponseText[\code]
の body を head にすればいいのではないかと予想して
[code] oHTml.head.innerHTML = xh.ResponseText[\code]
としてみましたが、実行時エラー600になってしまいます。

調べてみるとInternet Controlsによる取得方法はいくつかあり、その方法を試したところmetaタグを取得することができました。

しかし、WinHTTP Services 5.1による取得方法を見つけられず、質問させて頂きました。

どのようにすればmetaタグ、headないの要素を取得することができるのでしょうか?

[ 続きを読む]  返信件数:3件  [ 動画を見る] 

[5680] エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_GETリクエスト

古口梨絵さんからの投稿です。

お世話になっております。
今回、01_WinHttp_基本.xlsでMicrosoft WinHTTP Services 5.1を使ってGETリクエストをする、
ということでワクワクしながらF8(ステップイン)で進めていくと、
xh.send
で止まってしまいました。
実行時エラー'-2147012894(80072ee2)':処理がタイムアウトになりました
とのことです。

どのように対処すればこの先進められるのでしょうか。

[ 続きを読む]  返信件数:6件  [ 動画を見る] 

[4743] エクセルマクロVBA「Web連携」リクエストとレスポンスとは

受講生さんからの投稿です。

Get、Postリクエストの違いが初めて分かりました。

[ 続きを読む]  返信件数:1件  [ 動画を見る] 

[4652] エクセルマクロVBA「Web連携」Microsoft XMLとDOMの活用例

受講生さんからの投稿です。

小川さん

こんばんは。
YAHOOのトップページより「天気・災害トップ」の時間毎の天気・気温・湿度・降水量・風向・風速を
取得したいと考えております。
その途中で下記コード「「天気」の摘要・アドレスを抽出」の部分をうまく取得できない状況です。
どの部分に誤りがあるか教えていただけますか。
お手数をおかけしますが、よろしくお願いいたします。

 
Sub main()
'〇ライブラリの参照設定
'Microsoft XML, v3.0 かそれ以上のバージョン -> XML解析のため
'Microsoft HTML Object Library -> HTMLコンテンツの取得と、DOM解析のため

'YAHOO!_JAPAN_画面へアクセス。
Dim xh As New MSXML2.XMLHTTP
Dim pElem As MSHTML.HTMLParaElement
Dim hDoc As New MSHTML.HTMLDocument
Dim e As MSHTML.HTMLHtmlElement

xh.Open "GET", "http://www.yahoo.co.jp/" & "?time=" & Format(Now, "yymmddhhnnss")
xh.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xh.send

Do Until xh.readyState = 4
DoEvents
Debug.Print xh.readyState
Loop

If xh.Status <> 200 Then
MsgBox "リクエストに失敗しました" & vbNewLine & xh.Status & ":" & xh.StatusText
End If

'レスポンスヘッダーをすべて出力
'Debug.Print xh.GetAllResponseHeaders
'レスポンスボディーを解析
'Debug.Print xh.responseText 'htmlページをすべて出力してみよう
'(YAHOO!_JAPANトップページの)「天気」のアドレスを抽出
For Each pElem In hDoc.getElementsByClassName("cbysC13")
Debug.Print pElem.href
Next
'(YAHOO!_JAPANトップページの)「天気」をクリック。
'「176-0000」(東京都練馬区)を入力し、「検索」をクリック。
'「市町村名」をクリック。
'「時間」毎の天気・気温・湿度・降水量・風向・風速を抽出。

End Sub

[ 続きを読む]  返信件数:2件  [ 動画を見る] 

[4105] エクセルマクロVBA「Web連携」Microsoft XMLを活用したコンテンツ取得

受講生さんからの投稿です。

小川慶一 さん:

こんにちは。

動画でご説明いただいた通りに作業を行っていたのですが、
「コンパイルエラー」が発生してしてしまいました。
恐れ入りますが、今後の対処方法を教えてください。
お手数をおかけしますが、ご回答をよろしくお願いいたします。

1_私が実行した手順
(1)参照設定
 ツール>参照設定>「Microsofr XML v6.0」(Microsofr XMLの最大値)にチェック>OK
(2)コンパイルエラーの確認
 デバック>VBAProjectのコンパイル

2_エラーメッセージ
コンパイルエラー:ユーザ定義型は定義されておりません。

3_ご参考
IEのバージョンは「11.0.9600.17728」です。

[ 続きを読む]  返信件数:10件  [ 動画を見る] 

[4052] エクセルマクロVBA「Web連携」Microsoft Internet ControlsならではのWebコンテンツの取得

受講生さんからの投稿です。

こんばんは。
東京青果情報センターからCSVファイルを抜き出すマクロを書いてみました。
ダウンロードボタンを押すところまで出来たのですが、その先がわかりません。
ダウンロードのダイアログボックスをコントロールすることは可能でしょうか。


Option Explicit
'以下に紹介するライブラリの参照設定をしてください
'Microsoft Internet Controls -> IEを制御するため
Sub 野菜()
Dim objIE As New InternetExplorer, myrow As Long, i As Long
objIE.Visible = True

Dim url As String
url = "http://www.info-seikabutu.jp/junpou_geppouNEW1.html?time=" & Format(Now, "yymmddhhnnss")
'↑参考までに、SSLの場合もそのまま使えます。

'テストページを、IDで読み込みます
objIE.navigate url

'ページの表示完了待ち
Do While objIE.readyState <> 4 Or objIE.Busy = True
DoEvents
Loop
Dim oH
For Each oH In objIE.Document.getElementsBytagname("a")
If InStr(oH.innertext, "市場別入荷量と価格") > 0 Then
oH.Click
Exit For
End If

Next oH
objIE.Quit
End Sub






[ 続きを読む]  返信件数:12件  [ 動画を見る] 

[4009] エクセルマクロVBA「Web連携」HTMLコンテンツの取得と解析_概要

受講生さんからの投稿です。

小川 慶一さん

おはようございます。

下記2点を、もう少し深く教えてください。
・質問1_実務で使用する「取得に使うライブラリ」では「Microsoft Internet Controls」を
あまりお勧めしない理由(デメリット)
・質問2_実務で使用する「取得に使うライブラリ」では「Microsoft WinHTTP Services 5.1」を
お勧めする理由(メリット)


・上記質問1について
●質問内容
実務では「Microsoft Internet Controls」をあまりお勧めしない理由について、
もう少し深く教えていただけますか。

●質問理由
以前「実務で使用する「取得に使うライブラリ」で「Microsoft Internet Controls」を
あまりお勧めしないです。」という点を教えていただきました。。
過去の経験上、そのようなコメントをいただいたと考えておりますが、
現在の職場ではInternetExplorerしか使えない環境の為、「UserAgentの偽装不可」という点はあまり
デメリットにならないと考えております。
それ以外にデメリットとなる部分がある場合は教えていただきたいです。


・上記質問2について
●質問内容
実務で「Microsoft WinHTTP Services 5.1」をお勧めする理由について、
もう少し深く教えていただけますか。

●質問理由
以前「実務で使用する「取得に使うライブラリ」で「Microsoft WinHTTP Services 5.1」を
使用してみたらいかがですか。」というコメントをいただきました。
「全手動」の為、自由に操作できると思いますが、それ以外の部分でメリットがありましたら
教えていただきたいです。

恐れ入りますが、ご回答をよろしくお願いします。
言葉足らずな部分がありましたら、ご連絡ください。

[ 続きを読む]  返信件数:3件  [ 動画を見る] 

[3994] エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_GETリクエスト

受講生さんからの投稿です。

サイトによっては、xh.Response Textの時点で文字化けしていることがあります。これに対応するにはどうしたらいいのでしょう。

[ 続きを読む]  返信件数:3件  [ 動画を見る] 

[3940] エクセルマクロVBA「Web連携」DOM(Document Object Model)を使った解析_概要

受講生さんからの投稿です。

小川 慶一さん

こんばんは。

マクロで「リンク先」のURLを取得して、更にリンク先のページを開こうとしましたが、
下記エラーが表示されます。
恐れ入りますが、どの部分のコードに誤りがあるか教えていただけますか。
よろしくお願いします。

事象は下記の通りです。
●1回目にマクロ実行
事象:下記文言が表示され、マクロが停止します。
・実行時エラー「-2147023170」 「オートメーション エラーです。リモート プロシージャ コールに失敗しました」

●上記マクロを停止して再実行(2回目以降)
事象1:下記実行時エラーが表示され、マクロが停止します。
・実行時エラー「-2147467259」 「Register As Browser'メソッドは失敗しました ’IWebBrowser2'オブジェクト」
事象2:下記コードの「DoEvents」の部分で停滞します。


 
Sub test5()
Dim objIE As New InternetExplorer
objIE.Visible = True
Dim fms As Object
Dim url1 As String
Dim url2 As String
url1 = "http://www.yahoo.co.jp/?time=" & Format(Now, "yymmddhhnnss")
Debug.Print url1
objIE.navigate url1

'ページの表示完了待ち
Do While objIE.readyState <> 4 Or objIE.Busy = True
DoEvents
Loop

Set fms = objIE.Document
'「GetElementByID」は単数形。
url2 = fms.GetElementByid("nsearch").href & "?time=" & Format(Now, "yymmddhhnnss")
Debug.Print url2
objIE.navigate url2


'ページの表示完了待ち
Do While objIE.readyState <> 4 Or objIE.Busy = True
'ここで、止まったままになります。
DoEvents
Loop

Set objIE = Nothing
Set fms = Nothing
MsgBox "完了しました。"

End Sub

[ 続きを読む]  返信件数:10件  [ 動画を見る] 

[3777] エクセルマクロVBA「Web連携」Microsoft Internet Controls_Webコンテンツの取得

受講生さんからの投稿です。

小川先生

いつもお世話になっております。
下記部分でマクロ実行中にエラーになってしまいました。
私のできる範囲で調べてみましたが、わかりませんでしたので、
質問させていただきます。
言葉足らずな部分があるかと思いますが、その際はご連絡をお願いいたします。
ご回答をよろしくお願いいたします。


ファイル名 :「05_IE制御してコンテンツを取得」
標準モジュール :「m05030_post_collectionindex」
エラー内容 :「実行時エラー'70 書き込みできません。」
止まってしまった部分:下記コードの部分です。


objIE.Document.forms(0).elements(0).Value = "Web連携セミナー"



※補足情報
バージョン :excel2013
コード :コードは全く変更を加えておりません。
   ダウンロードしたファイルのコードをそのまま実行しただけです。

[ 続きを読む]  返信件数:14件  [ 動画を見る] 

[2841] エクセルマクロVBA「Web連携」セッションとポート

古川智之さんからの投稿です。

受付のおねえさん、裏方さん、整理券等の説明で、たまに目にしたり耳にしてした用語が、身近な具体例に置き換わりました!
めちゃくちゃわかりやすいです。毎日使うのに得体の知れなかったwebとの距離が、ぐっと近づいた感じです!

[ 続きを読む]  返信件数:1件  [ 動画を見る] 


各講座ごとのメッセージを見る場合はこちら

まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ