2017-01-23 11 views
1

excelのRng1とRng2の2つの範囲を比較するマクロを作成しようとしています。 Rng1( "f2:f15")は、使用されているターゲット番号を含んでいます。 Rng2( "a2:a91")は、すべての可能なターゲットの番号を含んでいます。 Rng2の右側の3つの列( "b2:b91")、( "c2:c91")、および( "d2:d91")には、各ターゲット番号に関連付けられたx、y、z座標値が含まれています。このマクロがしたいのは、Rng1( "g2:g15")、( "h2:h15")、および( "i2:i15")の右側の3列に、 Rng1で見つかったターゲット番号。私が書いた次のコードは、 "実行時エラー '13'、型不一致"を再チューニングしています。VBAマクロで範囲を比較して値を入力する

Sub macro() 
Dim Rng1 As Range, Rng2 As Range, Cell1 As Range, Cell2 As Range 
Set Rng1 = Range("f2:f15") 
Set Rng2 = Range("a2:a91") 
For i = 1 To Rng1 
    For j = 1 To Rng2 
     For Each Cell1 In Rng1(i) 
      For Each Cell2 In Rng1(j) 
       If Cell1.Value = Cell2.Value Then 
       'cell1.Offset(0, 1) = cell2.Offset(0, 1) 
       'cell1.Offset(0, 1) = cell2.Offset(0, 1) 
       'cell1.Offset(0, 1) = cell2.Offset(0, 1) 
       Cells(2 + i, 7) = Cells(2 + j, 2) 
       Cells(2 + i, 8) = Cells(2 + j, 3) 
       Cells(2 + i, 9) = Cells(2 + j, 4) 
      End If 
      Next Cell2 
     Next Cell1 
    Next j 
    Next i 

End Sub 

ありがとう!

+0

は言葉で、書き出したいものだと思います。そして、あなたは 'Rng1(1)'に何個の細胞があると思いますか? –

+0

Rng2の値を追跡するためにjをカウンタとして使用しようとしているので、Rng1の値を追跡するためにカウンタとしてI = 1〜Rng1を使用しようとしています。私は非常に経験豊富なコーダーではなく、これを間違ってやっているかもしれません。ありがとう! – Chris

+1

しかし、Rng1はマルチセル範囲オブジェクトです。ループは1から??意味がありません。そのため、タイプの不一致エラーが発生します。 'For ... Next'ループのVBAヘルプを見てください。そして、後で、あなたは 'Rng1(i)の各セルに対して'を持っています。 I = 1の場合、Rng1(I)はその範囲内の最初のセルになります。ここでも、Rng1(I)の各セルは1つのセルに過ぎません。おそらく、 'I'ループと' j'ループを完全に排除し、範囲内の各セルを循環させることができます。 –

答えて

0

はあなたの説明に基づいて、私はあなたが `私の場合= 1 Rng1`の文で達成しようとしているまさに、これはあなたが

Sub Demo() 
    Dim Rng1 As Range, Rng2 As Range, Cell1 As Range 
    Dim i As Variant 
    Set Rng1 = Range("f2:f15") 
    Set Rng2 = Range("a2:a91") 

    ' Loop over the cells you want to add data for 
    For Each Cell1 In Rng1 
     ' locate current value in range 2 
     i = Application.Match(Cell1.Value, Rng2, 0) 
     If Not IsError(i) Then 
      ' if found copy offset data 
      Cell1.Offset(0, 1) = Rng2.Cells(i, 2) 
      Cell1.Offset(0, 2) = Rng2.Cells(i, 3) 
      Cell1.Offset(0, 3) = Rng2.Cells(i, 4) 
     End If 
    Next 
End Sub 
+0

ありがとう、それは素晴らしいです! – Chris

関連する問題