2014-10-05 63 views
0

我想從數組中刪除使用for循環和條件語句的重複。但我無法創建新的數組沒有任何重複。有xls有重複的國家名稱,我的目標是刪除重複並創建一個新的數組與獨特的國家名稱。 對於e.g如何在不使用字典對象的情況下使用vb腳本從數組中刪除重複項?

strFilePath="D:\Country.xls" 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible=True 
Set objWorkbook = objExcel.Workbooks.Open (strFilePath) 
Set objSheet=objExcel.Sheets("Country") 

objExcel.DisplayAlerts = False 
    objExcel.AskToUpdateLinks = False 
    objExcel.AlertBeforeOverwriting = False 
Dim A(100) 
    Dim B(100) 
    For i = 2 To 6 Step 1 
      k = i-2 
    A(k)=objSheet.Cells(i,1).Value 

Next 
    B(0)=A(0) 
    For j = 0 To 4 Step 1 
     strIt=A(j) 

For m = 1 To 4 Step 1 
     reslt = StrComp(A(m),strIt,1) 
      If(reslt = 1 Or reslt = -1) Then 
        c=1 
        B(c)=A(m) 
        c=c+1 
        End if 
       m=m+1 
      Next 
    Next 
+2

字典是最簡單最直接的方法。爲什麼你想讓它比它更復雜呢? – 2014-10-05 15:16:36

回答

0

兩個選項,根據您的需要:

  1. 嘗試使用國名的哈希表。當輸入值到散列表中時,您可以同時檢查是否遇到相同的值。如果它找到一個,它會中止輸入新值並繼續下一個值,否則它將被輸入到表中。最後,你會得到你唯一的國家名稱列表。

  2. 排序國家的名單,然後做第二遍,去除重複的國家(因爲重複現在將組合在一起)

  3. 用這兩種方法

的問題是,他們沒有保留原來的順序,除非您保留某種「原始索引」值,然後在刪除重複項時根據該值進行排序。

0

下面是我平時做:

Dim uniqueentries() 
ReDim uniqueentries(-1) 

' Here you could go through your existing array and 
' call "GetUniqueEntries" sub on each entry, e.g. 
For Each i In oldarray 
    GetUniqueEntries i 
Next 


Sub GetUniqueEntries(newentry) 
    Dim entry 
    If UBound(uniqueentries) >= 0 Then ' Only check if uniqieentries contains any entries 
     For Each entry In uniqueentries 
      If newentry = entry Then Exit Sub ' If the entry you're testing already exists in array then exit sub 
     Next 
    End If 
    ReDim Preserve uniqueentries(UBound(uniqueentries) + 1) ' Increase new array size 
    uniqueentries(UBound(uniqueentries)) = newentry ' Add unique entry to new array 
End Sub 
0

可以這樣做,通過使用分割命令更簡單的方法。請檢查下面的解決方案,如果有任何澄清讓我知道。

Dim aDupl 
Dim aNew, strNew 
aDupl = Array("A", "B", "A", "D", "C", "D") 
strNew = "" 
For iCnt= 0 To UBound(aDupl) 
If InStr(strNew,aDupl(iCnt)) = 0 Then  
    strNew =strNew&aDupl(iCnt)&"," 
End If 
Next 
aNew = Split(strNew, ",") 
For iCnt=0 To UBound(aNew) 
WScript.Echo aNew(iCnt) 
Next 
相關問題