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

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

この動画では、Microsoft Internet Controlsを使ったときならではの、Webのコンテンツを取得する方法について解説しています。Microsoft Inrernet Controlsを使う場合のメリット、デメリットを説明しています。実務では、Microsoft WinHTTP Services 5.1、Microsoft XMLと使いわけることになるでしょう。

この教材についての過去の質問・感想

11342 : 小川慶一の回答 (2019-04-12 14:57:01)

ざきさんさん:

ご指摘ありがとうございます。
あれあれ、そんな感じですね...。修正しておきます。


> 質問というか、動画をみていておかしな点があったので、指摘します。
> 動画24と動画23の内容が逆のような気がします。


11337 : ざきさんさんのコメント (2019-04-12 00:19:21)

質問というか、動画をみていておかしな点があったので、指摘します。
動画24と動画23の内容が逆のような気がします。


10188 : 小川慶一の回答 (2018-07-01 10:52:20)

田中 宏明さん:

情報共有ありがとうございます。
今後ともよろしくお願いいたします☆


> IEを使わないという選択がベターだとは思いますが、ついIEを使ってしまう私のIE表示待ち時間処理をご紹介させていただきます。
> (講座範疇外のため添削不要です。)
>
>

Public Sub Myloop(ByRef ie As Object)
>     'IE表示完了の待ち合わせ 2018/6/30
>     Dim IEretry   As Boolean: IEretry = False
>     Dim RepeatSec As Single:  RepeatSec = Timer
> 
> On Error GoTo INVALID
> 
>     Do While ie.Busy = True Or ie.readyState < 4 'READYSTATE_COMPLETE
>         DoEvents
> '        Sleep 200  '200ms停止
> 
>         If (Timer - RepeatSec) > 80 Then
>             Debug.Print ie.readyState
>             MsgBox "サーバーが応答していません。インターネット接続をご確認後、再度実行してください。"
>             ie.Quit
>             End
>         ElseIf (Timer - RepeatSec) > 40 And IEretry = False Then
>             'IEの再読み込みは1回限りとする
>             IEretry = True
>             ie.Refresh
>         End If
>     Loop
> 
>     Do While ie.document.readyState <> "complete"
>         DoEvents
> '        Sleep 200  '200ms停止
>         
>         If (Timer - RepeatSec) > 100 Then
>             Debug.Print ie.document.readyState
>             ie.Quit
>             MsgBox "ドキュメントを取得できません。インターネット接続をご確認後、再度実行してください。"
>             End
>         End If
>     Loop
> 
>     '念のため確認
>     DoEvents
>     If ie.Busy = True Or ie.readyState < 4 Then
>         Call Myloop(ie)  '再帰呼出
>     End If
>     
>     Exit Sub
> 
> INVALID:
> 
>     Debug.Print "エラー番号:" & Err.Number & vbNewLine & "エラーの種類:" & Err.Description
>     '実行時エラー「書き込みできません。」(70)は想定内なので無視。
>     'それ以外はエラーを発生させる。
>     If Err.Number <> 70 Then
>         Err.Raise Err.Number
>     Else
>         On Error GoTo 0
>         MsgBox "IE読み込み時にエラー発生。処理を継続します。"
>     End If
> 
> End Sub 


10181 : 田中 宏明さんのコメント (2018-06-30 12:26:08)

IEを使わないという選択がベターだとは思いますが、ついIEを使ってしまう私のIE表示待ち時間処理をご紹介させていただきます。
(講座範疇外のため添削不要です。)

Public Sub Myloop(ByRef ie As Object)
    'IE表示完了の待ち合わせ 2018/6/30
    Dim IEretry   As Boolean: IEretry = False
    Dim RepeatSec As Single:  RepeatSec = Timer

On Error GoTo INVALID

    Do While ie.Busy = True Or ie.readyState < 4 'READYSTATE_COMPLETE
        DoEvents
'        Sleep 200  '200ms停止

        If (Timer - RepeatSec) > 80 Then
            Debug.Print ie.readyState
            MsgBox "サーバーが応答していません。インターネット接続をご確認後、再度実行してください。"
            ie.Quit
            End
        ElseIf (Timer - RepeatSec) > 40 And IEretry = False Then
            'IEの再読み込みは1回限りとする
            IEretry = True
            ie.Refresh
        End If
    Loop

    Do While ie.document.readyState <> "complete"
        DoEvents
'        Sleep 200  '200ms停止
        
        If (Timer - RepeatSec) > 100 Then
            Debug.Print ie.document.readyState
            ie.Quit
            MsgBox "ドキュメントを取得できません。インターネット接続をご確認後、再度実行してください。"
            End
        End If
    Loop

    '念のため確認
    DoEvents
    If ie.Busy = True Or ie.readyState < 4 Then
        Call Myloop(ie)  '再帰呼出
    End If
    
    Exit Sub

INVALID:

    Debug.Print "エラー番号:" & Err.Number & vbNewLine & "エラーの種類:" & Err.Description
    '実行時エラー「書き込みできません。」(70)は想定内なので無視。
    'それ以外はエラーを発生させる。
    If Err.Number <> 70 Then
        Err.Raise Err.Number
    Else
        On Error GoTo 0
        MsgBox "IE読み込み時にエラー発生。処理を継続します。"
    End If

End Sub 


4118 : 小川慶一の回答 (2015-04-20 07:21:33)

匿名 さん:

なるほど。そんなに間が空いたんですね。
翌日だとセッション切れしているんじゃないですかね。
本家のサイトにブラウザーで接続しても、そんなに間が空くと設定はリセットされているものと思います。何故か?セッションの有効期限が終っているからです。
そこで、セッションをサーバが再発行したということかと。



