有一種方法與VBA除去在陣列中的所有重複,也第一值。只要保持不重複值VBA刪除重複值的陣列,其包括相同的值
例子:
Array_1 ['pedro','maria','jose','jesus','pepe','pepe','jose']
結果:
Array_1 ['pedro','maria','jesus']
有一種方法與VBA除去在陣列中的所有重複,也第一值。只要保持不重複值VBA刪除重複值的陣列,其包括相同的值
例子:
Array_1 ['pedro','maria','jose','jesus','pepe','pepe','jose']
結果:
Array_1 ['pedro','maria','jesus']
試試這個代碼:
Sub Remove_All_Duplicated()
Dim Array_1
Array_1 = Array("pedro", "maria", "jose", "jesus", "pepe", "pepe", "jose")
Dim Array_2()
Dim eleArr_1, x
x = 0
For Each eleArr_1 In Array_1
If UBound(Filter(Array_1, eleArr_1)) = 0 Then
ReDim Preserve Array_2(x)
Array_2(x) = eleArr_1
x = x + 1
End If
Next
End Sub
其他搜索解決方案ñ爲Filter
功能不關心「精確匹配」。這個新的需要參考VBA項目中的Microsoft Scripting Runtime。
Sub alternative()
Dim Array_1
Array_1 = Array("pedro", "pedro maria", "maria", "jose", "jesus", "pepe", "pepe", "jose")
Dim Array_2()
Dim Array_toRemove()
Dim dic As New Scripting.Dictionary
Dim arrItem, x As Long
For Each arrItem In Array_1
If Not dic.Exists(arrItem) Then
dic.Add arrItem, arrItem
Else
ReDim Preserve Array_toRemove(x)
Array_toRemove(x) = dic.Item(arrItem)
x = x + 1
End If
Next
For Each arrItem In Array_toRemove
dic.Remove (arrItem)
Next arrItem
Array_2 = dic.Keys
'quic tests to remove when unnecessary
Debug.Print UBound(Array_2), UBound(Array_toRemove)
Debug.Print Join(Array_2, "/")
End Sub
如何創建一個新的A_temp1()不重複,使用過濾器()VBA函數:
Dim A_temp1() As String
Dim NUMERO1 As Long
Dim NUMERO2 As Long
Dim DATO1 As Variant
NUMERO1 = 0
For Each DATO1 In Array_1
If UBound(Filter(Array_1, DATO1)) > 0 Then
Array_1(NUMERO1) = vbNullString
End If
NUMERO1 = NUMERO1 + 1
Next DATO1
NUMERO2 = 0
For NUMERO1 = LBound(Array_1) To UBound(Array_1)
If Array_1(NUMERO1) <> vbNullString Then
ReDim Preserve A_temp1(NUMERO2)
A_temp1(NUMERO2) = Array_1(NUMERO1)
NUMERO2 = NUMERO2 + 1
End If
Next NUMERO1
這裏是另一個版本:
Public Sub ShortVersion()
Dim varInput: varInput = Array("pedro", "pedro maria", "maria", "jose", "jesus", "pepe", "pepe", "jose")
Dim colOutput As Collection: Set colOutput = New Collection
Dim i As Long: For i = LBound(varInput) To UBound(varInput)
If UBound(Split(Chr(1) & Join(varInput, Chr(1) & Chr(1)) & Chr(1), Chr(1) & varInput(i) & Chr(1))) = 1 Then
colOutput.Add varInput(i)
End If
Next i
End Sub
優點:
缺點:
感謝我也是我看到了實際使用的**使用ReDim保留** – 2013-04-08 11:34:53
我很高興你喜歡這個解決方案。但是,我已經意識到首先想法的一些缺點,因此我添加了其他解決方案。 – 2013-04-08 13:12:57