2. 「t11-今日の値動き」を改善して「単独決算情報」を取得する方法
(2/20(Wed) 22:11 けんさんからの質問)
さっそく 本を購入させていただきました。
そこで思ったのですが、1シート1社の決算情報 をダウンロードするのではなく、表形式にして以下のようにまとめて一括ダウンロードすることもマクロでできますでしょうか?
例
銘柄コード 社名 決算期 売上高
9994 (株)やまや 2007年3月期 69,992百万円
9995 (株)イーストン 2007年3月期 47,784百万円
できれば、、サンプルコードいただけると幸いです・・・m(__)mよろしくお願いします。
<回答>
本を購入して頂いたとのことで有難う御座います。こちらも誠意を持って対応します。
以下が単独決算情報ダウンロードソースですが、問題点・不明点がありましたら何時でもメールを下さい。
(1)概略
・「t11-今日の値動き」を改善して「単独決算情報」を取得するマクロを説明します。ダイアログも表示しますがこれはプログレス表示用であり非表示でも実行上は問題ない(このマクロではURLを変更しておりボタン等実行できません。プログレスとして使用する場合は不要部は削除して下さい)。
・マクロスタートは、メニューの「ツール」「マクロ」「マクロ」から「単独決算情報取得」を指定して実行します。
なお、下記を「ThisWorkbook」マクロシートへ追加すればメニューの「t11-今日の値動き」へ「単独決算情報取得」が追加されるので、この場合はメニュー項目から実行できます(設定は37p 事例1-1参照)。
.Controls.Add Type:=msoControlButton
With .Controls(2)
.Caption = "単独決算情報取得"
.OnAction = "単独決算情報取得"
End With
・Module1への追加変更は下記1件です。
Public Const teblsua As Integer = 14 をこのマクロでは 10 にする)
なお、「列幅調整」や「並べ替えの為の数字化」等はないのでこれは自動記録でもマクロ化できるので必要な方は適当に追加して下さい。
・下図が作成した単独決算情報例(71列まであります)
(2)Module2へ変数宣言の追加
Module2シートの最上段に変数定数の宣言のがありますが、そこに以下の1行変更し3行を追加。
Public Const urly As String = "URL;http://profile.yahoo.co.jp/independent/"
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:D24").Select
Selection.ClearContents
Range("A1").Select
For Each FieldName In ActiveWorkbook.Names
FieldName.Delete
Next FieldName
'取得
urlk = urly & meino(0, i + 1)
プログレス
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
For ia = 2 To 24
da(ia) = Cells(ia, 1)
Next
'表題の貼り付け
Worksheets(sheetn2).Select
For j = 1 To 3
For ia = 2 To 24
If j = 2 Then
Cells(1, ia + 24) = "(2前)" & da(ia)
ElseIf j = 3 Then
Cells(1, ia + 47) = "(3前)" & da(ia)
Else
Cells(1, ia + 1) = "(前期)" & da(ia)
End If
Next
Next
End If
ReDim da(72)
Worksheets(sheetn1).Select
n = 3
For j = 1 To 3
For ia = 2 To 24
da(n) = Cells(ia, j + 1)
n = n + 1
Next
Next
'貼り付け
Worksheets(sheetn2).Select
For ia = 3 To 72
Cells(i + 1, ia) = da(ia)
Next
End Sub
【ホ−ム】