2017-01-22 9 views
0

私はカメラ較正用のスプレッドシートで作業しています。このスプレッドシートには、利用可能な78のターゲットのうち14を使用するオプションがあります。私は、各セルの値に基づいて、使用されるターゲットの範囲をループするコードを作成し始めました。隣接するセルにx、y、zの座標値を設定します。当初はループが範囲を通過するように作成され、各ターゲットに対応するif文を手動で書きました。さて、もう一つのforループを実装してこれを行うより良い方法があると確信しています。私が何を持っているかは、無限ループに入り続ける。 refactoredas可能性があり範囲内の値に基づいて座標を取り込むためのループスルー範囲

私のコードの試み

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のためにExcel 2007以上であれば、私は1048576のために動いているだけです。 – cyboashu

+0

ターゲット座標は同じシート内に保持されます。 x27、c27、d27から始まるx、y、およびzです。ここでは、スプレッドシートからコピーされた\tの例があります。 \t \t ターゲット\t X \t Y \t Z \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

あなたのコードは、あなたのデータを共有している場合、我々はよりよい解決策を提供することができます

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 
関連する問題