>小川慶一 さん:
>解説動画視聴させて頂きました。ありがとうございます。
>動画のようにCookiesの値を見てみましたが、PHPSESSIDは確かに見当たりません。
>もう少し調べてみます。
>
>質問に到った経緯は以下です。
>wireSharkでPOSTデータ解析
>↓
>POSTデータを文字列で作成
>sp = "stationNumList=[""s47662""]&aggrgPeriod=1&elementNumList=[[""202"",""""],[""203"",""""],[""201"",""""],[""701"",""""],[""702"",""""]]&interAnnualFlag=1&ymdList=" & ymd & "&optionNumList=[]&downloadFlag=true&rmkFlag=1&disconnectFlag=1&youbiFlag=0&kijiFlag=0&huukouFlag=0&csvFlag=1&jikantaiFlag=0&jikantaiList=[]&ymdLiteral=1&PHPSESSID=muipn3bj77vmvncn2eu0ebpp40"
>↓
>マクロ実行。無事CSVデータをセルに格納。
>↓
>翌日にマクロ実行。CSVデータを取得できず。
>↓
>再度wireSharkでPOSTデータ解析。PHPSESSIDの値が変化している。
>↓
>再度POSTデータを文字列で作成。(PHPSESSIDのみ変更)
>↓
>マクロ実行。上手くいく。
>↓
>PHPSESSIDの毎回の変化に対応できないか試行錯誤するも上手くいかず。
>↓
>小川先生に質問をしてみる。
>
>>匿名 さん:
>>
>>そもそも、 PHPSESSID を送信できないと、どういう点で困るんでしたっけ。
>>
>>以下のURLを起点としてCSVファイルDLまで僕のブラウザでやってみましたが、その間、CookieにPHPSESSIDの値が書き込まれた形跡がありません。
>>http://www.data.jma.go.jp/risk/obsdl/index.php
>>
>>てことは、目的のCSVファイルがあるとして、それを取得できないとしても、 PHPSESSID の値あるなしの問題では無いのでは?という気も。。
>>
>>以下に新動画を置きました。これと同じように操作していって、どこの画面でどういう操作をすると PHPSESSID の値が設定されるのか、トレースしていただけますか。
>>https://www.youtube.com/watch?v=4NeFjqkLltc
>>
>>まずは以上のとおりです。
>>
>>
>>
>>
>>
>>>小川慶一 さん:
>>>wiresharkのPOSTデータのみ解析していたのですが、その他の項目も調べてみます。
>>>無効になった後のレスポンスは以下です。
>>>
>>>ヘッダー
>>>Cache-Control: max-age=600
>>>Date: Sat, 18 Apr 2015 11:59:21 GMT
>>>Content-Length: 5316
>>>Content-Type: text/html; charset=utf-8
>>>Server: Apache
>>>MS-Author-Via: DAV
>>>X-Content-Type-Options: nosniff
>>>X-Powered-By: PHP/5.3.3
>>>
>>>ボディ
>>><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
>>><html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="ja" lang="ja">
>>> <head>
>>> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>>> <title>気象庁|過去の気象データ・ダウンロード</title>
>>> <meta name="Author" content="気象庁 Japan Meteorological Agency" />
>>> <meta name="keywords" content="気象庁 Japan Meteorological Agency" />
>>> <meta name="description" content="気象庁が提供するページです" />
>>> <meta http-equiv="Content-Style-Type" content="text/css" />
>>> <meta http-equiv="Content-Script-Type" content="text/javascript" />
>>> <link rel="stylesheet" type="text/css" href="/com/css/define.css" media="all" />
>>> <style type="text/css" media="all"><!-- @import url(/com/default.css); --></style>
>>> <script type="text/javascript">
>>> /*@cc_on _d=document;
>>> eval('var document=_d');
>>> @*/
>>> </script>
>>> <style>
>>> <!--
>>> .tblnarabi td{
>>> padding:0;
>>> white-space:nowrap;
>>> }
>>> -->
>>> </style>
>>> <link href="http://www.data.jma.go.jp/risk/obsdl/web/css/top.2.0.min.css"; rel="stylesheet" type="text/css" /> </head>
>>> <body>
>>> <div id="main-area">
>>> <div id="header_area">
>>> <div id="nheader">
>>> <div id="logo"><a href="http://www.jma.go.jp/jma/index.html"><img src="http://www.jma.go.jp/jma/com/images/logo.gif" alt="気象庁" width="120" height="67" /></a></div>
>>>
>>> <div id="header_right">
>>> <div id="header_link">
>>> <ul>
>>> <li id="toMain"><a href="#main">本文へ</a></li>
>>> <li xml:lang="en" lang="en"><a href="http://www.jma.go.jp/jma/indexe.html">ENGLISH</a></li>
>>> <li><a href="http://www.jma.go.jp/jma/kishou/info/goiken.html">ご意見・ご感想</a></li>
>>> <li id="siteMap"><a href="http://www.jma.go.jp/jma/kishou/sitemap.html">サイトマップ</a></li>
>>> </ul>
>>> </div>
>>> <!-- search -->
>>> <div id="yjsearch" class="watermark">
>>> <p>キーワードを入力し検索ボタンを押下ください。</p>
>>> <form action="http://www.jma.go.jp/jma/menu/search.html"; method="get" id="srch">
>>> <input type="search" results="5" name="p" id="srchInput" />
>>> <input type="image" src="http://www.jma.go.jp/jma/com/images/btn_search.gif"; alt="検索" id="srchBtn" onclick="document.getElementById('srchInput').focus();" />
>>> <input type="hidden" id="fr" name="fr" value="cse" />
>>> <input type="hidden" id="ei" name="ei" value="utf-8" />
>>> <input type="hidden" id="csid" name="csid" value="pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h" />
>>> <input type="hidden" name="vs" value="www.jma.go.jp" id="yjInsite" />
>>> </form>
>>> <img src="http://custom.search.yahoo.co.jp/images/window/pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h.gif"; alt="" /> </div>
>>> <script type="text/javascript">
>>> (function() {
>>> var sb = document.getElementById('yjsearch');
>>> if (sb && sb.className == 'watermark') {
>>> var si = document.getElementById('srchInput');
>>> var f = function() { si.className = 'nomark'; };
>>> var b = function() {
>>> if (si.value == '') {
>>> si.className = '';
>>> }
>>> };
>>> si.onfocus = f;
>>> si.onblur = b;
>>> if (!/[&?]p=[^&]/.test(location.search)) {
>>> b();
>>> } else {
>>> f();
>>> }
>>> }
>>> })();
>>> </script>
>>> <!-- search -->
>>> </div>
>>> <ul id="gnavi">
>>> <li><a href="http://www.jma.go.jp/">ホーム</a></li>
>>> <li><a href="http://www.jma.go.jp/jma/menu/menuflash.html">防災情報</a></li>
>>> <li><a href="http://www.jma.go.jp/jma/menu/menureport.html" class="on">各種データ・資料</a></li>
>>> <li><a href="http://www.jma.go.jp/jma/menu/menuknowledge.html">知識・解説</a></li>
>>> <li><a href="http://www.jma.go.jp/jma/menu/menuabout.html">気象庁について</a></li>
>>> <li><a href="http://www.jma.go.jp/jma/menu/menulinks.html">案内・申請</a></li>
>>> </ul>
>>> </div>
>>></div>
>>><!--header end --> <div id="contents_area2">
>>> <div id="ncontents2">
>>> <!-- pankuzu menu -->
>>> <div class="clearfix">
>>> <ul class="breadcrumb2">
>>> <li><a href="http://www.jma.go.jp/">ホーム</a> > </li>
>>> <li><a href="http://www.jma.go.jp/jma/menu/menureport.html">各種データ・資料</a> > </li>
>>> <li>過去の気象データ・ダウンロード</li>
>>> </ul>
>>> </div>
>>><script type="text/javascript">
>>><!--
>>>function TigilError() {
>>> return true;
>>>}
>>>window.onerror = TigilError;
>>>window.localStorage.setItem('errFlag', "1");
>>>-->
>>></script>
>>><ul class="pagelink">
>>> <li><a href="http://www.data.jma.go.jp/risk/obsdl/index.php">メニューページに戻る</a></li>
>>></ul>
>>><p>ブラウザの戻るボタンで戻り、もう一度やり直してください</p>
>>> </div> </div>
>>> <div id="footer_area">
>>> <div id="nfooter">
>>> <p>気象庁:〒100-8122東京都千代田区大手町1-3-4 代表電話:03-3212-8341</p>
>>> <ul>
>>> <li><a href="http://www.jma.go.jp/jma/kishou/info/coment.html">気象庁ホームページについて</a></li>
>>> </ul>
>>> </div>
>>></div> </div>
>>> </body>
>>></html>
>>>
>>>
>>>>匿名 さん:
>>>>
>>>>というか、すでにお送りしていますね。
>>>>wiresharkを使った解析の動画です。あれを見て、まずは、PHPSESSIDを取得できるリクエストを見つけることからかと思います。
>>>>あと、PHPSESSIDが無効になったあとそのPHPSESSIDを送ったらどういうレスポンスが返って来ているのか?そこをもっと知りたいです。
>>>>
>>>>
>>>>
>>>>>小川慶一 さん:
>>>>>レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
>>>>>何かアプローチに問題がありそうでしょうか?
>>>>>
>>>>>Cache-Control: max-age=600
>>>>>Date: Thu, 16 Apr 2015 11:14:29 GMT
>>>>>Pragma: no-cache
>>>>>Content-Length: 910
>>>>>Content-Type: "text/x-comma-separated-values"
>>>>>Expires: 0
>>>>>Server: Apache
>>>>>Content-Disposition: attachment; filename="data.csv"
>>>>>Content-Transfer-Encoding: binary
>>>>>MS-Author-Via: DAV
>>>>>X-Content-Type-Options: nosniff
>>>>>X-Powered-By: PHP/5.3.3
>>>>>
>>>>>>匿名 さん:
>>>>>>
>>>>>>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>>>>>>それで実装してみてください。
>>>>>>
>>>>>
>>>>
>>>
>>
>


4112 : 受講生さんのコメント (2015-04-19 10:18:34)

小川慶一 さん:
解説動画視聴させて頂きました。ありがとうございます。
動画のようにCookiesの値を見てみましたが、PHPSESSIDは確かに見当たりません。
もう少し調べてみます。

質問に到った経緯は以下です。
wireSharkでPOSTデータ解析

POSTデータを文字列で作成
sp = "stationNumList=[""s47662""]&aggrgPeriod=1&elementNumList=[[""202"",""""],[""203"",""""],[""201"",""""],[""701"",""""],[""702"",""""]]&interAnnualFlag=1&ymdList=" & ymd & "&optionNumList=[]&downloadFlag=true&rmkFlag=1&disconnectFlag=1&youbiFlag=0&kijiFlag=0&huukouFlag=0&csvFlag=1&jikantaiFlag=0&jikantaiList=[]&ymdLiteral=1&PHPSESSID=muipn3bj77vmvncn2eu0ebpp40"

