No.3ベストアンサー
- 回答日時:
基本的にはありえない日付でいいはずです。
QueryTablesをaddし続けてるので以前のものをDeleteするように修正しましたのがsample1です。
ただ、sample1では一度エラーを起こすと次からの読み込みができない症状が起きています。
回避方法を探していますがわからない状態です。
同様の症状が起きるようなら、QueryTablesを使わないSample2を試してみてください。
Sub sample1()
Dim url As String
Dim sDate As String
Dim eDate As String
Dim Symbol As String
Dim i As Integer
sDate = "1000/1/1" '開始日
eDate = "2010/12/31" '終了日
Symbol = "IBM" '銘柄
url = "http://ichart.finance.yahoo.com/table.csv?g=d&ig …
url = url & "&s=" & Symbol
url = url & "&a=" & Month(sDate) - 1 & "&b=" & Day(sDate) & "&c=" & Year(sDate)
url = url & "&d=" & Month(eDate) - 1 & "&e=" & Day(eDate) & "&f=" & Year(eDate)
'データ読み込み
With ActiveSheet
.Cells.Delete
For i = 1 To .QueryTables.Count
.QueryTables(1).Delete
Next
With .QueryTables.Add(Connection:="TEXT;" & url, Destination:=.Range("A1"))
.TextFileCommaDelimiter = True
.Refresh
End With
End With
End Sub
Sub sample2()
Dim url As String
Dim sDate As String
Dim eDate As String
Dim Symbol As String
sDate = "1000/1/1" '開始日
eDate = "2010/12/31" '終了日
Symbol = "IBM" '銘柄
url = "http://ichart.finance.yahoo.com/table.csv?g=d&ig …
url = url & "&s=" & Symbol
url = url & "&a=" & Month(sDate) - 1 & "&b=" & Day(sDate) & "&c=" & Year(sDate)
url = url & "&d=" & Month(eDate) - 1 & "&e=" & Day(eDate) & "&f=" & Year(eDate)
'データ読み込み
Dim response As String
Dim xml As Object
Set xml = CreateObject("Microsoft.XMLHTTP")
'Set xml = CreateObject("MSXML2.XMLHTTP") 上記でエラーの場合
With xml
.Open "get", url, False
.send
If (.Status >= 200) And (.Status < 300) Then
response = StrConv(.responseBody, vbUnicode)
Else
MsgBox "読み込みエラー:(" & .Status & ")" & .statustext
End If
End With
Set xml = Nothing
'シートに書き込み
Dim i As Long
Dim rowData() As String
Dim columnData() As String
rowData = Split(response, vbLf)
With ActiveSheet
.Cells.Delete
For i = 0 To UBound(rowData)
columnData = Split(rowData(i), ",")
If UBound(columnData) >= 0 Then
.Range(.Cells(i + 1, 1), .Cells(i + 1, UBound(columnData) + 1)) = columnData
End If
Next
End With
End Sub
この回答への補足
すみません、お礼を言った後にまたまた質問が、、、、^^;
教えていただいたsample2でデータを取り、他のエクセルにそのデータをコピペし、そのデータを元に関数を組んでいるのですが、関数の解が#DIV/0!となり、どうも入力されていないといった認識を、エクセルはしているように見受けられます。
コピペするとき”形式を選択しての貼り付け”で色々と試したり、セルの書式設定をいじったりとしたのですが、データとして認識されませんでした。
どのようの方法であればデータ認識されるのでしょうか???
ありがとうございます!
ありえない日付で問題ありませんでした。
sample1、sample2どちらも問題なく動作しました。
手作業より数十倍作業が捗ります。
感謝です<(_ _)>
No.4
- 回答日時:
手動またはsample1で取得した場合は大丈夫でしょうか?
sample2のみダメな場合は、データを比較してみてください。
手動またはsample1で取得した場合は大丈夫でした。
sample1でマクロ構築しました。
色々と回答頂きまして、ありがとうございました。
とても助かりました<(_ _)>
No.2
- 回答日時:
例えば
http://finance.yahoo.com/q/hp?s=IBM
で[SET DATE RANGE]の日付を入力して[Download To Spreadsheet]するデータを
[データ][外部データの取り込み][テキストファイルのインポート]で現在のシートに取り込む場合なら以下ではどうでしょうか?
Sub sample()
Dim url As String
Dim sDate As String
Dim eDate As String
Dim Symbol As String
'パラメータ作成(月は-1の値を要求するみたい)
sDate = "2008/8/11" '開始日
eDate = "2008/8/20" '終了日
Symbol = "IBM" '銘柄
url = "http://ichart.finance.yahoo.com/table.csv?g=d&ig …
url = url & "&s=" & Symbol
url = url & "&a=" & Month(sDate) - 1 & "&b=" & Day(sDate) & "&c=" & Year(sDate)
url = url & "&d=" & Month(eDate) - 1 & "&e=" & Day(eDate) & "&f=" & Year(eDate)
'データ読み込み
With ActiveSheet
.Cells.Delete
With .QueryTables.Add(Connection:="TEXT;" & url, Destination:=.Range("A1"))
.TextFileCommaDelimiter = True
.Refresh
End With
'.Cells.Copy Destination:=Sheets("Sheet2").Range("A1") 'ここらで他のシートにコピーする
End With
End Sub
この回答への補足
ありがとうございます!!
うまく取り込めました!!
後もう一点だけお知恵を貸して下さい<(_ _)>
sDataをその銘柄の最長(MAX)となる日付に、eDateをVBAを走らせる日に自動で設定するためには、どのようにVBAを書けばうまく出来るのでしょうか?
IBMであれば、1962/1/2から今日までのデータが最長
DELLだと1988/8/17から今日までが最長
手動でCSVを落としてくる場合は、1950/1/1と適当にかなり昔の日付を入れると最長が取れるので、試しにVBAの式にも固定値をはめてみましたがエラーとなってしまいました。
やはりスピンボタンを使って、手動で設定するしかないのでしょうか?
マクロを走らせたら、今日から最長のデータを取得する、完全自動化になるのを目指しております。
No.1
- 回答日時:
質問事項が複数あるようですので、一つに絞って質問した方が良いように思います
”USA YAHOO FINANCE”の個別銘柄を取り込んだ事がないのでわかりませんが、ページ上にボタンがあってそのボタンを押すと、CSVファイルがどこかに保存されるのでしょうか?
そうであれば、その保存されたファイルをエクセルのマクロで自動的に取り込む動作となります
ページ上のボタンを自動的に押す動作は、エクセルからIEを制御することになります
エクセルからIEを操作する方法は幾つかありますが、もっとも簡単なのはSendKeyで、キーボードの操作をエクセルから行う方法があります
ただし、この方法はIEの表示を確認する必要性などから、実装は簡単ですが、制御が難しいと言う欠点があります
他には、IEをObjectとして制御する方法がありますが、結構な歯ごたえなので、ここのみで説明するのが難しいので、WEBを参考にしてください
http://www.ken3.org/cgi-bin/group/vba_ie.asp
どこかに保存されたCSVファイルの取り込みも幾つか方法があります
これも簡単な方法から、ちょっとメンドクサイ方法までさまざまですが、一般的な方法としては、Open ステートメントを使ってLineinputなどで取り込みます
エクセルのヘルプにある動作なので、こちらもWEBにたくさん方法が載っています
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
変わった所だと、Workbooks.Open を使ってCSVファイルを開いて(自動的にエクセルで開かれる)、開いたエクセルからシートをコピーする
なんて方法もあります
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) マクロ作成初心者です。CSVファイルの日付データについて 3 2022/12/14 06:02
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netのADOってなんですか?
-
Thunderbirdのインポートの処理...
-
SQL Server にファイルを登録、...
-
BINファイル破損データの復元方法
-
AS400へAccessから接続す...
-
GerberデータからBmpデータへの...
-
エクセルから、パワーポイント...
-
キャッシュとバッファの違いは?
-
Accessのレポートで「縦書き」...
-
型 varchar から型 numeric へ...
-
Accessで入力したデータ...
-
希望の位置へフィールドを追加...
-
データベースの最適化をマクロ...
-
SQLて何ですか!
-
エクセルの重複データの曖昧検索
-
SQLを使いこなしている人が ETL...
-
ハイフン無しの電話番号データ...
-
リスト形式の表とデータベース...
-
Access Oracle環境の切替方法
-
バッファプールって?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュとバッファの違いは?
-
VB.netのADOってなんですか?
-
Thunderbirdのインポートの処理...
-
SQL Server にファイルを登録、...
-
エクセルから、パワーポイント...
-
スタライズとは、どういう意味...
-
値がこの列の整合性制約に違反...
-
UNIX時間をEXCEL上で日付・時間...
-
Access 外部データ インポー...
-
CSVファイルの重複チェック
-
LVMでHDDが壊れた時の対応
-
C#でint型をIntPtr型に変換した...
-
EXCELの最大データ数
-
エクセルでのテプララベル作成
-
Perlで、「が」を、「...
-
VBA 連続する名前ごとに集計
-
Accessでタブ区切りのテキスト...
-
VBでXMLデータをMS-ACCESS2000...
-
エクセルのマクロ
-
REST APIでkintoneのレコード追...
おすすめ情報