![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
初心者です。
これまで下記サイトより、webクエリーを使ってエクセルに時系列データを取込んでいたのですがサイトの構成が変わりできなくなりました。
IEを制御して取込む方法を試してみましたが、うまくできませんでした。マクロコードを記述して教えていただければありがたいです。(いろんな方法を教えていただいても初心者なので私の力ではできないと思います。)
よろしくお願いします。
http://k-db.com/stocks/8306-T/4h
No.1ベストアンサー
- 回答日時:
こんにちは。
>時系列データを取込んでいたのですが
ということは、
日足 前場後場 1時間足 30分足 15分足 5分足
この6つということですか?
本来は、ご質問にあるように、Webクエリに近いスタイルで作るべきでしたが、今は、どこのサイトでも、スクレイピングが嫌われるよううなので、そのサイトの、CSVダウンロードのポートを利用してみました。
このマクロは、6種類をダウンロードしてくるのと、それを「新規のブック」にインポートします。今回は、個人的に新しい試みです。
>IEを制御して取込む方法を試してみましたが、
まずかったら、そちらのスタイルに戻すつもりでいます。かなり、鈍速になるはずです。
他にも、DOMでインポートする方法があります。以下のマクロは、最終的な書式処理が抜けております。その点はお詫びいたします。
なお、これは、私の個人的・継続的にVBAマクロの練習をしているので、教えているのではなく、ご質問を利用させていただいているのです。
参考サイト:
http://www.ka-net.org/blog/?p=4855
'//'標準モジュールに貼り付けてください。
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryW" (ByVal lpszUrlName As Long) As Long
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileW" (ByVal pCaller As Long, ByVal szURL As Long, ByVal szFileName As Long, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Filename As String
Private NewBook As Workbook
Private ShCount As Long
Private Er As Long
Sub DownLoadFiles()
Dim Ret As Long
Dim mPath As String: mPath = ThisWorkbook.Path & "\"
Dim Filename As String
Dim buf As Variant
Dim BaseUrl As String
Dim Url As String
Dim Urls As Variant, sAdd As Variant
Dim SaveFilePath As String
'*****************
'目的のURL を入れてください。
BaseUrl = "http://k-db.com/stocks/1458-T/"
Urls = Array("", "4h", "1h", "30m", "15m", "5m") 'ダウンロード項目
'*****************
If NewBook Is Nothing Then
Set NewBook = Workbooks.Add 'ブックを作る
End If
buf = Split(BaseUrl, "/")
If InStr(1, BaseUrl, "k-db.com/stocks", 1) = 0 Then 'Urlをチェック
MsgBox "URLは、【株式データサイト】に限ります。", vbExclamation
Exit Sub
End If
buf = buf(3) & "_" & buf(4) 'ダウンロード名を生成
For Each sAdd In Urls
If Len(sAdd) > 0 Then
SaveFilePath = mPath & buf & "_" & sAdd & ".csv"
Else
SaveFilePath = mPath & buf & sAdd & ".csv"
End If
Url = BaseUrl & sAdd & "?download=csv"
''MsgBox Url 'URLチェック用
Ret = DownloadFile(Url, SaveFilePath)
If Ret <> 0 Then
MsgBox "取得に失敗しました。", vbExclamation
Else
If Dir(SaveFilePath) <> "" Then
ImportFiles SaveFilePath
Else
MsgBox "ダウンロードに失敗しました", vbCritical
Er = Er + 1
End If
End If
Next sAdd
If Err = 0 Then
MsgBox "正常に終了しました。", vbInformation
End If
End Sub
Private Function DownloadFile(ByVal Url As String, ByVal SaveFilePath As String)
Dim Ret As Long
DeleteUrlCacheEntry StrPtr(Url) 'キャッシュクリア
Ret = URLDownloadToFile(0, StrPtr(Url), StrPtr(SaveFilePath), 0, 0)
DownloadFile = Ret
End Function
Sub ImportFiles(ByVal FilePath As String)
Dim Fname As String
Dim FNo As Integer
Dim TextLine As String
Dim i As Long
Dim Ar As Variant
ShCount = ShCount + 1
With NewBook
If ShCount > .Worksheets.Count Then
.Worksheets.Add After:=.Sheets(.Sheets.Count)
Else
.Worksheets(ShCount).Activate
End If
End With
ActiveSheet.Name = _
Replace(Mid$(FilePath, InStrRev(FilePath, "\") + 1), ".csv", "", , , vbTextCompare)
i = 1
Fname = FilePath
FNo = FreeFile()
Open Fname For Input As #FNo
Do While Not EOF(FNo)
Line Input #FNo, TextLine
Ar = Split(TextLine, ",")
Cells(i, 1).Resize(, UBound(Ar) + 1).Value = Ar
i = i + 1
Loop
Close #FNo
End Sub
WindFaller様
早速にありがとうございました。いろんな方法を教えていただき、解決しました。
>そのサイトの、CSVダウンロードのポートを利用してみました。
この方法も考えたのですが全く方法がわからず、途方に暮れていました。
感謝 感謝です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel VBAからAccessマクロを実...
-
マクロ実行時、ユーザーフォー...
-
ExcelのVBA。public変数の値が...
-
ExcelVBAでPDFを閉じるソース
-
エクセルに張り付けた写真のフ...
-
アクセス マクロ クリップボ...
-
ダブルクリックで貼り付けた画...
-
TERA TERMを隠す方法
-
ソース内の行末に\\
-
複数ページあるPDFファイル内の...
-
VBA アドインについて お詳しい...
-
マクロで空白セルを詰めて別シ...
-
エクセルのマクロをセルの値に...
-
MSアクセスのマクロ・モジュー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
ExcelVBAでPDFを閉じるソース
-
エクセルに張り付けた写真のフ...
-
エクセルで別のセルにあるふり...
-
TERA TERMを隠す方法
-
2つのマクロでチェックボックス...
-
マクロ実行時、ユーザーフォー...
-
【マクロ】1つのマクロの中に...
-
ピボットテーブルでの毎回可変...
-
特定文字のある行の前に空白行...
-
エクセルのマクロについて教え...
-
wordを起動した際に特定のペー...
おすすめ情報