マクロ実行。無事CSVデータをセルに格納。

翌日にマクロ実行。CSVデータを取得できず。

再度wireSharkでPOSTデータ解析。PHPSESSIDの値が変化している。

再度POSTデータを文字列で作成。(PHPSESSIDのみ変更)

マクロ実行。上手くいく。

PHPSESSIDの毎回の変化に対応できないか試行錯誤するも上手くいかず。

小川先生に質問をしてみる。

>匿名 さん:
>
>そもそも、 PHPSESSID を送信できないと、どういう点で困るんでしたっけ。
>
>以下のURLを起点としてCSVファイルDLまで僕のブラウザでやってみましたが、その間、CookieにPHPSESSIDの値が書き込まれた形跡がありません。
>http://www.data.jma.go.jp/risk/obsdl/index.php
>
>てことは、目的のCSVファイルがあるとして、それを取得できないとしても、 PHPSESSID の値あるなしの問題では無いのでは?という気も。。
>
>以下に新動画を置きました。これと同じように操作していって、どこの画面でどういう操作をすると PHPSESSID の値が設定されるのか、トレースしていただけますか。
>https://www.youtube.com/watch?v=4NeFjqkLltc
>
>まずは以上のとおりです。
>
>
>
>
>
>>小川慶一 さん:
>>wiresharkのPOSTデータのみ解析していたのですが、その他の項目も調べてみます。
>>無効になった後のレスポンスは以下です。
>>
>>ヘッダー
>>Cache-Control: max-age=600
>>Date: Sat, 18 Apr 2015 11:59:21 GMT
>>Content-Length: 5316
>>Content-Type: text/html; charset=utf-8
>>Server: Apache
>>MS-Author-Via: DAV
>>X-Content-Type-Options: nosniff
>>X-Powered-By: PHP/5.3.3
>>
>>ボディ
>><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
>><html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="ja" lang="ja">
>> <head>
>> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>> <title>気象庁|過去の気象データ・ダウンロード</title>
>> <meta name="Author" content="気象庁 Japan Meteorological Agency" />
>> <meta name="keywords" content="気象庁 Japan Meteorological Agency" />
>> <meta name="description" content="気象庁が提供するページです" />
>> <meta http-equiv="Content-Style-Type" content="text/css" />
>> <meta http-equiv="Content-Script-Type" content="text/javascript" />
>> <link rel="stylesheet" type="text/css" href="/com/css/define.css" media="all" />
>> <style type="text/css" media="all"><!-- @import url(/com/default.css); --></style>
>> <script type="text/javascript">
>> /*@cc_on _d=document;
>> eval('var document=_d');
>> @*/
>> </script>
>> <style>
>> <!--
>> .tblnarabi td{
>> padding:0;
>> white-space:nowrap;
>> }
>> -->
>> </style>
>> <link href="http://www.data.jma.go.jp/risk/obsdl/web/css/top.2.0.min.css"; rel="stylesheet" type="text/css" /> </head>
>> <body>
>> <div id="main-area">
>> <div id="header_area">
>> <div id="nheader">
>> <div id="logo"><a href="http://www.jma.go.jp/jma/index.html"><img src="http://www.jma.go.jp/jma/com/images/logo.gif" alt="気象庁" width="120" height="67" /></a></div>
>>
>> <div id="header_right">
>> <div id="header_link">
>> <ul>
>> <li id="toMain"><a href="#main">本文へ</a></li>
>> <li xml:lang="en" lang="en"><a href="http://www.jma.go.jp/jma/indexe.html">ENGLISH</a></li>
>> <li><a href="http://www.jma.go.jp/jma/kishou/info/goiken.html">ご意見・ご感想</a></li>
>> <li id="siteMap"><a href="http://www.jma.go.jp/jma/kishou/sitemap.html">サイトマップ</a></li>
>> </ul>
>> </div>
>> <!-- search -->
>> <div id="yjsearch" class="watermark">
>> <p>キーワードを入力し検索ボタンを押下ください。</p>
>> <form action="http://www.jma.go.jp/jma/menu/search.html"; method="get" id="srch">
>> <input type="search" results="5" name="p" id="srchInput" />
>> <input type="image" src="http://www.jma.go.jp/jma/com/images/btn_search.gif"; alt="検索" id="srchBtn" onclick="document.getElementById('srchInput').focus();" />
>> <input type="hidden" id="fr" name="fr" value="cse" />
>> <input type="hidden" id="ei" name="ei" value="utf-8" />
>> <input type="hidden" id="csid" name="csid" value="pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h" />
>> <input type="hidden" name="vs" value="www.jma.go.jp" id="yjInsite" />
>> </form>
>> <img src="http://custom.search.yahoo.co.jp/images/window/pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h.gif"; alt="" /> </div>
>> <script type="text/javascript">
>> (function() {
>> var sb = document.getElementById('yjsearch');
>> if (sb && sb.className == 'watermark') {
>> var si = document.getElementById('srchInput');
>> var f = function() { si.className = 'nomark'; };
>> var b = function() {
>> if (si.value == '') {
>> si.className = '';
>> }
>> };
>> si.onfocus = f;
>> si.onblur = b;
>> if (!/[&?]p=[^&]/.test(location.search)) {
>> b();
>> } else {
>> f();
>> }
>> }
>> })();
>> </script>
>> <!-- search -->
>> </div>
>> <ul id="gnavi">
>> <li><a href="http://www.jma.go.jp/">ホーム</a></li>
>> <li><a href="http://www.jma.go.jp/jma/menu/menuflash.html">防災情報</a></li>
>> <li><a href="http://www.jma.go.jp/jma/menu/menureport.html" class="on">各種データ・資料</a></li>
>> <li><a href="http://www.jma.go.jp/jma/menu/menuknowledge.html">知識・解説</a></li>
>> <li><a href="http://www.jma.go.jp/jma/menu/menuabout.html">気象庁について</a></li>
>> <li><a href="http://www.jma.go.jp/jma/menu/menulinks.html">案内・申請</a></li>
>> </ul>
>> </div>
>></div>
>><!--header end --> <div id="contents_area2">
>> <div id="ncontents2">
>> <!-- pankuzu menu -->
>> <div class="clearfix">
>> <ul class="breadcrumb2">
>> <li><a href="http://www.jma.go.jp/">ホーム</a> > </li>
>> <li><a href="http://www.jma.go.jp/jma/menu/menureport.html">各種データ・資料</a> > </li>
>> <li>過去の気象データ・ダウンロード</li>
>> </ul>
>> </div>
>><script type="text/javascript">
>><!--
>>function TigilError() {
>> return true;
>>}
>>window.onerror = TigilError;
>>window.localStorage.setItem('errFlag', "1");
>>-->
>></script>
>><ul class="pagelink">
>> <li><a href="http://www.data.jma.go.jp/risk/obsdl/index.php">メニューページに戻る</a></li>
>></ul>
>><p>ブラウザの戻るボタンで戻り、もう一度やり直してください</p>
>> </div> </div>
>> <div id="footer_area">
>> <div id="nfooter">
>> <p>気象庁:〒100-8122東京都千代田区大手町1-3-4 代表電話:03-3212-8341</p>
>> <ul>
>> <li><a href="http://www.jma.go.jp/jma/kishou/info/coment.html">気象庁ホームページについて</a></li>
>> </ul>
>> </div>
>></div> </div>
>> </body>
>></html>
>>
>>
>>>匿名 さん:
>>>
>>>というか、すでにお送りしていますね。
>>>wiresharkを使った解析の動画です。あれを見て、まずは、PHPSESSIDを取得できるリクエストを見つけることからかと思います。
>>>あと、PHPSESSIDが無効になったあとそのPHPSESSIDを送ったらどういうレスポンスが返って来ているのか?そこをもっと知りたいです。
>>>
>>>
>>>
>>>>小川慶一 さん:
>>>>レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
>>>>何かアプローチに問題がありそうでしょうか?
>>>>
>>>>Cache-Control: max-age=600
>>>>Date: Thu, 16 Apr 2015 11:14:29 GMT
>>>>Pragma: no-cache
>>>>Content-Length: 910
>>>>Content-Type: "text/x-comma-separated-values"
>>>>Expires: 0
>>>>Server: Apache
>>>>Content-Disposition: attachment; filename="data.csv"
>>>>Content-Transfer-Encoding: binary
>>>>MS-Author-Via: DAV
>>>>X-Content-Type-Options: nosniff
>>>>X-Powered-By: PHP/5.3.3
>>>>
>>>>>匿名 さん:
>>>>>
>>>>>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>>>>>それで実装してみてください。
>>>>>
>>>>
>>>
>>
>


