質問: False .Refresh BackgroundQuery:=False End With Next End Sub ### 試したこと jawaさんが書いてくださったマクロを元に初日をC3セルから取り込むようにしようとしたのですが、勝手にマクロを書き換えたせいか、できなくなりました。 ### 補足情報(言語/FW/ツール等のバージョンなど) EXCEL 2010 を使ってます。
回答: 質問する上でいくつか大事なことが端折られています。 まず、 >いろいろ試したがVBA初心者なので全滅でした。 「いろいろ」といわれても何をどれほどやったのか伝わりません。ここ大事です。 さらに提示のソースコードは「人に作ってもらったもの」で「その人には修正を頼めないからここで教えてほしい。」のでは、自分では何もせず丸投げしていると取られても仕方ありません。 たぶん自分でも努力されているのでしょうけど、その説明を省いてしまってはこの結果になります。 次に、やりたいことの細かい部分は書いてくれているのに、その背景が説明されていません。 まずベースとなるデータはどんな内容ですか?(どういう単位で取得でき、どんな内容が含まれていますか?) 困っていることもしっかり書いてくれていますが、この説明がないので「今日のデータ」とか「初日が」とか言われてもさっぱり伝わりません。 提示のソースコードやコード中のURLから解析すればアドバイスもできるかもしれませんが、まずは質問者さんの言葉でもう少し補足をお願いしたいです。 よろしくお願いします。 返信コメントを受けて追記 単位というのは、データを取得できる単位のことです。 データを取得するために、URLとして会場番号・開始日・日付・レースNOが必要ということなので、これが単位ですね。 取得できるデータも、指定した会場番号・開始日・日付・レースNOに関する情報が取れるはずです。 (この指定方法だと複数会場とか複数日付を同時に取得することはできないので、会場番号・開始日・日付・レースNO単位の取得、というわけです。) 内容というのは、取得できるデータの内容です。そのままですね(^-^; おそらくそのレースに出場する人とか、スタート位置とか、モーターの情報とかが取得できているのでしょうが、ソースを見る限り今回はあまり触れなくていいのかもしれません。 >どうやって開始日を自動で検索しているのか tnd-.-bさんも詳しく説明してくれていますが、Weekdayは指定した日付が何番目の曜日かを返す関数です。 今回は火曜日を基準に指定しているので、火曜日が1、水が2、木が3・・・月が7となります。 これを踏まえて、 ``` Day_初日 = Day_日付 - Weekday(Day_日付, vbTuesday) + 1 ``` の式は Day_初日 には Day_日付の直前の火曜日を返す式ということになります。 私もボートには詳しくありませんが、開始日に規則性がないのであれば都度手入力してあげるか、別途カレンダーデータを用意してあげて検索することになると思います。 基本的に会場毎に基準となる曜日でもあれば(江戸川は火曜日、浜松は月曜日など)、コードで計算できるのですが。 以下、ここまでの情報からやりたそうなことを形にしてみました。動作未確認ですが参考までに。 ``` Sub データ抽出(Day_日付 As Date, Lng_場 As Long) Dim Str_アドレス As String Dim Day_初日 As Date '会場ごとに基準の曜日を変更 Dim Week_基準 As VbDayOfWeek Select Case Lng_場 Case 3 '江戸川:火曜 Week_基準 = vbTuesday '(ここに他会場の基準曜日も設定する) Case Else 'どれにも該当しなければ日曜を基準 Week_基準 = vbSunday End Select Day_初日 = Day_日付 - Weekday(Day_日付, Week_基準) + 1 Sheet1.Select Cells.Delete Shift:=xlUp 'レース番号は引数取得ではなくループ処理にする For Lng_レース = 1 To 12 Str_アドレス = "FINDER;http://app.boatrace.jp/race/" & Format(Lng_場, "00") Str_アドレス = Str_アドレス & "_" & Format(Day_初日, "yyyymmdd") Str_アドレス = Str_アドレス & ".php?day=" & Format(Day_日付, "yyyymmdd") Str_アドレス = Str_アドレス & "&jyo=" & Format(Lng_場, "00") Str_アドレス = Str_アドレス & "&rno=" & Format(Lng_レース, "00") & "&type=program" 'Dim str_列 As String 'If Lng_レース < 8 Then ' str_列 = Chr(Asc("A") + (Lng_レース - 1) * 4) 'Else ' str_列 = "A" & Chr(Asc("A") + ((Lng_レース - 1) * 4) - 26) 'End If Dim Lng_列 As Long Lng_列 = ((Lng_レース - 1) * 4) + 1 Dim rng_出力 As Range Set rng_出力 = Range(Cells(1, Lng_列)) With ActiveSheet.QueryTables.Add(Connection:=Str_アドレス, Destination:=rng_出力) .Name = "Data" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshOnFileOpen = False .BackgroundQuery = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingAll .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Next End Sub ```