Excel VBA-用于。。。下一圈

Excel VBA-用于。。。下一圈,excel,vba,loops,for-loop,Excel,Vba,Loops,For Loop,我正在尝试复制值​​如果条件合适,从一张纸到另一张纸。我用了3个嵌套循环。不幸的是,代码只给出了第一个值 例如: i=7,j=3,k=2 (i,j)=(7,3)是“一月”表中的“E”。然后连续复制和粘贴此E 但是我想要第二个值(I,j)=(7,4),它是一个“U”复制和粘贴,以此类推 我不太明白代码中的问题在哪里。如果有人能帮助我,我会很高兴的。我也很高兴能找到更好更快的解决方案 Dim i As Integer, Dim j As Integer, Dim k As Integer For

我正在尝试复制值​​如果条件合适,从一张纸到另一张纸。我用了3个嵌套循环。不幸的是,代码只给出了第一个值

例如:

i=7,j=3,k=2

(i,j)=(7,3)是“一月”表中的“E”。然后连续复制和粘贴此E

但是我想要第二个值(I,j)=(7,4),它是一个“U”复制和粘贴,以此类推

我不太明白代码中的问题在哪里。如果有人能帮助我,我会很高兴的。我也很高兴能找到更好更快的解决方案

Dim i As Integer, Dim j As Integer, Dim k As Integer

For i = 7 To 37
    If Worksheets("Januar").Cells(i, 2).Value = Worksheets("Drucken").Cells(12, 12).Value Then
        For j = 3 To 5
            Worksheets("Januar").Cells(i, j).Copy
                For k = 2 To 4
                    Worksheets("Drucken").Activate
                    Worksheets("Drucken").Cells(38, k).Select
                    ActiveSheet.Paste
                Next
            Worksheets("Januar").Activate
        Next
    End If
Next
编辑:

这是我想要的

我希望将图纸(“一月”)中的这些值复制并粘贴到

这张纸(“Drucken”)

我这样解决了这个问题:

Dim i As Integer
   
For i = 7 To 37
If Worksheets("Januar").Cells(i, 2).Value = Worksheets("Drucken").Cells(12, 12).Value Then
        Worksheets("Januar").Cells(i, 3).Copy Worksheets("Drucken").Cells(38, 2)
        Worksheets("Januar").Cells(i, 4).Copy Worksheets("Drucken").Cells(38, 3)
        Worksheets("Januar").Cells(i, 5).Copy Worksheets("Drucken").Cells(38, 4)
        Worksheets("Januar").Cells(i, 6).Copy Worksheets("Drucken").Cells(38, 5)
        Worksheets("Januar").Cells(i, 7).Copy Worksheets("Drucken").Cells(38, 6)
        Worksheets("Januar").Cells(i, 8).Copy Worksheets("Drucken").Cells(38, 7)
        Worksheets("Januar").Cells(i, 9).Copy Worksheets("Drucken").Cells(38, 8)
        Worksheets("Januar").Cells(i, 10).Copy Worksheets("Drucken").Cells(38, 9)
        Worksheets("Januar").Cells(i, 11).Copy Worksheets("Drucken").Cells(38, 10)
        Worksheets("Januar").Cells(i, 12).Copy Worksheets("Drucken").Cells(38, 11)
        Worksheets("Januar").Cells(i, 13).Copy Worksheets("Drucken").Cells(38, 12)
        Worksheets("Januar").Cells(i, 14).Copy Worksheets("Drucken").Cells(38, 13)
        Worksheets("Januar").Cells(i, 15).Copy Worksheets("Drucken").Cells(38, 14)
        Worksheets("Januar").Cells(i, 16).Copy Worksheets("Drucken").Cells(38, 15)
        Worksheets("Januar").Cells(i, 17).Copy Worksheets("Drucken").Cells(38, 16)
        Worksheets("Januar").Cells(i, 18).Copy Worksheets("Drucken").Cells(38, 17)
        Worksheets("Januar").Cells(i, 19).Copy Worksheets("Drucken").Cells(38, 18)
        Worksheets("Januar").Cells(i, 20).Copy Worksheets("Drucken").Cells(38, 19)
        Worksheets("Januar").Cells(i, 21).Copy Worksheets("Drucken").Cells(38, 20)
        Worksheets("Januar").Cells(i, 22).Copy Worksheets("Drucken").Cells(38, 21)
        Worksheets("Januar").Cells(i, 23).Copy Worksheets("Drucken").Cells(38, 22)
        Worksheets("Januar").Cells(i, 24).Copy Worksheets("Drucken").Cells(38, 23)
        Worksheets("Januar").Cells(i, 25).Copy Worksheets("Drucken").Cells(38, 24)
        Worksheets("Januar").Cells(i, 26).Copy Worksheets("Drucken").Cells(38, 25)
        Worksheets("Januar").Cells(i, 27).Copy Worksheets("Drucken").Cells(38, 26)
        Worksheets("Januar").Cells(i, 28).Copy Worksheets("Drucken").Cells(38, 27)
        Worksheets("Januar").Cells(i, 29).Copy Worksheets("Drucken").Cells(38, 28)
        Worksheets("Januar").Cells(i, 30).Copy Worksheets("Drucken").Cells(38, 29)
        Worksheets("Januar").Cells(i, 31).Copy Worksheets("Drucken").Cells(38, 30)
        Worksheets("Januar").Cells(i, 32).Copy Worksheets("Drucken").Cells(38, 31)
        Worksheets("Januar").Cells(i, 33).Copy Worksheets("Drucken").Cells(38, 32)