4111 : 小川慶一の回答 (2015-04-19 07:41:16)

匿名 さん:

そもそも、 PHPSESSID を送信できないと、どういう点で困るんでしたっけ。

以下のURLを起点としてCSVファイルDLまで僕のブラウザでやってみましたが、その間、CookieにPHPSESSIDの値が書き込まれた形跡がありません。
http://www.data.jma.go.jp/risk/obsdl/index.php

てことは、目的のCSVファイルがあるとして、それを取得できないとしても、 PHPSESSID の値あるなしの問題では無いのでは?という気も。。

以下に新動画を置きました。これと同じように操作していって、どこの画面でどういう操作をすると PHPSESSID の値が設定されるのか、トレースしていただけますか。
https://www.youtube.com/watch?v=4NeFjqkLltc

まずは以上のとおりです。





>小川慶一 さん:
>wiresharkのPOSTデータのみ解析していたのですが、その他の項目も調べてみます。
>無効になった後のレスポンスは以下です。
>
>ヘッダー
>Cache-Control: max-age=600
>Date: Sat, 18 Apr 2015 11:59:21 GMT
>Content-Length: 5316
>Content-Type: text/html; charset=utf-8
>Server: Apache
>MS-Author-Via: DAV
>X-Content-Type-Options: nosniff
>X-Powered-By: PHP/5.3.3
>
>ボディ
><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
><html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="ja" lang="ja">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <title>気象庁|過去の気象データ・ダウンロード</title>
> <meta name="Author" content="気象庁 Japan Meteorological Agency" />
> <meta name="keywords" content="気象庁 Japan Meteorological Agency" />
> <meta name="description" content="気象庁が提供するページです" />
> <meta http-equiv="Content-Style-Type" content="text/css" />
> <meta http-equiv="Content-Script-Type" content="text/javascript" />
> <link rel="stylesheet" type="text/css" href="/com/css/define.css" media="all" />
> <style type="text/css" media="all"><!-- @import url(/com/default.css); --></style>
> <script type="text/javascript">
> /*@cc_on _d=document;
> eval('var document=_d');
> @*/
> </script>
> <style>
> <!--
> .tblnarabi td{
> padding:0;
> white-space:nowrap;
> }
> -->
> </style>
> <link href="http://www.data.jma.go.jp/risk/obsdl/web/css/top.2.0.min.css"; rel="stylesheet" type="text/css" /> </head>
> <body>
> <div id="main-area">
> <div id="header_area">
> <div id="nheader">
> <div id="logo"><a href="http://www.jma.go.jp/jma/index.html"><img src="http://www.jma.go.jp/jma/com/images/logo.gif" alt="気象庁" width="120" height="67" /></a></div>
>
> <div id="header_right">
> <div id="header_link">
> <ul>
> <li id="toMain"><a href="#main">本文へ</a></li>
> <li xml:lang="en" lang="en"><a href="http://www.jma.go.jp/jma/indexe.html">ENGLISH</a></li>
> <li><a href="http://www.jma.go.jp/jma/kishou/info/goiken.html">ご意見・ご感想</a></li>
> <li id="siteMap"><a href="http://www.jma.go.jp/jma/kishou/sitemap.html">サイトマップ</a></li>
> </ul>
> </div>
> <!-- search -->
> <div id="yjsearch" class="watermark">
> <p>キーワードを入力し検索ボタンを押下ください。</p>
> <form action="http://www.jma.go.jp/jma/menu/search.html"; method="get" id="srch">
> <input type="search" results="5" name="p" id="srchInput" />
> <input type="image" src="http://www.jma.go.jp/jma/com/images/btn_search.gif"; alt="検索" id="srchBtn" onclick="document.getElementById('srchInput').focus();" />
> <input type="hidden" id="fr" name="fr" value="cse" />
> <input type="hidden" id="ei" name="ei" value="utf-8" />
> <input type="hidden" id="csid" name="csid" value="pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h" />
> <input type="hidden" name="vs" value="www.jma.go.jp" id="yjInsite" />
> </form>
> <img src="http://custom.search.yahoo.co.jp/images/window/pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h.gif"; alt="" /> </div>
> <script type="text/javascript">
> (function() {
> var sb = document.getElementById('yjsearch');
> if (sb && sb.className == 'watermark') {
> var si = document.getElementById('srchInput');
> var f = function() { si.className = 'nomark'; };
> var b = function() {
> if (si.value == '') {
> si.className = '';
> }
> };
> si.onfocus = f;
> si.onblur = b;
> if (!/[&?]p=[^&]/.test(location.search)) {
> b();
> } else {
> f();
> }
> }
> })();
> </script>
> <!-- search -->
> </div>
> <ul id="gnavi">
> <li><a href="http://www.jma.go.jp/">ホーム</a></li>
> <li><a href="http://www.jma.go.jp/jma/menu/menuflash.html">防災情報</a></li>
> <li><a href="http://www.jma.go.jp/jma/menu/menureport.html" class="on">各種データ・資料</a></li>
> <li><a href="http://www.jma.go.jp/jma/menu/menuknowledge.html">知識・解説</a></li>
> <li><a href="http://www.jma.go.jp/jma/menu/menuabout.html">気象庁について</a></li>
> <li><a href="http://www.jma.go.jp/jma/menu/menulinks.html">案内・申請</a></li>
> </ul>
> </div>
></div>
><!--header end --> <div id="contents_area2">
> <div id="ncontents2">
> <!-- pankuzu menu -->
> <div class="clearfix">
> <ul class="breadcrumb2">
> <li><a href="http://www.jma.go.jp/">ホーム</a> > </li>
> <li><a href="http://www.jma.go.jp/jma/menu/menureport.html">各種データ・資料</a> > </li>
> <li>過去の気象データ・ダウンロード</li>
> </ul>
> </div>
><script type="text/javascript">
><!--
>function TigilError() {
> return true;
>}
>window.onerror = TigilError;
>window.localStorage.setItem('errFlag', "1");
>-->
></script>
><ul class="pagelink">
> <li><a href="http://www.data.jma.go.jp/risk/obsdl/index.php">メニューページに戻る</a></li>
></ul>
><p>ブラウザの戻るボタンで戻り、もう一度やり直してください</p>
> </div> </div>
> <div id="footer_area">
> <div id="nfooter">
> <p>気象庁:〒100-8122東京都千代田区大手町1-3-4 代表電話:03-3212-8341</p>
> <ul>
> <li><a href="http://www.jma.go.jp/jma/kishou/info/coment.html">気象庁ホームページについて</a></li>
> </ul>
> </div>
></div> </div>
> </body>
></html>
>
>
>>匿名 さん:
>>
>>というか、すでにお送りしていますね。
>>wiresharkを使った解析の動画です。あれを見て、まずは、PHPSESSIDを取得できるリクエストを見つけることからかと思います。
>>あと、PHPSESSIDが無効になったあとそのPHPSESSIDを送ったらどういうレスポンスが返って来ているのか?そこをもっと知りたいです。
>>
>>
>>
>>>小川慶一 さん:
>>>レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
>>>何かアプローチに問題がありそうでしょうか?
>>>
>>>Cache-Control: max-age=600
>>>Date: Thu, 16 Apr 2015 11:14:29 GMT
>>>Pragma: no-cache
>>>Content-Length: 910
>>>Content-Type: "text/x-comma-separated-values"
>>>Expires: 0
>>>Server: Apache
>>>Content-Disposition: attachment; filename="data.csv"
>>>Content-Transfer-Encoding: binary
>>>MS-Author-Via: DAV
>>>X-Content-Type-Options: nosniff
>>>X-Powered-By: PHP/5.3.3
>>>
>>>>匿名 さん:
>>>>
>>>>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>>>>それで実装してみてください。
>>>>
>>>
>>
>


