2013-06-07 4 views
4

문제에 관해서는 Variant 배열 A의 모든 데이터를 Variant 배열 B의 모든 데이터와 비교할 수 있어야합니다. 어떤 종류의 이중 루프가 필요하다는 것을 알고 있습니다 (모든 A 값 모든 B 값과 비교하여 검사합니다.)하지만 어떻게해야하는지 알 수 없습니다.두 배열을 Excel VBA로 비교

Sub Button_Click() 
Dim trgtRange As Variant 
Dim tempRange As Variant 
Set myRange = ThisWorkbook.Sheets(1).Range("L:L") 
For Each cell In myRange 
     If IsEmpty(cell) Then 
      ActiveCell.Offset(-1, 0).Select 
      currentRow = ActiveCell.Row 
      Set trgtRange = Range("L2:L" & currentRow) 
      Exit For 
     End If 
    Next cell 
Set tempRange = Range("A1:A" & currentRow - 1) 
' Insert a double loop here 
End Sub 

그래서, trgtRange가 변형 A는하고 tempRange은 내가 좀 더 쉽게 변형 B를 설정 할 수 알고 변형의 나이지만, 나는 이미 그런 식으로했다 : 여기에 지금까지 무슨이다. 결국 코드는 마지막 작업으로 연마해야합니다.

왜 변형 A와 B가 완전히 다른지 궁금 할 것입니다. 글쎄, 나는 서로를 가깝게 (즉, 10000과 12000)있는 값을 찾을 수 있도록 비교할 필요가 있기 때문에 그것을위한 일종의 허용 오차를 통합해야합니다.

+0

나는 왜이 질문이 bumbed인지 모르지만, 그것은 좋지 않은 선택처럼 보입니다. 첫째, 4 세가 넘었고, 두 번째로 프레임이 제대로 구성되어 있지 않아 명확한 설명이 필요하지만 세 번째로이 사용자는 4 년 후에 보지 않았기 때문에 필요한 명확한 설명을 얻을 기회가 거의 없었습니다. 대답이 필요합니다. – RBarryYoung

답변

0

내 대답은 다음과 같습니다. 왜 이렇게하려면 두 개의 루프가 필요합니다. 일부 상대 주소 지정은이 문제를 아주 잘 처리합니다.

Spreadsheet Layout

및 코드는 단순히 어떻게 작동 코드의 주석 설명이

Sub Button_Click() 
    Dim dblTolerance As Double 
    Dim tmp As Range 


    'Get source range 
    Set tmp = ActiveSheet.Range("A2") 

    'Get tolerance from sheet or change this to an assignment to hard code it 
    dblTolerance = ActiveSheet.Range("D13") 

    'use the temporary variable to cycle through the first array 
    Do Until tmp.Value = "" 

     'Use absolute function to determine if you are within tolerance and if so put match in the column 
     'NOTE: Adjust the column offset (set to 4 here) to match whichever column you want result in 
     If Abs(tmp.Value - tmp.Offset(0, 2).Value) < dblTolerance Then 
      tmp.Offset(0, 4).Value = "Match" 
     Else 
      tmp.Offset(0, 4).Value = "No Match" 
     End If 

     'Go to the next row 
     Set tmp = tmp.Offset(1, 0) 
    Loop 

    'Clean up 
    Set tmp = Nothing 
End Sub 

입니다 : 예를 들어이 같은 스프레드 시트를 설정합니다. 상대 참조가 빠르기 때문에 메모리 사용이 더 효율적이며 각 행마다 패스를 한 번만 작성하면되므로 이중 루프보다 월등합니다.

이중 루프를 사용해야하는 경우 알려주십시오. 그러나이 방법론보다 성능이 떨어집니다. 희망이 도움이됩니다.

+1

이 답변에 정확히 무엇이 잘못되었는지 알면 도움이됩니다. 내가 도와 줄 수 있도록 이중 루프를 사용해야하는지 물었다. – David

관련 문제