社内システムの自作なら、すず工房へ!!
エクセル仕事術などでIT経営を支援します
  • Home
  • エクセル仕事術
  • クラウド生産管理
  • サービス案内
  • つぶやきました
  • お問合せ
  • すず工房
  • 名刺

WEBからデータをVBAで取込む

2013年4月17日

WEBには様々なデータが公開されています。そのデータをExcelやそのほかのアプリに取り込んで利用したいことってありますよね。
VBAからインターネット上のデータにアクセスする方法はちょっとググってみればすぐに分かります。
問題はその次ですよね。どうやつて必要なデータのみを取出すか。
今回はその方法についての一例の紹介です。

まずは取り込んだデータを眺めることから始めましょう (^_^)

様々なデータがありますが、大量に整然と整理されているデータは、手
作業ではなく、スクリプトやアプリによって生成されています。したがっ
て生成されたHTMLをよく見れば何らかの「規則」が見えてきます。
たとえば次のページ抜粋とそのソースコードをみてください。
これは[えきから時刻表]サイト(http://ekikara.jp/)で、茨城県・JR常
磐線・下りの時刻表を表示させたものの一部です。

ここから「駅名」を取出すにはどうすればいいでしょうか?
元のスクリプトなりアプリのソースコードが分かれば、「規則」はすぐ
に分かりますが、それは望むべくもありません。しからばどうするか。
「自分で見つけるしかありません。」
あたりまえですね。すみません m(_ _)m
いきなり取り込みプログラムを書かず、データを眺めてみましょう。
「ソースコードを表示」でこの画面のHTMLを表示させてみます。


これの場合には、なんとなく[class="lowBg06"]をまず探して駅名の始まりを見つけ、次に[ href="/../../station/????????.htm">]のような文字列が見つかれば、そのあとに[駅名]がありそうだ
と、わかりますよね?もちろん他の部分に[class="lowBg06"]がないかとか、[ href="/../../station/????????.htm">]をどうやって特定するか、文字数でできるか?とかいろいろチェックは必要です。

#なんだかパズルを解くようで楽しくなってきませんか(こんなのが楽しいのは筆者だけですかね)?
それはともかく、
指定されたurlから(上記のソースコード画面のようなイメージの)HTMLコードを取得するサブプロシージャの例をあげておきます。ここで取得したコードをもとに上に書いたような「規則」をコーディングしてデータを取出していきます。


Public Function getHTML(url As String, Optional strBody As _
Variant = Null, Optional incharset As String) As String
    Dim HTTP As Object
    Dim inStrm As Object
    Dim res As String
    Dim pos1 As Long
    Dim pos2 As Long
    Dim http_charset As Variant
    
    
    getHTML = ""
        
    Set HTTP = CreateObject("MSXML2.XMLHTTP")
    HTTP.Open "GET", url, False  
                'false:同期通信 すべての応答が返ってから次へ
    HTTP.Send '実際に要求を送信
    If HTTP.status = 200 Then 
              'エラーページが返ってくるので常に200
        res = HTTP.responseText
        http_charset = "Shift-JIS"
        pos1 = InStr(1, res, "charset=", vbTextCompare)
        If pos1 > 0 Then
            pos2 = InStr(pos1, res, Chr(34), vbTextCompare)
            If pos2 > 0 Then
                http_charset = Replace(Mid(res, pos1, _
                pos2 - pos1), "charset=", "", , , _
                vbTextCompare)
            End If
        End If
        If Not IsNull(res) Then
            Set inStrm = CreateObject("ADODB.Stream")
            With inStrm
                .Open
                .Position = 0
                .Type = 1 'adTypeBinary
                .Write HTTP.responseBody 'streamに書き込む
        
                .Position = 0
                .Type = 2 'adTypeText for .readtext
                If incharset <> "" Then
                    '文字コードを指定して呼び出したとき
                    .Charset = incharset '文字コードをセット
                    strBody = .readtext 
                        ' .Charsetエンコードで読み込んだテキスト
                Else
                    .Charset = http_charset 'オリジナルの文字コード
                    getHTML = .readtext 
                        ' .Charsetエンコードで読み込んだテキスト
                End If
                .Close
            End With
            Set inStrm = Nothing
        End If
    End If
    Set HTTP = Nothing
End Function
'getHTMLを呼び出すプロシージャの例
public sub test()
        Dim buf as Variant
        Dim tmp as Variant
        
    buf = getHTML(”http://ekikara.jp/newdata/line/1301241_
                                /down1_1.htm”)
    If buf = "" Then
        Exit sub
    End If
    tmp = Split(buf, vbLf) '1行ずつに分解してtmpへ入れる
    
    '以下「規則」にしたがってtmp()をデコードしていく
    
end sub



HTMLを生成するスクリプトやアプリでは対応できないデータというものが存在します。そんなときには手作業で該当データを修正することもあります。規則の「例外」です。
したがって見つけた規則にも例外が発生します。これを予め知ることは、すべてのデータを見ればその場では対応ができますが、元のデータがバージョンアップなどすると、例外の場所も変わってしま
います。
「見つかったらすぐ対応」するしかないのでしょうかね?
  • 仕事に生かすExcel
  • マクロ・VBA
    • Excel2013のSDIへの対応
    • WEBからデータをVBAで取込む
    • 選択したセル範囲を取出すには
    • 消費税率を読込むDLL
    • インターネット上のサイトのデータを読み込む
    • 右ボタンでのMouseDownイベントには要注意
    • CSVファイルを読みこむ(Excel)
    • テキストファイル読込速度比較
    • 進行表示の3つの方法
    • IsDate関数はおかしい‥
    • 別のワークブックのデータを読み込む
    • 2 つの指定した日付の時間間隔と満年齢
    • ワークシートのセルに特定のデータを入力する
    • CSVファイルからデータを取り出す
    • ワークシートからデータを取得する
    • ワークシートにデータをセットする
    • 特定のセル範囲からデータを探す方法を比較する
  • Excelの操作

コンタクト

メール
メール
FaceBook
FaceBook

つぶやきました

見える生産管理2022

2022年 10月 31日 月

久しぶりの投稿になってしまいましたが、「見える生産管理2022」を試用できるようになりました。「クラウド生産管理」メニュからご覧ください。

0 コメント

Webデータベース利用の生産管理

2019年 7月 22日 月

いままでExcel(R)を活用した生産管理システムを構築したり構築支援したりしてきましたが、もっと簡単に生産管理を開始できないかと考え、Webに登場してきたデータベースを利用して生産管理できるシステムを考えました。

 

続きを読む 0 コメント

iPadのSIM

2018年 11月 16日 金

iPad Pro 12.9を外出時の仕事用に使っていたが、自宅のMACにリモートアクセスするのがベストに近いかもと気づき、4G回線経由だがやってみた。

しかしこれがかなり遅い。SIMは前の機種で使ってたイオンモバイルのやつ。これが原因かもと思い、一番早いと噂のUQ  Mobileに変えてみた。体感的にはちょっと早いかなという感じ。これからじっくり検証していこうと思う。

 

インターネット接続の設定でつまづいたので以下に備忘録として残しておく。

 

 

続きを読む
プライバシーポリシー | サイトマップ
Copyright © 2002- すず工房. All Rights Reserved.
ログアウト | 編集
  • Home
  • エクセル仕事術
    • 仕事に生かすExcel
      • Excelでできること
      • ExcelからSQLiteを使う理由
    • マクロ・VBA
      • Excel2013のSDIへの対応
      • WEBからデータをVBAで取込む
      • 選択したセル範囲を取出すには
      • 消費税率を読込むDLL
      • インターネット上のサイトのデータを読み込む
      • 右ボタンでのMouseDownイベントには要注意
      • CSVファイルを読みこむ(Excel)
      • テキストファイル読込速度比較
      • 進行表示の3つの方法
      • IsDate関数はおかしい‥
      • 別のワークブックのデータを読み込む
      • 2 つの指定した日付の時間間隔と満年齢
      • ワークシートのセルに特定のデータを入力する
      • CSVファイルからデータを取り出す
      • ワークシートからデータを取得する
      • ワークシートにデータをセットする
      • 特定のセル範囲からデータを探す方法を比較する
    • Excelの操作
      • ふりがなをつける
      • 行・列を固定してスクロール
      • 他のシートのデータを表示する-カメラ機能
      • 文章を指定範囲に収まるように整形する
  • クラウド生産管理
    • 見える生産管理2022
    • 見える生産管理K(簡易版)
    • 試用申込み
  • サービス案内
    • IT経営
  • つぶやきました
    • MAC
    • IT
    • その他
    • 年月別
      • 2022/10
      • 2019/07
      • 2016/07
      • 2016/04
      • 2015/11
      • 2015/10
      • 2015/08
      • 2015/07
      • 2015/06
      • 2015/03
      • 2015/02
      • 2014/12
      • 2014/03
      • 2013/09
      • 2012/11
      • 2012/09
      • 2010/09
      • 2010/08
      • 2010/07
      • 2010/06
      • 2010/03
      • 2010/02
      • 2009/05
      • 2009/04
  • お問合せ
  • すず工房
    • 企業理念
    • 主な資格
    • 実績
  • 名刺
  • トップへ戻る