4108 : 受講生さんのコメント (2015-04-18 21:15:22)

小川慶一 さん:
wiresharkのPOSTデータのみ解析していたのですが、その他の項目も調べてみます。
無効になった後のレスポンスは以下です。

ヘッダー
Cache-Control: max-age=600
Date: Sat, 18 Apr 2015 11:59:21 GMT
Content-Length: 5316
Content-Type: text/html; charset=utf-8
Server: Apache
MS-Author-Via: DAV
X-Content-Type-Options: nosniff
X-Powered-By: PHP/5.3.3

ボディ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>気象庁|過去の気象データ・ダウンロード</title>
<meta name="Author" content="気象庁 Japan Meteorological Agency" />
<meta name="keywords" content="気象庁 Japan Meteorological Agency" />
<meta name="description" content="気象庁が提供するページです" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link rel="stylesheet" type="text/css" href="/com/css/define.css" media="all" />
<style type="text/css" media="all"><!-- @import url(/com/default.css); --></style>
<script type="text/javascript">
/*@cc_on _d=document;
eval('var document=_d');
@*/
</script>
<style>
<!--
.tblnarabi td{
padding:0;
white-space:nowrap;
}
-->
</style>
<link href="http://www.data.jma.go.jp/risk/obsdl/web/css/top.2.0.min.css"; rel="stylesheet" type="text/css" /> </head>
<body>
<div id="main-area">
<div id="header_area">
<div id="nheader">
<div id="logo"><a href="http://www.jma.go.jp/jma/index.html"><img src="http://www.jma.go.jp/jma/com/images/logo.gif" alt="気象庁" width="120" height="67" /></a></div>