End If
Next

但我认为下一个循环的方式更好。但是我不知道为什么上面的代码不起作用…

请尝试下一个代码。我只希望我能理解你(真正)需要什么:


如果我的理解是正确的,你也需要复制格式吗?或者只有这些值就足够了。如果只输入这些值,代码可以更快,不涉及剪贴板。

请尝试下一个代码。我只希望我能理解你(真正)需要什么:


如果我的理解是正确的,你也需要复制格式吗?或者只有这些值就足够了。如果只有这些值,代码可以更快,不涉及剪贴板。

基于对文章的编辑:我会使用此代码

Sub Test3()
    Dim i As Long
    Dim j As Long
        For i = 7 To 37
            If Worksheets("Januar").Cells(i, 2) = Worksheets("Drucken").Cells(12, 12) Then
                For j = 1 To 30
                    Worksheets("Drucken").Cells(38, j + 1) = Worksheets("Januar").Cells(i, j + 2)
                Next j
            End If
        Next i
End Sub
原始答案仅供参考

下面的代码将复制您的整行并粘贴到第二页,因此基于
xlCellTest
中的标准,使用上面的代码,我将其设置为与您相同的单元格,但建议不使用该单元格,因为它可能被覆盖

Sub test2()
    Dim xlCellA As Range
    Dim xlCellB As Range
    Dim xlCellTest As Range
        Set xlCellTest = Worksheets("Drucken").Cells(12, 12)
        Set xlCellA = Worksheets("Januar").Range("B2")
        Set xlCellB = Worksheets("Drucken").Range("A2")
        Do Until xlCellA = ""
            If xlCellA = xlCellTest Then
                xlCellA.EntireRow.Copy
                xlCellB.PasteSpecial xlPasteAll
                Set xlCellB = xlCellB.Offset(1, 0)
            End If
            Set xlCellA = xlCellA.Offset(1, 0)
        Loop
End Sub

根据对帖子的编辑:我会使用这个代码

Sub Test3()
    Dim i As Long
    Dim j As Long
        For i = 7 To 37
            If Worksheets("Januar").Cells(i, 2) = Worksheets("Drucken").Cells(12, 12) Then
                For j = 1 To 30
                    Worksheets("Drucken").Cells(38, j + 1) = Worksheets("Januar").Cells(i, j + 2)
                Next j
            End If
        Next i
End Sub
原始答案仅供参考

下面的代码将复制您的整行并粘贴到第二页,因此基于
xlCellTest
中的标准,使用上面的代码,我将其设置为与您相同的单元格,但建议不使用该单元格,因为它可能被覆盖

