VBA将EACH工作表中的非空单元格复制到现有工作表

时间:2014-10-15 20:15:02

标签: vba loops if-statement nested-loops worksheet

我甚至不知道从哪里开始所以我没有任何示例代码。我想我需要一个嵌套循环,但这就是抛弃我的东西。我期待着向大家学习。

以下是我想做的事情:

  1. 从名为" John"的工作表开始并循环遍历每个工作表。
  2. 在每个工作表上,如果列L中的单元格不是空白,则复制该行的单元格F和单元格L.
  3. 将所有复制的单元格附加到工作表"注释"。将每张工作表上的F数据粘贴到A列,然后粘贴B列中L的相应数据。将每个工作表中复制的数据添加到"注释"中的数据末尾。
  4. 非常感谢任何帮助,谢谢!!

    更新 基于Alter的大力帮助和建议,这就是我所拥有的,并且它完美无缺。谢谢Alter!

        Sub test()
            Dim ws As Worksheet
            Dim notes_ws As Worksheet
            Dim row
            Dim lastrow
            Dim notes_nextrow
    
            'find the worksheet called notes
            For Each ws In Worksheets
                If ws.Name = "Notes" Then
                    Set notes_ws = ws
                End If
            Next ws
    
            'get the nextrow to print to
            notes_nextrow = notes_ws.Range("A" & Rows.Count).End(xlUp).row + 1
    
            'loop through other worksheets
            For Each ws In Worksheets
                'ignore the notes worksheet
                If ws.Name <> "Notes" And ws.Index > Sheets("John").Index Then
                    'find lastrow
                    lastrow = ws.Range("L" & Rows.Count).End(xlUp).row
                    For row = 1 To lastrow
                        'if the cell is not empty
                        If IsEmpty(ws.Range("L" & row)) = False Then
                            notes_ws.Range("A" & notes_nextrow).Value = ws.Range("F" & row).Value
                            notes_ws.Range("B" & notes_nextrow).Value = ws.Range("L" & row).Value
                            notes_nextrow = notes_nextrow + 1
                        End If
                    Next row
                End If
            Next ws
        End Sub
    

1 个答案:

答案 0 :(得分:0)

嵌套循环确实,您可以使用下面的代码作为您想要做的事情的基础

Public Sub test()
    Dim ws As Worksheet
    Dim notes_ws As Worksheet
    Dim row
    Dim lastrow
    Dim notes_nextrow

    'find the worksheet called notes
    For Each ws In Worksheets
        If ws.name = "Notes" Then
            Set notes_ws = ws
        End If
    Next ws

    'get the nextrow to print to
    notes_nextrow = notes_ws.Range("A" & Rows.Count).End(xlUp).row + 1

    'loop through other worksheets
    For Each ws In Worksheets
        'ignore the notes worksheet
        If ws.name <> "Notes" Then
            'find lastrow
            lastrow = ws.Range("L" & Rows.Count).End(xlUp).row
            For row = 1 To lastrow
                'if the cell is not empty
                If IsEmpty(ws.Range("L" & row)) = False Then
                    notes_ws.Range("A" & notes_nextrow).Value = ws.Range("L" & row).Value
                    notes_nextrow = notes_nextrow + 1
                End If
            Next row
        End If
    Next ws
End Sub