<div id="header_right">
<div id="header_link">
<ul>
<li id="toMain"><a href="#main">本文へ</a></li>
<li xml:lang="en" lang="en"><a href="http://www.jma.go.jp/jma/indexe.html">ENGLISH</a></li>
<li><a href="http://www.jma.go.jp/jma/kishou/info/goiken.html">ご意見・ご感想</a></li>
<li id="siteMap"><a href="http://www.jma.go.jp/jma/kishou/sitemap.html">サイトマップ</a></li>
</ul>
</div>
<!-- search -->
<div id="yjsearch" class="watermark">
<p>キーワードを入力し検索ボタンを押下ください。</p>
<form action="http://www.jma.go.jp/jma/menu/search.html"; method="get" id="srch">
<input type="search" results="5" name="p" id="srchInput" />
<input type="image" src="http://www.jma.go.jp/jma/com/images/btn_search.gif"; alt="検索" id="srchBtn" onclick="document.getElementById('srchInput').focus();" />
<input type="hidden" id="fr" name="fr" value="cse" />
<input type="hidden" id="ei" name="ei" value="utf-8" />
<input type="hidden" id="csid" name="csid" value="pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h" />
<input type="hidden" name="vs" value="www.jma.go.jp" id="yjInsite" />
</form>
<img src="http://custom.search.yahoo.co.jp/images/window/pD.LqPJKNL6pX5S8V0Zj684fKOuX.849vg9h.gif"; alt="" /> </div>
<script type="text/javascript">
(function() {
var sb = document.getElementById('yjsearch');
if (sb && sb.className == 'watermark') {
var si = document.getElementById('srchInput');
var f = function() { si.className = 'nomark'; };
var b = function() {
if (si.value == '') {
si.className = '';
}
};
si.onfocus = f;
si.onblur = b;
if (!/[&?]p=[^&]/.test(location.search)) {
b();
} else {
f();
}
}
})();
</script>
<!-- search -->
</div>
<ul id="gnavi">
<li><a href="http://www.jma.go.jp/">ホーム</a></li>
<li><a href="http://www.jma.go.jp/jma/menu/menuflash.html">防災情報</a></li>
<li><a href="http://www.jma.go.jp/jma/menu/menureport.html" class="on">各種データ・資料</a></li>
<li><a href="http://www.jma.go.jp/jma/menu/menuknowledge.html">知識・解説</a></li>
<li><a href="http://www.jma.go.jp/jma/menu/menuabout.html">気象庁について</a></li>
<li><a href="http://www.jma.go.jp/jma/menu/menulinks.html">案内・申請</a></li>
</ul>
</div>
</div>
<!--header end --> <div id="contents_area2">
<div id="ncontents2">
<!-- pankuzu menu -->
<div class="clearfix">
<ul class="breadcrumb2">
<li><a href="http://www.jma.go.jp/">ホーム</a> > </li>
<li><a href="http://www.jma.go.jp/jma/menu/menureport.html">各種データ・資料</a> > </li>
<li>過去の気象データ・ダウンロード</li>
</ul>
</div>
<script type="text/javascript">
<!--
function TigilError() {
return true;
}
window.onerror = TigilError;
window.localStorage.setItem('errFlag', "1");
-->
</script>
<ul class="pagelink">
<li><a href="http://www.data.jma.go.jp/risk/obsdl/index.php">メニューページに戻る</a></li>
</ul>
<p>ブラウザの戻るボタンで戻り、もう一度やり直してください</p>
</div> </div>
<div id="footer_area">
<div id="nfooter">
<p>気象庁:〒100-8122東京都千代田区大手町1-3-4 代表電話:03-3212-8341</p>
<ul>
<li><a href="http://www.jma.go.jp/jma/kishou/info/coment.html">気象庁ホームページについて</a></li>
</ul>
</div>
</div> </div>
</body>
</html>


>匿名 さん:
>
>というか、すでにお送りしていますね。
>wiresharkを使った解析の動画です。あれを見て、まずは、PHPSESSIDを取得できるリクエストを見つけることからかと思います。
>あと、PHPSESSIDが無効になったあとそのPHPSESSIDを送ったらどういうレスポンスが返って来ているのか?そこをもっと知りたいです。
>
>
>
>>小川慶一 さん:
>>レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
>>何かアプローチに問題がありそうでしょうか?
>>
>>Cache-Control: max-age=600
>>Date: Thu, 16 Apr 2015 11:14:29 GMT
>>Pragma: no-cache
>>Content-Length: 910
>>Content-Type: "text/x-comma-separated-values"
>>Expires: 0
>>Server: Apache
>>Content-Disposition: attachment; filename="data.csv"
>>Content-Transfer-Encoding: binary
>>MS-Author-Via: DAV
>>X-Content-Type-Options: nosniff
>>X-Powered-By: PHP/5.3.3
>>
>>>匿名 さん:
>>>
>>>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>>>それで実装してみてください。
>>>
>>
>


4101 : 小川慶一の回答 (2015-04-18 15:07:27)

匿名 さん:

というか、すでにお送りしていますね。
wiresharkを使った解析の動画です。あれを見て、まずは、PHPSESSIDを取得できるリクエストを見つけることからかと思います。
あと、PHPSESSIDが無効になったあとそのPHPSESSIDを送ったらどういうレスポンスが返って来ているのか?そこをもっと知りたいです。



>小川慶一 さん:
>レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
>何かアプローチに問題がありそうでしょうか?
>
>Cache-Control: max-age=600
>Date: Thu, 16 Apr 2015 11:14:29 GMT
>Pragma: no-cache
>Content-Length: 910
>Content-Type: "text/x-comma-separated-values"
>Expires: 0
>Server: Apache
>Content-Disposition: attachment; filename="data.csv"
>Content-Transfer-Encoding: binary
>MS-Author-Via: DAV
>X-Content-Type-Options: nosniff
>X-Powered-By: PHP/5.3.3
>
>>匿名 さん:
>>
>>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>>それで実装してみてください。
>>
>


4100 : 小川慶一の回答 (2015-04-18 15:05:20)

匿名 さん:

僕も、ちょっと勘違いしていたかも。

ブラウザーで動かしたときに取ってきたクッキーの値を基にPHPSESSIDを取得された、ということですが。

レスポンスで確実にPHPSESSIDを受け取れるリクエストを見つけられそうでしょうか。
(..と言っても無理かと思いますので。。解析方法について解説した追加動画を追ってお送りします)





>小川慶一 さん:
>レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
>何かアプローチに問題がありそうでしょうか?
>
>Cache-Control: max-age=600
>Date: Thu, 16 Apr 2015 11:14:29 GMT
>Pragma: no-cache
>Content-Length: 910
>Content-Type: "text/x-comma-separated-values"
>Expires: 0
>Server: Apache
>Content-Disposition: attachment; filename="data.csv"
>Content-Transfer-Encoding: binary
>MS-Author-Via: DAV
>X-Content-Type-Options: nosniff
>X-Powered-By: PHP/5.3.3
>
>>匿名 さん:
>>
>>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>>それで実装してみてください。
>>
>