Sub test2()
    Dim xlCellA As Range
    Dim xlCellB As Range
    Dim xlCellTest As Range
        Set xlCellTest = Worksheets("Drucken").Cells(12, 12)
        Set xlCellA = Worksheets("Januar").Range("B2")
        Set xlCellB = Worksheets("Drucken").Range("A2")
        Do Until xlCellA = ""
            If xlCellA = xlCellTest Then
                xlCellA.EntireRow.Copy
                xlCellB.PasteSpecial xlPasteAll
                Set xlCellB = xlCellB.Offset(1, 0)
            End If
            Set xlCellA = xlCellA.Offset(1, 0)
        Loop
End Sub


如果您添加了一个源数据的示例和预期输出的示例,这将非常有用。我认为问题可能在于……Next循环的工作方式与您的想法不同,但如果没有示例,我无法确定您实际上想要什么。您的代码按照您描述的方式工作。我的意思是,它复制三次
工作表(“一月”)。单元格(I,j)
在第2列到第4列的同一行(38)上的值。在第二次
j
迭代中,它覆盖先前返回的值,并且只返回最后一次迭代结果。您希望在哪里为每个迭代复制该值(多于三个)?是否要在同一行的下一个空列上复制?你也喜欢增加行数吗?事实上,你想要什么?@FaneDuru。。是的,我想在同一行的下一列复制。@Glenn G。。我编辑了我的帖子。请看一看。我希望你现在能更好地理解我的问题。哪些“价值观”?由于我们不知道工作表(“Januar”).Cells(i,2)。Value=工作表(“Drucken”)。Cells(12,12)。Value的含义是什么,因此无法理解您需要什么。显示第七行,代码处理从7到37的行。从您的答案更新中了解什么?从第二页开始,是否只需要返回三个这样的值?如果没有,为什么要向我们展示您不需要的内容?如果您添加了源数据的示例和预期输出的示例,这将非常有帮助。我认为问题可能在于……Next循环的工作方式与您的想法不同,但如果没有示例,我无法确定您实际上想要什么。您的代码按照您描述的方式工作。我的意思是,它复制三次
工作表(“一月”)。单元格(I,j)
在第2列到第4列的同一行(38)上的值。在第二次
j
迭代中,它覆盖先前返回的值,并且只返回最后一次迭代结果。您希望在哪里为每个迭代复制该值(多于三个)?是否要在同一行的下一个空列上复制?你也喜欢增加行数吗?事实上,你想要什么?@FaneDuru。。是的,我想在同一行的下一列复制。@Glenn G。。我编辑了我的帖子。请看一看。我希望你现在能更好地理解我的问题。哪些“价值观”?由于我们不知道工作表(“Januar”).Cells(i,2)。Value=工作表(“Drucken”)。Cells(12,12)。Value的含义是什么,因此无法理解您需要什么。显示第七行,代码处理从7到37的行。从您的答案更新中了解什么?从第二页开始,是否只需要返回三个这样的值?如果没有,为什么要给我们看你不需要的东西?这就是我想要的答案!!!!谢谢你,伙计。对不起,我的英语不好…只有价值观才是伟大的@巴萨拉:好的。我将使用剪贴板对该行进行注释,并放置另一行。成功了。请检查一下。我没有测试我发布的代码。不,我要离开办公室。如果有别的事情,我只能在家里工作(几个小时后)…不,没用…我现在在开车。但是代码应该是有效的。你删除了之前的版本/格式了吗?这就是我想要的答案!!!!谢谢你,伙计。对不起,我的英语不好…只有价值观才是伟大的@巴萨拉:好的。我将使用剪贴板对该行进行注释,并放置另一行。成功了。请检查一下。我没有测试我发布的代码。不,我要离开办公室。如果有别的事情,我只能在家里工作(几个小时后)…不,没用…我现在在开车。但是代码应该是有效的。您是否删除了以前的版本/格式?谢谢!这个也可以用!!!谢谢这个也可以用!!!