我需要查看第2行AU列中的值(从标题行之后立即开始),如果不为空,则将数据从该行中的特定列复制到另一张纸上。
例如,假设AU2
不为空,然后将A2
复制到A2
,将D2
复制到B2
,将J2
复制到{{ 1}},依此类推。
这是我到目前为止的位置:
C2
我的想法是为要复制的每一列创建一个单独的if语句,以便它将一次从一列复制数据,而不是尝试从一行复制特定的单元格数据。
答案 0 :(得分:0)
在下面尝试一下
Sub copycolumns()
Dim lastrow As Long, erow As Long
Set wb = ThisWorkbook
Set ws1 = wb.Sheets("Sheet Name")
Set ws2 = wb.Sheets("Sheet Name2")
lastrow = ws1.Cells(Rows.Count, 2).End(xlUp).Row
erow = ws2.Cells(Rows.Count, 2).End(xlUp).Row + 1
For Each Cel In ws1.Range("AU2:AU" & lastrow)
If Len(Cel.Value) > 0 Then
For I = 2 To lastrow
ws1.Cells(I, 2).Copy ws2.Cells(erow, 1)
ws1.Cells(I, 4).Copy ws2.Cells(erow, 2)
ws1.Cells(I, 6).Copy ws2.Cells(erow, 3)
ws1.Cells(I, 7).Copy ws2.Cells(erow, 4)
ws1.Cells(I, 8).Copy ws2.Cells(erow, 5)
ws1.Cells(I, 10).Copy ws2.Cells(erow, 6)
ws1.Cells(I, 11).Copy ws2.Cells(erow, 7)
ws1.Cells(I, 12).Copy ws2.Cells(erow, 8)
ws1.Cells(I, 16).Copy ws2.Cells(erow, 9)
ws1.Cells(I, 20).Copy ws2.Cells(erow, 10)
ws1.Cells(I, 26).Copy ws2.Cells(erow, 11)
ws1.Cells(I, 27).Copy ws2.Cells(erow, 12)
ws1.Cells(I, 28).Copy ws2.Cells(erow, 13)
ws1.Cells(I, 29).Copy ws2.Cells(erow, 14)
ws1.Cells(I, 36).Copy ws2.Cells(erow, 15)
ws1.Cells(I, 37).Copy ws2.Cells(erow, 16)
ws1.Cells(I, 45).Copy ws2.Cells(erow, 17)
ws1.Cells(I, 55).Copy ws2.Cells(erow, 18)
ws1.Cells(I, 59).Copy ws2.Cells(erow, 19)
ws1.Cells(I, 63).Copy ws2.Cells(erow, 20)
ws1.Cells(I, 47).Copy ws2.Cells(erow, 21)
erow = erow + 1
Next I
End If
Next
'ws2.Columns().AutoFit
End Sub
当前,它应该复制您在Question中提到的三个单元格。您可以根据需要添加更多类似的列。
您的循环在Range中有点偏离,您不想将其遍历整个列直到底部,这将花费很多时间。而且您还缺少一个End If