2014-10-31 107 views
0

我試圖將無人機座標數據從XML轉換爲Excel表格,這涉及將三行座標轉換爲一個。的數據當前被設置瞭如下[)在(表示列字母]:在VBA循環中跳過相同的數字

(A)  (B) 
Mark  Coordinate 
1   -97.373773 
1   124.34848 
1   225 
2   -97.746343 
2   123.48343 
2   225 
3   -97.342533 
3   123.23454 
3   225 

我想創建一個循環,其複製所有座標和高度數據爲每個「標記」的數據並將其粘貼的在一個行,如下所示:

(A)  (B)   (C)   (D) 
1   -97.373773 124.34848  225 
2   -97.746343 123.48343  225 
3   -97.342533 123.23454  225 

有人可以給我一些有識之士就如何創建一個循環,這將跳過重複的「標記」號在一列,這樣我就可以複製並粘貼相關信息在一行中?

提前歡呼!

回答

0

這會將您的兩個A:B列轉移到D:G的右邊。

Sub xfer_coords() 
    Dim a As Long, r As Long, rw As Long 
    With ActiveSheet 
     For r = 2 To .Cells(Rows.Count, 1).End(xlUp).Row 
      If .Cells(r, 1).Value = a Then 
       .Cells(rw, Columns.Count).End(xlToLeft).Offset(0, 1) = _ 
        .Cells(r, 2).Value 
      Else 
       a = .Cells(r, 1).Value 
       rw = .Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Row 
       .Cells(rw, 4) = a 
       .Cells(rw, 5) = .Cells(r, 2).Value 
      End If 
     Next r 
    End With 
End Sub 
+0

非常感謝您的支持! – 2014-11-01 01:28:47

+0

我已經加入代碼並觀察它填充單元格(完美無缺!),但無法解決它的工作原理!如果你有空閒時間,你可以添加一些關於它如何做的評論嗎? – 2014-11-01 21:06:45

+0

嗯,我想我可能會得到它:它搜索標記列,如果還沒有添加,添加它,如果它已被添加,它添加三個座標值與「標記」值相對應,並循環遍歷。我90%確定我是對的。非常感謝 – 2014-11-01 21:10:59

0

您可以使用MS Scripting Runtime Library中的Dictionary來完成此操作,並將您的Mark作爲關鍵字並將Collection作爲值。爲了實例之一:

Set dict = CreateObject("Scripting.Dictionary") 

然後將值添加到它:

If Not dict.Exists(yourMark) Then 
    Dim newCollection As Collection 
    Set newCollection = New Collection 
    newCollection.Add(yourValue) 

    dict.Add yourMark, newCollection 
Else 
    dict(yourMark).Add(yourValue) 
End If 

這樣,一個新的標誌將只如果不是已經看到,並將所有值會與該單一標記相關聯。

您還可以使用dict.Item(標記)來獲取與任何標記關聯的集合:

Dim coordinates As Collection 
Set coordinates = dict.Item(mark) 

你可以通過字典遍歷像這樣:

For Each iterMark in dict.Keys 
    Dim coordinates as Collection 
    Set coordinates = dict.Item(iterMark) 
Next 

這裏的微軟支持文章Dictionary

如果由於某種原因,這是不可能的,還有一種方法可以按鍵值方式使用Collection。

+0

非常感謝您的迅速回復。我從來沒有聽說過這個,所以會期待它。我的思考過程(基於非常有限的循環知識)將設置一個變量爲0,然後有一個if語句來檢查下面的「標記」號是否與前一個相同,如果是,則跳到下一個沒有 - 等等......我只是不太瞭解循環來編寫代碼,或者確實我是否正確......! – 2014-10-31 22:16:58

+0

@ChrisHall我的榮幸!如果有幫助,請不要忘記檢查這是您選擇的答案。 – furkle 2014-10-31 22:17:57

+0

@ChrisHall我想了一會兒,但問題是,你沒有辦法知道你在運行時會遇到多少標記,也不一定是他們在什麼順序。出於這個原因,試圖爲每一個商標創造變量是不太可行的。 – furkle 2014-10-31 22:25:44