teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/06/01 02:18

投稿

jawa
jawa

スコア3020

answer CHANGED
@@ -11,4 +11,109 @@
11
11
 
12
12
  提示のソースコードやコード中のURLから解析すればアドバイスもできるかもしれませんが、まずは質問者さんの言葉でもう少し補足をお願いしたいです。
13
13
 
14
- よろしくお願いします。
14
+ よろしくお願いします。
15
+
16
+
17
+ ---
18
+ 返信コメントを受けて追記
19
+ ---
20
+ 単位というのは、データを取得できる単位のことです。
21
+
22
+ データを取得するために、URLとして会場番号・開始日・日付・レースNOが必要ということなので、これが単位ですね。
23
+ 取得できるデータも、指定した会場番号・開始日・日付・レースNOに関する情報が取れるはずです。
24
+ (この指定方法だと複数会場とか複数日付を同時に取得することはできないので、会場番号・開始日・日付・レースNO単位の取得、というわけです。)
25
+
26
+
27
+ 内容というのは、取得できるデータの内容です。そのままですね(^-^;
28
+ おそらくそのレースに出場する人とか、スタート位置とか、モーターの情報とかが取得できているのでしょうが、ソースを見る限り今回はあまり触れなくていいのかもしれません。
29
+
30
+ ---
31
+ >どうやって開始日を自動で検索しているのか
32
+ tnd-.-bさんも詳しく説明してくれていますが、Weekdayは指定した日付が何番目の曜日かを返す関数です。
33
+ 今回は火曜日を基準に指定しているので、火曜日が1、水が2、木が3・・・月が7となります。
34
+
35
+ これを踏まえて、
36
+ ```
37
+ Day_初日 = Day_日付 - Weekday(Day_日付, vbTuesday) + 1
38
+ ```
39
+ の式は Day_初日 には Day_日付の直前の火曜日を返す式ということになります。
40
+
41
+ 私もボートには詳しくありませんが、開始日に規則性がないのであれば都度手入力してあげるか、別途カレンダーデータを用意してあげて検索することになると思います。
42
+ 基本的に会場毎に基準となる曜日でもあれば(江戸川は火曜日、浜松は月曜日など)、コードで計算できるのですが。
43
+
44
+ ---
45
+ 以下、ここまでの情報からやりたそうなことを形にしてみました。動作未確認ですが参考までに。
46
+ ```
47
+ Sub データ抽出(Day_日付 As Date, Lng_場 As Long)
48
+
49
+ Dim Str_アドレス As String
50
+ Dim Day_初日 As Date
51
+
52
+ '会場ごとに基準の曜日を変更
53
+ Dim Week_基準 As VbDayOfWeek
54
+
55
+ Select Case Lng_場
56
+ Case 3
57
+ '江戸川:火曜
58
+ Week_基準 = vbTuesday
59
+
60
+ '(ここに他会場の基準曜日も設定する)
61
+
62
+ Case Else
63
+ 'どれにも該当しなければ日曜を基準
64
+ Week_基準 = vbSunday
65
+
66
+ End Select
67
+
68
+ Day_初日 = Day_日付 - Weekday(Day_日付, Week_基準) + 1
69
+
70
+ Sheet1.Select
71
+ Cells.Delete Shift:=xlUp
72
+
73
+ 'レース番号は引数取得ではなくループ処理にする
74
+ For Lng_レース = 1 To 12
75
+
76
+ Str_アドレス = "FINDER;http://app.boatrace.jp/race/" & Format(Lng_場, "00")
77
+ Str_アドレス = Str_アドレス & "_" & Format(Day_初日, "yyyymmdd")
78
+ Str_アドレス = Str_アドレス & ".php?day=" & Format(Day_日付, "yyyymmdd")
79
+ Str_アドレス = Str_アドレス & "&jyo=" & Format(Lng_場, "00")
80
+ Str_アドレス = Str_アドレス & "&rno=" & Format(Lng_レース, "00") & "&type=program"
81
+
82
+ 'Dim str_列 As String
83
+ 'If Lng_レース < 8 Then
84
+ ' str_列 = Chr(Asc("A") + (Lng_レース - 1) * 4)
85
+ 'Else
86
+ ' str_列 = "A" & Chr(Asc("A") + ((Lng_レース - 1) * 4) - 26)
87
+ 'End If
88
+
89
+ Dim Lng_列 As Long
90
+ Lng_列 = ((Lng_レース - 1) * 4) + 1
91
+
92
+ Dim rng_出力 As Range
93
+ Set rng_出力 = Range(Cells(1, Lng_列))
94
+
95
+ With ActiveSheet.QueryTables.Add(Connection:=Str_アドレス, Destination:=rng_出力)
96
+ .Name = "Data"
97
+ .FieldNames = True
98
+ .RowNumbers = False
99
+ .FillAdjacentFormulas = False
100
+ .PreserveFormatting = False
101
+ .RefreshOnFileOpen = False
102
+ .BackgroundQuery = False
103
+ .RefreshStyle = xlInsertDeleteCells
104
+ .SavePassword = False
105
+ .SaveData = True
106
+ .AdjustColumnWidth = True
107
+ .RefreshPeriod = 0
108
+ .WebSelectionType = xlEntirePage
109
+ .WebFormatting = xlWebFormattingAll
110
+ .WebPreFormattedTextToColumns = True
111
+ .WebConsecutiveDelimitersAsOne = True
112
+ .WebSingleBlockTextImport = False
113
+ .WebDisableDateRecognition = False
114
+ .WebDisableRedirections = False
115
+ .Refresh BackgroundQuery:=False
116
+ End With
117
+ Next
118
+ End Sub
119
+ ```