2016-07-26 60 views
1

我有一個VBA腳本,可以將數據從一張表複製到另一張。將複製的數據放入公式中,並將計算的數量複製回原始工作表。我試圖獲得它,以便VBA腳本爲每一行都做到這一點。我有1000行數據。Excel VBA - 讓VBA腳本遍歷行

Sub Rating() 
Dim ws1 As Worksheet, ws2 As Worksheet 
Set ws1 = Worksheets("SoapUI - Single") 
Set ws2 = Worksheets("STpremcalc") 

     ws2.Range("B3").Value = ws1.Range("B3").Value 

     ws2.Range("B4").Value = ws1.Range("C3").Value 

     ws2.Range("B5").Value = ws1.Range("D3").Value 

     ws2.Range("B6").Value = ws1.Range("E3").Value 

     ws2.Range("E3").Value = ws1.Range("F3").Value 

     ws2.Range("E4").Value = ws1.Range("G3").Value 

     ws2.Range("E5").Value = ws1.Range("H3").Value 

     ws2.Range("E6").Value = ws1.Range("I3").Value 

     ws2.Range("G3").Value = ws1.Range("J3").Value 

     ws2.Range("G4").Value = ws1.Range("K3").Value 

     ws2.Range("G5").Value = ws1.Range("L3").Value 

     ws2.Range("J3").Value = ws1.Range("N3").Value 

     ws2.Range("J4").Value = ws1.Range("O3").Value 

     ws2.Range("J6").Value = ws1.Range("P3").Value 

     ws2.Range("B9").Value = ws1.Range("Q3").Value 

     ws2.Range("C9").Value = ws1.Range("R3").Value 

     ws2.Range("D9").Value = ws1.Range("S3").Value 

     ws2.Range("E9").Value = ws1.Range("T3").Value 

     ws2.Range("B10").Value = ws1.Range("U3").Value 

     ws2.Range("C10").Value = ws1.Range("V3").Value 

     ws2.Range("D10").Value = ws1.Range("W3").Value 

     ws2.Range("E10").Value = ws1.Range("X3").Value 

     ws2.Range("B11").Value = ws1.Range("Y3").Value 

     ws2.Range("C11").Value = ws1.Range("Z3").Value 

     ws2.Range("D11").Value = ws1.Range("AA3").Value 

     ws2.Range("E11").Value = ws1.Range("AB3").Value 

     ws1.Range("AW3").Value = ws2.Range("M4").Value 

     ws1.Range("AX3").Value = ws2.Range("M5").Value 

     ws1.Range("AY3").Value = ws2.Range("M6").Value 

End Sub 

我也明白,這可能是執行此任務非常低效的方式,但我不知道如何更好的IT。所以如果你有辦法讓這個更有效率,那將不勝感激。

編輯:更新的代碼爲每@ user3598756建議

+1

問題是你粘貼的範圍似乎沒有任何移動到下一個位置的模式,因此一個循環需要一個** lot **的if/else類型語法,可能同樣效率低下。 –

+0

唯一會改變的是複製數據的行號。 (「B」和i).Copy' '表格(「STpremcalc」)。範圍(「B3」)。PasteSpecial粘貼:= xlValues' – Ross

回答

3

我不是複製/粘貼過程的粉絲,但如果你必須使用它,然後下面的語句

Sheets("SoapUI - Single").Range("B3").Copy 
Sheets("STpremcalc").Range("B3").PasteSpecial Paste:=xlValues 

Sheets("SoapUI - Single").Range("C3").Copy 
Sheets("STpremcalc").Range("B4").PasteSpecial Paste:=xlValues 

Sheets("SoapUI - Single").Range("D3").Copy 
Sheets("STpremcalc").Range("B5").PasteSpecial Paste:=xlValues 

Sheets("SoapUI - Single").Range("E3").Copy 
Sheets("STpremcalc").Range("B6").PasteSpecial Paste:=xlValues 

可以簡化爲

Sheets("SoapUI - Single").Range("B3:E3").Copy 
Sheets("STpremcalc").Range("B3").PasteSpecial Paste:=xlValues, Transpose:=True 

其他比以上,你可以簡化

Sheets("SoapUI - Single").Range("Q3").Copy 
    Sheets("STpremcalc").Range("B9").PasteSpecial Paste:=xlValues 

    Sheets("SoapUI - Single").Range("R3").Copy 
    Sheets("STpremcalc").Range("C9").PasteSpecial Paste:=xlValues 

    Sheets("SoapUI - Single").Range("S3").Copy 
    Sheets("STpremcalc").Range("D9").PasteSpecial Paste:=xlValues 

    Sheets("SoapUI - Single").Range("T3").Copy 
    Sheets("STpremcalc").Range("E9").PasteSpecial Paste:=xlValues 

Sheets("SoapUI - Single").Range("Q3:T3").Copy 
    Sheets("STpremcalc").Range("B9:E9").PasteSpecial Paste:=xlValues 

我認爲你可以自己做休息。


編輯:由於OP編輯他的問題。以下可通過使用像這樣

For i = 1 To 4 
    ws2.Cells(i + 2, 2) = ws1.Cells(3, i + 1) 'Or you can use `ws1.Cells(3, i + 1).Value2` if you only need the value without its format like date or currency 
    ws2.Cells(i + 2, 5) = ws1.Cells(3, i + 5) 
Next i 

的剩下的是你的過程被簡化

ws2.Range("B3").Value = ws1.Range("B3").Value 

    ws2.Range("B4").Value = ws1.Range("C3").Value 

    ws2.Range("B5").Value = ws1.Range("D3").Value 

    ws2.Range("B6").Value = ws1.Range("E3").Value 

    ws2.Range("E3").Value = ws1.Range("F3").Value 

    ws2.Range("E4").Value = ws1.Range("G3").Value 

    ws2.Range("E5").Value = ws1.Range("H3").Value 

    ws2.Range("E6").Value = ws1.Range("I3").Value 

+0

我已更新我的代碼 – Ross

+0

@RossWatson查看我的編輯。我相信你可以做剩下的事情。 –

1

不多做,但是這一點可能是:

  • 使用變量引用的工作表,並同時提高代碼的可讀性和效率

    Dim ws1 As Worksheet, ws2 As Worksheet  
    Set ws1 = Worksheets("SoapUI - Single") 
    Set ws2 = Worksheets("STpremcalc") 
    
  • 使用Range1.Value = Range2.Value模式複製/粘貼範圍之間的值它的'

    ws2.Range("B3").Value = ws1.Range("B3").Value 
    ws2.Range("B4").Value = ws1.Range("C4").Value 
    ... 
    
+0

既然您改編了我的解決方案,您爲什麼不將我的答案標記爲已接受? – user3598756

+0

@Ross:你會很高興給予正確的反饋給幫助你的人 – user3598756