如何在excel VBA中循环宏

如何在excel VBA中循环宏,vba,excel,Vba,Excel,我想在excel VBA中循环某个宏。然而,我不知道如何做到这一点(我尝试了很多次,但都失败了)。下面代码中的注释显示了我想要做的事情。代码可以完美地工作,我只希望它对每一行数据进行循环,直到所有数据都被转置到第二个工作表中(第一个工作表包含大约5000行数据,第二个工作表中每18行必须转置到1行): 希望这个问题是可以理解的,我希望有人能帮忙。 谢谢 您实际上可以减少代码 第一个提示: 请避免使用。选择/。激活 第二个提示: 您可以一次性在相关单元格中输入公式,而不是进行自动填充。例如这个 R

我想在excel VBA中循环某个宏。然而,我不知道如何做到这一点(我尝试了很多次,但都失败了)。下面代码中的注释显示了我想要做的事情。代码可以完美地工作,我只希望它对每一行数据进行循环,直到所有数据都被转置到第二个工作表中(第一个工作表包含大约5000行数据,第二个工作表中每18行必须转置到1行):

希望这个问题是可以理解的,我希望有人能帮忙。
谢谢

您实际上可以减少代码

第一个提示:

请避免使用
。选择/。激活

第二个提示:

您可以一次性在相关单元格中输入公式,而不是进行自动填充。例如这个

Range("G2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]/RC[-1]*100"
Range("G2").Select
Selection.AutoFill Destination:=Range("G2:G19"), Type:=xlFillDefault
可以写成

Range("G2:G19").FormulaR1C1 = "=RC[-2]/RC[-1]*100"
Range("A2:C2").Copy Sheets("Sheet2_Transposed data").Range("A2")
Sheets("Sheet1_Transposed_data").Range("D2:D19").Value = _
Sheets("Sheet1").Range("G2:G19").Value
第三个提示:

您不需要在单独的行中进行复制和粘贴。你可以在一行中完成。比如说

Range("A2:C2").Select
Selection.Copy
Sheets("Sheet2_Transposed data").Select
Range("A2").Select
ActiveSheet.Paste
可以写成

Range("G2:G19").FormulaR1C1 = "=RC[-2]/RC[-1]*100"
Range("A2:C2").Copy Sheets("Sheet2_Transposed data").Range("A2")
Sheets("Sheet1_Transposed_data").Range("D2:D19").Value = _
Sheets("Sheet1").Range("G2:G19").Value
当你在做一个特别的事情时也是一样。但是您使用
.Value=.Value
来实现这一点

Range("G2:G19").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1_Transposed_data").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
可以写成

Range("G2:G19").FormulaR1C1 = "=RC[-2]/RC[-1]*100"
Range("A2:C2").Copy Sheets("Sheet2_Transposed data").Range("A2")
Sheets("Sheet1_Transposed_data").Range("D2:D19").Value = _
Sheets("Sheet1").Range("G2:G19").Value
错过了
转置
部分。(谢谢Simoco)。在本例中,您可以将代码编写为

Range("A2:C2").Copy 
Sheets("Sheet2_Transposed data").Range("D2").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
第四个提示:

要在单元格中循环,可以使用
For loop
。假设您想在单元格
A2
A20
之间循环,那么您可以这样做

For i = 2 To 20
    With Range("A" & i)
        '
        '~~> Do Something
        '
    End With
Next i
编辑:

您的前后屏幕截图(来自评论的):

看过你的截图后,我想这就是你要尝试的这是未经测试的,因为我刚刚快速编写了它。如果有任何错误,请告诉我:)


你想循环是什么意思?
表1\u session\u data
中还有其他数据?因为在您的代码中,您已经删除了整个
行(“2:19”)
。或者这意味着在你遍历了所有的列之后?你能以某种方式显示样本数据和预期结果吗?我们可以帮助发布屏幕截图,只需提供链接。编辑后,我需要传输5000(或更多)行数据,每18行是来自1个用户的数据,必须在第二张工作表上转换为1行。啊,我明白了。但是,我把它留给了@Siddharth Rout.:你能给我一个样本数据,这样我就可以给你一个带解释的准确代码吗?见你答案下面的注释。非常感谢你的帮助!我知道我的代码可以更短,谢谢。但我确实需要循环(见编辑问题),我也理解,谢谢。但我不想要一个固定的选择范围。我希望能够循环,直到第一个工作表中的所有数据都被转换到第二个工作表中。(因为数据量会随着时间的推移而变化,有时是5000行数据,有时是15000行数据)。@ArcoJansen:你看到了吗?只需将
20
替换为
LastRow
@ArcoJansen:我仍然认为,您可能不需要循环。请参阅我更新的答案中的
编辑
。让我知道你是不是想这么做?@simoco:是的,我考虑过,但后来决定等待样本数据,因为我觉得在看到数据后,我必须更改该部分:)