简体   繁体   English

Excel VBA-使VBA脚本遍历行

[英]Excel VBA - Have VBA script loop through rows

I have a VBA script that copies data from one sheet to another. 我有一个VBA脚本,可将数据从一张纸复制到另一张纸。 The data copied is put into a formula and the calculated amount is copied back over to the original sheet. 将复制的数据放入公式中,然后将计算出的数量复制回原始工作表中。 I am trying to get it so that the VBA script does this for each row. 我正在尝试获取它,以便VBA脚本为每一行执行此操作。 I have 1000 rows of data. 我有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

Also I understand that this may be a very inefficient way to perform this task but I dont know how to better it. 我也知道这可能是执行此任务的效率很低的方法,但我不知道如何改善它。 So if you have a way to make this more efficient, it would be greatly appreciated. 因此,如果您有办法提高效率,将不胜感激。

Edit: Update code as per @user3598756 advice 编辑:根据@ user3598756建议更新代码

I'm not a fan of copy/ paste procedure, but if you must use it then the following statements 我不喜欢复制/粘贴过程,但是如果您必须使用它,则可以使用以下语句

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

can be simplified into 可以简化成

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

Other than above, you can simplify 除上述以外,您还可以简化

    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

into 进入

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

I think you can do the rest by yourself. 我认为您可以自己完成其余的工作。


EDIT: Since the OP edits his question. 编辑:由于OP编辑他的问题。 The following can be simplified 以下可以简化

    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

by using the loop procedure like this 通过使用像这样的循环过程

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

The rest is yours. 其余的是你的。

not much to do but that little can be: 没什么可做的,但可以做的很少:

  • use variables to reference worksheets and improve both code readability and efficiency 使用变量引用工作表并提高代码的可读性和效率

     Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Worksheets("SoapUI - Single") Set ws2 = Worksheets("STpremcalc") 
  • use Range1.Value = Range2.Value pattern to copy/paste values between ranges it' 使用Range1.Value = Range2.Value模式在其范围之间复制/粘贴值

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM