Excel-将内容从一个单元格添加/追加到新列

时间:2019-02-25 15:23:06

标签: excel

我在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键并单击并复制,但是如果以后需要添加更多工作表,宁愿让它可变。

1 个答案:

答案 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