4096 : 受講生さんのコメント (2015-04-16 20:27:01)

小川慶一 さん:
レスポンスヘッダーの中身が以下なのですが、PHPSESSIDが見当たりません。
何かアプローチに問題がありそうでしょうか?

Cache-Control: max-age=600
Date: Thu, 16 Apr 2015 11:14:29 GMT
Pragma: no-cache
Content-Length: 910
Content-Type: "text/x-comma-separated-values"
Expires: 0
Server: Apache
Content-Disposition: attachment; filename="data.csv"
Content-Transfer-Encoding: binary
MS-Author-Via: DAV
X-Content-Type-Options: nosniff
X-Powered-By: PHP/5.3.3

>匿名 さん:
>
>レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
>それで実装してみてください。
>


4094 : 小川慶一の回答 (2015-04-16 14:01:26)

匿名 さん:

レスポンスヘッダーで新しいPHPSESSIDを受け取ったら次のリクエストではそれを使う、というコードになると思います。
それで実装してみてください。


4091 : 受講生さんのコメント (2015-04-15 21:24:38)

小川慶一 さん:
WinHTTPで気象庁のCSVファイルを読み込みセルに格納する
マクロを書いてみました。上手くはいったのですが、PHPSESSIDが
一定時間で変化してしまい、その対応がわかりません。また、他のパソコンでも
上手くいきませんでした。※PHPSESSIDは仮の値を入力しています。
これを回避する方法はあるのでしょうか?

