Excel VBA:从多个范围variables创build二维数组(不重复)

我有六个variables范围:A_backup,B_backup,C_backup,D_backup,E_backup,F_backup

每个范围variables是一个行数可变的列(有些有3个,其他有5个,等等)

我想从这些范围中取出每个单元格,并将它们添加到名为Combined_backups的新单列数组中。 我也想避免添加一个单元格,如果它是一个重复的string值以前添加的单元格。

这是我试过的。 遇到Combined_backups.RemoveDuplicates问题。 我应该为组合数组创build一个新的范围,应用RemoveDuplicates,然后创build一个新的最终数组? 另外,什么是testing我的Combined_backups数组实际上已成为我所希望的数组最好的方法?

Dim Combined_backups() As Variant 'add A_backup Dim j As Integer j = A_backup.Rows.Count ReDim Preserve Combined_backups(j) For i = 0 To j - 1 Combined_backups(i) = A_backup.Item(i + 1) Next i 'add B_backup Dim k As Integer k = B_backup.Rows.Count ReDim Preserve Combined_backups(j + k) For i = 0 To k - 1 Combined_backups(i) = B_backup.Item(i + 1) Next i 'add C_backup Dim l As Integer l = C_backup.Rows.Count ReDim Preserve Combined_backups(j + k + l) For i = 0 To l - 1 Combined_backups(i) = C_backup.Item(i + 1) Next i 'add D_backup Dim m As Integer m = D_backup.Rows.Count ReDim Preserve Combined_backups(j + k + l + m) For i = 0 To m - 1 Combined_backups(i) = D_backup.Item(i + 1) Next i 'add E_backup Dim n As Integer n = E_backup.Rows.Count ReDim Preserve Combined_backups(j + k + l + m + n) For i = 0 To n - 1 Combined_backups(i) = E_backup.Item(i + 1) Next i 'add F_backup Dim o As Integer o = F_backup.Rows.Count ReDim Preserve Combined_backups(j + k + l + m + n + o) For i = 0 To o - 1 Combined_backups(i) = F_backup.Item(i + 1) Next i 'elminate duplicates from Combined_backups Combined_backups.RemoveDuplicates 

谢谢!

这是使用Collection对象的另一种方法。 我们首先把所有东西都放到一个集合中,利用我们的优势来拒绝重复的东西; 然后我们把集合对象放到一个“结果”数组中,并写回工作表。 这假设你的各种数组是命名的范围,而不是范围对象,但你应该能够适应需要:

选项显式

 Sub UniqueArray() Dim vSrc As Variant Dim colStrings As Collection Dim vVarRanges As Variant Dim vResults() As Variant Dim S As String Dim I As Long, J As Long, K As Long vVarRanges = VBA.Array("A_backup", "B_backup", "C_backup", "D_backup", "E_backup", "F_backup") Set colStrings = New Collection On Error Resume Next 'So collection will omit any duplicates instead of causing an error For I = 0 To UBound(vVarRanges) vSrc = Range(vVarRanges(I)) For J = 1 To UBound(vSrc, 1) S = vSrc(J, 1) If Len(S) > 0 Then _ colStrings.Add Item:=S, Key:=CStr(S) Next J Next I On Error GoTo 0 'Now create results array ReDim vResults(1 To colStrings.Count, 1 To 1) For I = 1 To colStrings.Count vResults(I, 1) = colStrings(I) Next I 'Write the results someplace With Worksheets("sheet4").Range("A1").Resize(rowsize:=UBound(vResults)) .EntireColumn.Clear .Value = vResults End With End Sub