Excel 什么是将多列合并为一列且没有重复或空白的最有效方法?

Excel 什么是将多列合并为一列且没有重复或空白的最有效方法?,excel,vba,Excel,Vba,我有一个在不同单元格中包含条目的表,我想将所有列合并为一个,并删除任何空白或重复项。我已经开发了这段代码,但无法通过“.Range”(“A100”).Select。”有什么建议吗 Private子命令按钮1\u单击() 'Application.ScreenUpdate=False 将wb设置为工作簿 将wks2标注为工作表,wks3标注为工作表,wks5标注为工作表 Dim cat作为字符串,erow作为整数,lrow作为整数,i作为整数,j作为整数 调暗rr作为范围,c作为集合,r作为范围

我有一个在不同单元格中包含条目的表,我想将所有列合并为一个,并删除任何空白或重复项。我已经开发了这段代码,但无法通过“.Range”(“A100”).Select。”有什么建议吗

Private子命令按钮1\u单击()
'Application.ScreenUpdate=False
将wb设置为工作簿
将wks2标注为工作表,wks3标注为工作表,wks5标注为工作表
Dim cat作为字符串,erow作为整数,lrow作为整数,i作为整数,j作为整数
调暗rr作为范围,c作为集合,r作为范围,L作为长度
设置wb=ActiveWorkbook
设置wks2=wb.Sheets(2)
设置wks3=工作表(3)
设置wks5=工作底片(5)
'wks3.激活
erow=wks3.Range(“A”&Rows.Count).End(xlUp).Row”确定Cats子类别表A列中的最后一行
“wks2.1激活
lrow=wks2.Range(“I”和Rows.Count).End(xlUp).Row“确定数据表第9列中的最后一行
对于i=2到erow,在每个类别中循环
'wks3.激活
cat=wks3.Cells(i,1)“在变量cat中存储类别名称
“wks2.1激活
对于j=2至lrow,循环遍历数据表的每一行
如果wks2.单元格(j,9)=cat,则
wks2.Cells(j,20)=wks2.Cells(j,10)”在第20列中临时存储弱点1值
wks2.Cells(j,21)=wks2.Cells(j,11)”临时存储第21列中的弱点2值
如果结束
下一个j
MsgBox“暂停”
wks2.Range(“T1:U2000”)。复制目的地:=wks5.Range(“A1”)复制第2页中的临时选择,并粘贴到第5页中
与wks5
集合c=新集合
设置rr=Union(Intersect(范围(“A:A”)、ActiveSheet.UsedRange)、Intersect(范围(“B:B”)、ActiveSheet.UsedRange))
出错时继续下一步
对于rr中的每个r
如果r.值为“”,则
c、 加上r.值,CStr(r.值)
如果结束
下一个r
错误转到0
对于L=1到c,计数
单元格(L,“C”)。值=C.项目(L)
下一个L
以
接下来我
Application.CutCopyMode=False“清除剪贴板上的任何内容以最大化可用内存
Application.ScreenUpdating=True
末端接头
如何:

Sub WhatEver()
   Dim rr As Range, c As Collection
   Dim L As Long
   Set c = New Collection
   Set rr = Union(Intersect(Range("A:A"), ActiveSheet.UsedRange), Intersect(Range("B:B"), ActiveSheet.UsedRange))

   On Error Resume Next
      For Each r In rr
         If r.Value <> "" Then
            c.Add r.Value, CStr(r.Value)
         End If
      Next r
   On Error GoTo 0

   For L = 1 To c.Count
      Cells(L, "C").Value = c.Item(L)
   Next L
End Sub
Sub-where()
调暗rr作为范围,c作为集合
我和你一样长
集合c=新集合
设置rr=Union(Intersect(范围(“A:A”)、ActiveSheet.UsedRange)、Intersect(范围(“B:B”)、ActiveSheet.UsedRange))
出错时继续下一步
对于rr中的每个r
如果r.值为“”,则
c、 加上r.值,CStr(r.值)
如果结束
下一个r
错误转到0
对于L=1到c,计数
单元格(L,“C”)。值=C.项目(L)
下一个L
端接头

@Michael然后加上一行:
Dim r as Range
BINGO!你就是炸弹!非常感谢。