Option Explicit
'以下に紹介するライブラリの参照設定をしてください
'Microsoft WinHTTP Services, version 5.1 -> HTTPリクエストをするため
'Microsoft ActiveX Data Objects X.X Library -> 文字化けを避けるため
Sub 気象庁データ抽出()
    Dim url As String, n As Long, mae As Date, ato As Date, ymd As String
    url = "http://www.data.jma.go.jp/gmd/risk/obsdl/show/table"

    mae = saigo
    If mae = Date Then
    MsgBox "データは最新です。" & vbCrLf & mae - 1
    Exit Sub
    End If
    ato = Date
    ymd = "[""a"",""b"",""c"",""d"",""e"",""f""]"
    ymd = Replace(ymd, "a", Year(mae))
    ymd = Replace(ymd, "b", Year(ato))
    ymd = Replace(ymd, "c", Month(mae))
    ymd = Replace(ymd, "d", Month(ato))
    ymd = Replace(ymd, "e", Day(mae))
    ymd = Replace(ymd, "f", Day(ato))
    
   
    Dim sp As String
    sp = "stationNumList=[""s47662""]&aggrgPeriod=1&elementNumList=[[""202"",""""],[""203"",""""],[""201"",""""],[""701"",""""],[""702"",""""]]&interAnnualFlag=1&ymdList=" & ymd & "&optionNumList=[]&downloadFlag=true&rmkFlag=1&disconnectFlag=1&youbiFlag=0&kijiFlag=0&huukouFlag=0&csvFlag=1&jikantaiFlag=0&jikantaiList=[]&ymdLiteral=1&PHPSESSID=sr575afgar3woiw"’PHPSESSIDEは仮の値
   ' Debug.Print sp
    Dim xh As New WinHttp.WinHttpRequest
    xh.Open "POST", url, False
    xh.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" '日本語を含む場合、サーバ側で文字化けを避けるために必要
  
    
    Dim bp() As Byte
    bp = StrConv(sp, vbFromUnicode)
    xh.send bp
    
    Dim sCode As String
    sCode = xh.Status
    If sCode <> 200 Then
        MsgBox "postに失敗しました" & vbNewLine & sCode
        Exit Sub
    End If

    Dim sHead As String
    Dim sBody As String
    
    sHead = xh.getAllResponseHeaders
  
    
    Dim strm As New ADODB.Stream
    strm.Open
    strm.Position = 0
    strm.Type = 1
    strm.Write xh.ResponseBody
    
    strm.Position = 0
    strm.Type = 2
    strm.Charset = "shift_jis"
    
    sBody = strm.ReadText
    
    strm.Close
    Set strm = Nothing
    
    Debug.Print sBody
    If InStr(sBody, "TigilError") > 0 Then
    MsgBox "データ量が多すぎます。", vbCritical
    Exit Sub
    End If
    
    Application.ScreenUpdating = False
    With Sheets("気象庁データ")
    .Cells.Clear
    Dim tmp, tmp2, i As Long, j As Long, data
    tmp = Split(sBody, vbCrLf)
    n = 1
    For i = 0 To UBound(tmp) - 1
    tmp2 = Split(tmp(i), ",")
    
    For j = 0 To UBound(tmp2)
    .Cells(n, j + 1) = tmp2(j)
    Next j
    n = n + 1
    Next i
    data = .Range("A7:P" & n - 1)
    End With
    
    With Sheets("天気")
    n = .Range("A" & Rows.Count).End(xlUp).Row + 1
    If n <= 1 Then n = 2
    For i = LBound(data) To UBound(data)
    .Cells(n, 1) = data(i, 1)
    .Cells(n, 2) = data(i, 2)
    .Cells(n, 3) = data(i, 5)
    .Cells(n, 4) = data(i, 8)
    .Cells(n, 5) = data(i, 11)
    .Cells(n, 6) = data(i, 14)
    n = n + 1
    Next i
    .Activate
    End With
  
    Application.ScreenUpdating = True
End Sub

Function saigo() As Date
 Dim i As Long, data, buf As Date

 With Sheets("天気")
 If .Range("A2") = "" Then
 saigo = "2010/1/1"
 Exit Function
 End If
 
 data = .Range("A1").CurrentRegion
 End With
    
 buf = data(2, 1)
 
 For i = 2 To UBound(data)
 If buf - data(i, 1) < 0 Then
 buf = data(i, 1)
 End If
 
 Next i
    

  saigo = buf + 1
End Function

>匿名 さん:
>
>そうしてください。
>それか、他のライブラリを使うかですね。
>
>
>>小川慶一 さん:
>>わかりました。ショートカットキー操作で対応してみます。
>>
>>
>>>匿名 さん:
>>>
>>>InternetExplorerを使う限り、無理かと思います。
>>>そこから先は、ショートカットキー操作でさくさくっとやる、というくらいではダメでしょうか?
>>>
>>>
>>>>こんばんは。
>>>>東京青果情報センターから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
>>>
>>>
>>>
>>>

>>>
>>>
>>
>


4067 : 小川慶一の回答 (2015-04-09 10:05:36)

匿名 さん:

そうしてください。
それか、他のライブラリを使うかですね。


>小川慶一 さん:
>わかりました。ショートカットキー操作で対応してみます。
>
>
>>匿名 さん:
>>
>>InternetExplorerを使う限り、無理かと思います。
>>そこから先は、ショートカットキー操作でさくさくっとやる、というくらいではダメでしょうか?
>>
>>
>>>こんばんは。
>>>東京青果情報センターから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
>>
>>
>>
>>

>>
>>
>


4058 : 受講生さんのコメント (2015-04-07 18:12:34)

小川慶一 さん:
わかりました。ショートカットキー操作で対応してみます。


>匿名 さん:
>
>InternetExplorerを使う限り、無理かと思います。
>そこから先は、ショートカットキー操作でさくさくっとやる、というくらいではダメでしょうか?
>
>
>>こんばんは。
>>東京青果情報センターから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
>
>
>
>

>
>


4056 : 小川慶一の回答 (2015-04-07 12:56:26)

匿名 さん:

InternetExplorerを使う限り、無理かと思います。
そこから先は、ショートカットキー操作でさくさくっとやる、というくらいではダメでしょうか?


>こんばんは。
>東京青果情報センターから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






4052 : 受講生さんのコメント (2015-04-06 23:49:21)

こんばんは。
東京青果情報センターから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







3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 エクセルマクロVBA「Web連携」講座の概要
    【動画1】 エクセルマクロVBA「Web連携」講座の概要 未習得
  2. 【動画2】 エクセルマクロVBA「Web連携」サーバとクライアント
    【動画2】 エクセルマクロVBA「Web連携」サーバとクライアント 未習得
  3. 【動画3】 エクセルマクロVBA「Web連携」ApacheとCGI
    【動画3】 エクセルマクロVBA「Web連携」ApacheとCGI 未習得
  4. 【動画4】 エクセルマクロVBA「Web連携」セッションとポート
    【動画4】 エクセルマクロVBA「Web連携」セッションとポート 未習得
  5. 【動画5】 エクセルマクロVBA「Web連携」クライアントとは
    【動画5】 エクセルマクロVBA「Web連携」クライアントとは 未習得
  6. 【動画6】 エクセルマクロVBA「Web連携」リクエストとレスポンスとは
    【動画6】 エクセルマクロVBA「Web連携」リクエストとレスポンスとは 未習得
  7. 【動画7】 エクセルマクロVBA「Web連携」GETリクエスト
    【動画7】 エクセルマクロVBA「Web連携」GETリクエスト 未習得
  8. 【動画8】 エクセルマクロVBA「Web連携」POSTリクエスト
    【動画8】 エクセルマクロVBA「Web連携」POSTリクエスト 未習得
  9. 【動画9】 エクセルマクロVBA「Web連携」Cookieを使ったリクエスト
    【動画9】 エクセルマクロVBA「Web連携」Cookieを使ったリクエスト 未習得
  10. 【動画10】 エクセルマクロVBA「Web連携」HTMLコンテンツの取得と解析_概要
    【動画10】 エクセルマクロVBA「Web連携」HTMLコンテンツの取得と解析_概要 未習得
  11. 【動画11】 エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_GETリクエスト
    【動画11】 エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_GETリクエスト 未習得
  12. 【動画12】 エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_POSTリクエスト
    【動画12】 エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_POSTリクエスト 未習得
  13. 【動画13】 エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_Cookie
    【動画13】 エクセルマクロVBA「Web連携」Microsoft WinHTTP Services 5.1_Cookie 未習得
  14. 【動画14】 エクセルマクロVBA「Web連携」DOM(Document Object Model)を使った解析_概要
    【動画14】 エクセルマクロVBA「Web連携」DOM(Document Object Model)を使った解析_概要 未習得
  15. 【動画15】 エクセルマクロVBA「Web連携」DOMを使った解析_基礎
    【動画15】 エクセルマクロVBA「Web連携」DOMを使った解析_基礎 未習得
  16. 【動画16】 エクセルマクロVBA「Web連携」DOMを使ったサンプル
    【動画16】 エクセルマクロVBA「Web連携」DOMを使ったサンプル 未習得
  17. 【動画17】 エクセルマクロVBA「Web連携」DOM活用のテクニック
    【動画17】 エクセルマクロVBA「Web連携」DOM活用のテクニック 未習得
  18. 【動画18】 エクセルマクロVBA「Web連携」DOMの活用例_メルマガのタイトルを取得
    【動画18】 エクセルマクロVBA「Web連携」DOMの活用例_メルマガのタイトルを取得 未習得
  19. 【動画19】 エクセルマクロVBA「Web連携」DOMの活用例_複数のメルマガ解除を自動化
    【動画19】 エクセルマクロVBA「Web連携」DOMの活用例_複数のメルマガ解除を自動化 未習得
  20. 【動画20】 エクセルマクロVBA「Web連携」Microsoft XMLを活用したコンテンツ取得
    【動画20】 エクセルマクロVBA「Web連携」Microsoft XMLを活用したコンテンツ取得 未習得
  21. 【動画21】 エクセルマクロVBA「Web連携」Microsoft XML_活用例
    【動画21】 エクセルマクロVBA「Web連携」Microsoft XML_活用例 未習得
  22. 【動画22】 エクセルマクロVBA「Web連携」Microsoft XMLとDOMの活用例
    【動画22】 エクセルマクロVBA「Web連携」Microsoft XMLとDOMの活用例 未習得
  23. 【動画23】 エクセルマクロVBA「Web連携」Microsoft Internet ControlsならではのWebコンテンツの取得
    【動画23】 エクセルマクロVBA「Web連携」Microsoft Internet ControlsならではのWebコンテンツの取得 未習得
  24. 【動画24】 エクセルマクロVBA「Web連携」Microsoft Internet Controls_Webコンテンツの取得
    【動画24】 エクセルマクロVBA「Web連携」Microsoft Internet Controls_Webコンテンツの取得 未習得
  25. 【動画25】 エクセルマクロVBA「Web連携」DOMを使ってXMLを解析
    【動画25】 エクセルマクロVBA「Web連携」DOMを使ってXMLを解析 未習得
  26. 【動画26】 エクセルマクロVBA「Web連携」Web連携のよくある問題
    【動画26】 エクセルマクロVBA「Web連携」Web連携のよくある問題 未習得
  27. 【動画27】 エクセルマクロVBA「Web連携」総括
    【動画27】 エクセルマクロVBA「Web連携」総括 未習得
  28. 【動画28】 AJAX通信の解析1: 背景、対応、流れの簡単な説明
    【動画28】 AJAX通信の解析1: 背景、対応、流れの簡単な説明 未習得
  29. 【動画29】 AJAX通信の解析2: 流れと事例の詳細
    【動画29】 AJAX通信の解析2: 流れと事例の詳細 未習得
  30. 【動画30】 クッキーを取得する方法
    【動画30】 クッキーを取得する方法 未習得
  31. 【動画31】 セッションの解析と実装-イントロダクション
    【動画31】 セッションの解析と実装-イントロダクション 未習得
  32. 【動画32】 「セッション」とは?その目的と、ウェブページでの事例
    【動画32】 「セッション」とは?その目的と、ウェブページでの事例 未習得
  33. 【動画33】 セッション解析と実装の落とし穴
    【動画33】  セッション解析と実装の落とし穴 未習得
  34. 【動画34】 セッション解析と実装のサンプルデータ解説
    【動画34】 セッション解析と実装のサンプルデータ解説 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