>ただ、繰り返し処理に入る前に、クエリが所定の位置 > (上記では、range("X1")にクエリが存在しているかを > 確認するとしたらどのようにするのがスマートでしょう > か? これは、range("X1")にクエリが存在...というより、 そのwsにQueryTablesがあるかどうかで判定すれば充分だと思います。 If ws.QueryTables.Count = 0 Then ...など。
Dim ws As Worksheet Dim code As String Dim k As String Dim n As Long Dim L As Long Dim i As Long
Set ws = ActiveSheet 'Worksheets("Home") Application.ScreenUpdating = False On Error Resume Next ws.ShowAllData On Error GoTo 0
n = ws.Range("C20000").End(xlUp).Row L = ws.Range("D20000").End(xlUp).Row + 1 If ws.QueryTables.Count = 0 Then With ws.QueryTables.Add(Connection:="URL
;http://quote.yahoo.co.jp/q?s=2929&d=v1", _ Destination:=ws.Range("X1")) .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "13" .Refresh BackgroundQuery:=False End With End If For i = L To n code = ws.Range("C" & i).Value With ws.QueryTables(1) .Connection = "URL
;http://quote.yahoo.co.jp/q?s=" & code & "&d=v1" .Refresh BackgroundQuery:=False End With k = ws.Range("X1").Offset(1, 2).Value k = Replace(k, "アップ", "") k = Replace(k, "ダウン", "") k = Replace(k, "変わらず", "") k = Replace(k, "(株)", "") ws.Range("D" & i).Value = k If ws.Range("Q" & i) = "" Then ws.Range("O" & i).Value = ws.Range("X1").Offset(1, 4).Value Next Application.ScreenUpdating = True
Set ws = Nothing
この記事にはVBAのコードが含まれています。
緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他
|