2017-01-22 123 views
0

我正在使用Excel電子表格進行相機校準。在此電子表格中,可以選擇使用78個可用目標中的14個。我已經開始編寫循環遍歷所用目標範圍的代碼,根據每個單元格中的值,它將用x,y和z座標值填充相鄰單元格。最初只做循環遍歷範圍,並手動編寫78個if語句來爲每個目標服務。那麼,我相信通過實現另一個for循環,有更好的方法來實現這一點。我有什麼繼續無休止的循環。循環遍歷範圍以基於範圍內的值填充座標

我的代碼試圖

Sub macro() 

Dim rng As range, cell As range 

Set rng = range("d2:d15") 

' Target 1 
For i = 1 To Rows.Count 
    For j = 1 To 78 
     If Cells(i, 4).Value = j Then 
      Cells(i, 5) = Cells(26 + j, 2) 
      Cells(i, 6) = Cells(26 + j, 3) 
      Cells(i, 7) = Cells(26 + j, 4) 
     End If 
    Next j 
Next i 

End Sub 
+0

如果您共享您的數據,我們可以提供更好的解決方案。你如何保持78個目標的價值?它在數組內嗎?他們是否保存在另一個工作表中?你爲什麼要設置'rng',但以後再也不使用它? –

+1

它並不是無窮無盡的,因爲Rows.Count,我只是在運行1048576,如果你在Excel 2007+上。 – cyboashu

+0

目標座標保存在同一張紙上。 x,y和z從b27,c 27和d 27開始。以下是從電子表格複製的\t示例。 \t \t 目標\t X \tý\tŽ\t 0.994076386 \t 2.871819521 \t 7.414613305 \t 0.001286094 \t 2.329521288 \t 7.405560172 \t 0.001367373 \t 0.816107316 \t 7.485133244 \t 0.993239568 \t 2.88548805 \t 6.234767026 \t 0.001790363 \t 2.355691937 \t 6.328347983 \t 0.580815367 \t 2.386308878 \t 4.521358343 – Chris

回答

0

你的代碼可能是refactoredas如下

Sub macro() 
    Dim rng As range, cell As range 

    Set rng = range("d2:d15") 
    For Each cell in rng 
     If cell>=1 And cell <=78 Then cell.Offset(,1).Resize(,3).Value = Cells(26 + j, 2).Resize(,3).Value 
    Next 
End Sub