我在SheetX和SheetY中有两个列表。从这两个中,我希望在SheetZ中创建一个新列表。
我遇到的问题是,我不想添加SheetX和SheetY的所有值,而是合并每个值的特定部分。
对于insteand: SheetX:A1:A10,SheetX:A15,SheetX:A20:A23(14个单元格) SheetY:A4:A10,SheetY:A12,SheetY:A15:A25(17个单元格)
应导致SheetZ:A1:A31
列表很长(500行或更多),很高兴能够对其进行标记并将其与SheetZ链接:A列:在我浏览列表时将其添加到列表中。
Ofc我可以按ctrl键并单击并复制,但是如果以后需要添加更多工作表,宁愿让它可变。
答案 0 :(得分:0)
处理此问题的最佳方法是使用VBA宏。仅坚持Excel中的功能将浪费大量资源。 如果您的数据在A:A中,则在要在SheetZ上结转的记录旁边的B:B列中添加“ x”。
在VBA(Alt + F11)中插入一个模块,并在下面添加代码
Sub Macro1()
' Keyboard Shortcut: Ctrl+Shift+M
'
Dim wsX As Worksheet: Set wsX = ActiveWorkbook.Sheets("SheetX")
Dim wsY As Worksheet: Set wsY = ActiveWorkbook.Sheets("SheetY")
Dim wsZ As Worksheet: Set wsZ = ActiveWorkbook.Sheets("SheetZ")
Dim i As Integer: i = 2 ''Row number on the data sheet
Dim z As Integer: z = 2 'Row number on the combined sheet
With wsX
Do While IsEmpty(wsX.Cells(i, 1)) = False ''Assumes the data is uninterrupted
If UCase(wsX.Cells(i, 2)) = "X" Then ''The "2" assumes the x will be in column 2
wsZ.Cells(z, 1) = wsX.Cells(i, 1)
z = z + 1
End If
i = i + 1
Loop
End With
i = 2 ''reset the row to start at the top of the next worksheet
With wsY
Do While IsEmpty(wsY.Cells(i, 1)) = False
If UCase(wsY.Cells(i, 2)) = "X" Then
wsZ.Cells(z, 1) = wsY.Cells(i, 1)
z = z + 1
End If
i = i + 1
Loop
End With
End Sub