如果单元格 value/are 不为空则复制,同时跳过多个 headers

Copying if cell have value/are not empty, while skipping multiple headers

在我的sheet"Inbox"中有多个headers不需要复制。

Headers 位于第 1-6、24、42、60、78 和 96 行。sheet 中的总行数为 130。

我想检查所有 130 行(headers 除外)的 A、B、D 或 F 列中是否有值(文本或数字),如果有,我想复制该行的 A-G 列并从第 7 行开始在 sheet "Outbox" 中粘贴特殊内容。
sheet 都在同一工作簿中,sheet "Inbox" 中的单元格是链接到另一个工作簿的公式。

有人可以编辑 user3819867 发布的代码以忽略零值吗?

不完美,但应该可以:

Sub test()
Dim inbox As Worksheet
Dim outbox As Worksheet
Set inbox = Sheets("Inbox")
Set outbox = Sheets("Outbox")
Dim lastrowOutbox As Integer
lastrowOutbox = outbox.Cells(Rows.Count, 1).End(xlUp).Rows.Row
inbox.Activate

For i = 2 To 130

If Not IsEmpty(Cells(i, 1).Value) Or Not IsEmpty(Cells(i, 2).Value) Or Not IsEmpty(Cells(i, 4).Value) Or Not IsEmpty(Cells(i, 5).Value) Then
    Range("A" & i & ":G" & i).Copy Destination:=outbox.Range("A" & lastrowOutbox & ":G" & lastrowOutbox)
    lastrowOutbox = lastrowOutbox + 1
    End If

Next i

End Sub

它复制到输出中的第一个空单元格。

首先:我们来这里是为了提供帮助,而不是做你的工作。如果您至少尝试一下代码,我们将不胜感激。
第二:你制定了一个非常好的规范,所以我的评论将帮助你自己编写下一个脚本。

Sub ert()
j = 7
For i = 1 To 130 'Total number of rows in the sheet is 130.
If Not IsEmpty(Sheets("Inbox").Cells(i, 1)) Or Not IsEmpty(Sheets("Inbox").Cells(i, 2)) Or Not IsEmpty(Sheets("Inbox").Cells(i, 4)) Or Not IsEmpty(Sheets("Inbox").Cells(i, 6)) Then 'A, B, D, F - at least one is not empty
    Select Case True
        Case i <= 6 Or i = 24 Or i = 42 Or i = 60 Or i = 78 Or i = 96 'Headers are in rows 1-6, 24, 42, 60, 78 and 96.
            'does nothing
        Case Else
            For k = 1 To 7 'A to G
                Sheets("Outbox").Cells(j, k).Value2 = Sheets("Inbox").Cells(i, k).Value2 'copyies values
            Next
            j = j + 1 'next record in next row
    End Select
End If

Next
End Sub

零值不是空值,因此 "amendment" 为:

Sub ert()
j = 7 'paste special in sheet "Outbox" starting from row 7.
For i = 1 To 130 'Total number of rows in the sheet is 130.
If Not 0 = (Sheets("Inbox").Cells(i, 1)) Or Not 0 = (Sheets("Inbox").Cells(i, 2)) Or Not 0 = (Sheets("Inbox").Cells(i, 4)) Or Not 0 = (Sheets("Inbox").Cells(i, 6)) Then 'A, B, D, F - at least one is not empty
    Select Case True
        Case i <= 6 Or i = 24 Or i = 42 Or i = 60 Or i = 78 Or i = 96 'Headers are in rows 1-6, 24, 42, 60, 78 and 96.
            'does nothing
        Case Else
            For k = 1 To 7 'A to G
                Sheets("Outbox").Cells(j, k).Value2 = Sheets("Inbox").Cells(i, k).Value2 'copyies values
            Next
            j = j + 1 'next record in next row
    End Select
End If
Next
End Sub