我有一个VBA脚本,可以将数据从一个工作表复制到另一个工作表。复制的数据将放入公式中,并将计算出的数量复制回原始工作表。我试图得到它,以便VBA脚本为每一行执行此操作。我有1000行数据。
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
我也理解这可能是执行此任务的一种非常低效的方式,但我不知道如何改进它。因此,如果您有办法提高效率,我们将非常感激。
编辑:根据@ user3598756建议更新代码
答案 0 :(得分: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编辑了他的问题。以下内容可以简化
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
使用像
这样的循环程序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
其余的是你的。
答案 1 :(得分: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
...