1.「t11-今日の値動き」を改善して「詳細情報」を取得する方法
(2/19(Tue) 21:23 けんさんからの質問)
http://profile.yahoo.co.jp/independent/9997
上記URLにあるようにyahooファイナスに掲載されている全上場企業の
単独決算情報を一括でエクセルにおとしたいのですが、どのようなマクロを組めばよろしいでしょうか?
<回答>
情報は1銘柄1ページであり、KIkabu(G)に「詳細情報作成」の項目がありますが、これと同じようなマクロを組めばよいと思います。
なお、取得方法のみであれば最近出版した本の「PART11:今日の値動き表の作成」と同じです。ただし、詳細情報の場合は取得したデータを1銘柄ずつ別シートに貼り付けてまとめる操作が必要です。
(1)概略
・「t11-今日の値動き」を改善して「詳細情報」を取得するマクロを説明しますが、ダイアログの改善も行うと初心者には判りづらいと思うので、詳細情報を取得してリストシートへ貼り付ける方法を説明します。
・マクロスタートは、メニューの「ツール」「マクロ」「マクロ」から「詳細情報取得」を指定して実行します。
なお、下記を「ThisWorkbook」マクロシートへ追加すればメニューの「t11-今日の値動き」へ「詳細情報取得」が追加されるのでこの場合はメニュー項目から実行できます(37p 事例1-1参照)。
.Controls.Add Type:=msoControlButton
With .Controls(2)
.Caption = "詳細情報取得"
.OnAction = "詳細情報取得"
End With
・Module1への追加変更は特にありません。(Public Const teblsua As Integer = 14 は最近 13 に変更になっている)
なお、今回追加の詳細情報取得には「数字化」や「列幅調整」等はないので必要な方は適当に追加して下さい。
・下図が作成した詳細情報例
(2)Module2へ変数宣言の追加
Module2シートの最上段に変数定数の宣言のがありますが、そこに以下の3行を追加
Dim hazime As Integer 'はじめ1
Dim sheetn1 As String '詳細シート名1
Dim sheetn2 As String '詳細シート名2
(3)Module2の詳細情報の正常取得の確認を追加
tabel確認プロシージャへ以下の赤色部を追加(A2セルに「取引値」で正常取得)
Sub tabel確認()
If Cells(cend2, 1) = "コード" Then
errtab = 0
Exit Sub
End If
'詳細情報用に追加
If Cells(2, 1) = "取引値" Then
errtab = 0
Exit Sub
End If
If errtab > 9 Then
(4)Module2へ詳細情報取得プロシージャ追加
Module2へ以下のプロシージャを貼り付けて下さい(使用している変数名の関係でModule2へ貼付のこと)。
Sub 詳細情報取得()
Call 銘柄リスト作成
Application.ScreenUpdating = True
Call ダイアログ 'プログレス表示用
Worksheets("リスト").Select
Call 銘柄を配列へ
Call kabu1c
End Sub
'-----------------------------------------------------------------------
Sub kabu1c()
shurui = "&d=t&k=c3&h=on&z=m"
sheetn1 = "詳細仮"
sheetn2 = "詳細情報"
pgmsg = "詳細情報取得中"
Call 詳細取得
Call kabu9
End Sub
'-----------------------------------------------------------------------
Sub 詳細取得()
Application.ScreenUpdating = False
cend1 = meino(0, 0)
cend2 = 1
'シート詳細情報があったら削除
For Each sheet_name In Worksheets
If sheet_name.Name = (sheetn2) Then
Worksheets(sheetn2).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If
Next
'シート名変更
Sheets("リスト").Name = sheetn2
Sheets.Add.Name = sheetn1
'
teblsu = teblsua
cnt = 0: urlka = "": pg = 0: pgcar = "&h8b0000"
hazime = 0
For i = 1 To cend1 - 1
Worksheets(sheetn1).Select
'過去データ削除
Range("A1:H10").Select
Selection.ClearContents
Range("A1").Select
For Each FieldName In ActiveWorkbook.Names
FieldName.Delete
Next FieldName
urlka = urly & meino(0, i + 1)
'取得
urlk = urlka & shurui
urlka = ""
プログレス
Call ダウンロード
Call 貼り付け
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Next
'仮データのブックを閉じる
Worksheets(sheetn1).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub
'-----------------------------------------------------------------------
Sub 貼り付け()
ReDim da(24)
If hazime = 0 Then
hazime = 1
n = 1
For ia = 2 To 9 Step 2
For j = 1 To 6
da(n) = Cells(ia, j)
n = n + 1
Next
Next
Cells(2, 1) = ""
'表題の貼り付け
Worksheets(sheetn2).Select
For ia = 1 To 24
Cells(1, ia + 2) = da(ia)
Next
End If
ReDim da(24)
Worksheets(sheetn1).Select
da(0) = Cells(1, 1)
n = 1
For ia = 3 To 9 Step 2
For j = 1 To 6
da(n) = Cells(ia, j)
n = n + 1
Next
Next
'貼り付け
Worksheets(sheetn2).Select
For ia = 0 To 24
Cells(i + 1, ia + 2) = da(ia)
Next
End Sub
【ホ−ム】