如果单元格 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
在我的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