2017-07-14 88 views
0

我對編程非常陌生,但一直在嘗試學習。我遇到了一個問題,我試圖將股票價格從雅虎金融中提取出來,但我需要它跳過第4,6,20,34,41行。這些單元格在C列中也是空白的。我曾嘗試使用if語句,其中 如果ws.Range(「K6,K20,K34,K41」)。value =「」然後退出子
但是,這使得整個程序沒有運行。 另外,當它運行時,它將創建一個新列,其中前面的「K」列是,而不是隻覆蓋K,這正是我正在嘗試做的。VBA - 跳過行並覆蓋該行

謝謝你的幫助!對不起,如果這個問題似乎令人困惑,我在這裏澄清任何問題! :)

Sub BtnRefresh() 

Dim ws As Worksheet 
Dim qt As QueryTable 
Dim URL As String  
Dim Symbol As String 
Dim i As Integer 
Dim Last As Integer 
Set ws = Worksheets("Current Portfolio") 



Last = ws.Range("C100").End(xlUp).Row 

For i = 1 To Last 
    Symbol = Symbol & ws.Range("C" & i).Value & "+" 

Next i 


URL = "http://download.finance.yahoo.com/d/quotes.csv?s=" & Symbol & "&f=l1" 

Set qt = ws.QueryTables.Add(_ 
    Connection:="URL;" & URL, _ 
    Destination:=Range("K5")) 
     qt.BackgroundQuery = True 
     qt.SaveData = True 

     qt.Refresh BackgroundQuery:=False 
     qt.RefreshStyle = xlOverwriteCells 



End Sub 

回答

0

你可以跳過它們,或者你可以改變的空白爲零,如:

Last = ws.Range("C100").End(xlUp).Row 

For i = 1 To Last 
    If Cells(i,3).Value="" 
     Cells(i,3).Value="0" 
     Else 
     End If 

    Symbol = Symbol & ws.Range("C" & i).Value & "+" 

Next i 

Range("C4,C6,C20,C34,C41").ClearContents 

這可以讓你保持你的符號公式原樣。

C中的空白單元格是否需要保持空白?如果是這樣,我可以重新工作。

編輯:重新確定這些單元格的內容已被刪除。如果你不需要,就不要將該行添加到.ClearContents。

+0

嘿!感謝您的迴應,這是一種有效的工作方式,但現在我正在將「N/A」粘貼到「K4:K7」以及K9,K23,K37中 –

+0

嘿!這在我爲'我= ** 5 **到最後'謝謝你! –

+0

你碰巧知道如何擺脫出現在細胞中的N/A?我嘗試了'Cells.Replace'N/A「,」'',但現在每次運行宏時,整個工作表都會高亮顯示。謝謝! –

0

這應該適用於跳過步驟。

Sub BtnRefresh() 

    Dim ws As Worksheet 
    Dim qt As QueryTable 
    Dim URL As String 
    Dim Symbol As String 
    Dim i As Integer 
    Dim Last As Integer 
    Set ws = Worksheets("Current Portfolio") 



    Last = ws.Range("C100").End(xlUp).Row 

    For i = 1 To Last 

     If i = 4 Or i = 6 Or i = 20 Or i = 34 Then 
      'do nothing! 
     Else 
     Symbol = Symbol & ws.Range("C" & i).Value & "+" 

     End If 
    Next i 


    URL = "http://download.finance.yahoo.com/d/quotes.csv?s=" & Symbol & "&f=l1" 

    Set qt = ws.QueryTables.Add(_ 
     Connection:="URL;" & URL, _ 
     Destination:=Range("K5")) 
      qt.BackgroundQuery = True 
      qt.SaveData = True 

      qt.Refresh BackgroundQuery:=False 
      qt.RefreshStyle = xlOverwriteCells 



    End Sub 
+0

嘿!感謝你的迴應,但我仍然遇到同樣的問題,它仍然粘貼在這些單元格內。 –

+0

我明白了。由於您基本上正在進行復制/粘貼,因此這有點複雜。爲了簡單起見,爲什麼不先在Excel中的其他地方寫表你的表格(隱藏表格或其他東西),然後開始使用類似於我上面的示例的方式將值或公式寫入到你想要的單元格中。有更有效的方法來做到這一點,但這可能會幫助您獲得至少可行的方法,然後您可以對其進行優化。 – PGCodeRider

+0

感謝您的建議,我一定會這麼做的!我是複製和粘貼的,所以我可以更快地回覆這些反應,但我會花更多時間真正查看這些答案並嘗試改進它們。 –

0

對於一個易於維護的排除列表爲基礎的方法,以取代你FOR.. NEXT循環:

exclude = "4/6/20/34" 

For i = 1 To Last 
    If InStr(1, "/" & exclude & "/", "/" & Trim(Str(i)) & "/") = 0 Then Symbol = Symbol & ws.Range("C" & i).Value & "+" 
Next 

至於塔K的問題,如果你不能只是發出一個Refresh爲挑數據增長的循環可能改變,那麼如何只清除表:

Range("K:K").ClearContents ' or ("K:N") or whatever depending on width of the table? 
+0

嘿CLR,感謝您的回覆,但它仍然沒有跳過細胞。 –