2013-06-06 6 views
0

한 시트의 한 열의 값과 다른 시트의 다른 열, 동일한 통합 문서의 값을 비교하려고합니다. 이 함수는 다른 열의 각 셀을 단계별로 실행하고 셀 값인 문자열이 sheet2에 없으면 sheet1의 행이 sheet3에 복사됩니다. 두 배열을 비교하는 것처럼 생각할 수 있습니다. Array1에 Array2에 나타나지 않는 값이 있는지 확인하고 Array1에 나타나지 않으면 값이 Array3에 복사됩니다.Excel VBA 형식 불일치 오류

내 주요 문제는 5 행에서 형식 불일치 오류가 발생하고 있습니다. 값에 문자열이 포함되어 있습니다. 나는 엑셀 VBA에서 상당히 새롭고 비행 중에 그것을 배우려고 노력하고있다. 어떤 도움이라도 대단히 감사하겠습니다.

Sub search() 
Dim count As Integer 
count = 0 

For Each i In Worksheets("Sheet1").Range("C2:C4503") 
    Set first_cell = Worksheets("Sheet1").Cells(i, 3) <-- Mismatch eror 

    For Each j In Worksheets("Sheet2").Range("X2:X4052") 
     Set second_cell = Worksheets("Sheet2").Cells(j, 24) 
     If second_cell = first_cell Then Exit For 
    Next j 

    count = count + 1 
    Set Worksheets("Sheet3").Cells(count, 1) = Worksheets("Sheet1").Cells(j, 1).Select 
Next i 

최종 서브

+0

값을 원할 경우 '.Value' 또는'.Value2' 속성을 사용하십시오. 'Cells()'는 범위를 반환합니다. – ja72

+0

값은 어떤 식 으로든 정렬 되었습니까? 아니면 sheet1의 값을 sheet2의 아무 곳에 나 지정할 수 있습니까? – ja72

+0

당신은 모호한 방식으로 i를 사용하고 있습니다 : 먼저, 각 i에 대해 범위 항목으로, 그런 다음 셀 (i, 3)에 정수로 사용합니다. – chuff

답변

0

다음 지정된 범위 내의 셀 통해

For Each i In Worksheets("Sheet1").Range("C2:C4503") 
    ... 
Next i 

반복하는 단계; i는 현재 셀을 나타내는 Range 개체입니다.

당신은 다음 줄에 정수 지수로 사용됩니다

Set first_cell = Worksheets("Sheet1").Cells(i, 3) 

따라서 형식이 일치합니다.

+0

그래서 모든 .Cells (...)를 .Value (...)로 변경했으며 런타임 오류 '1004'가 표시됩니다. 그 원인은 무엇일까요? – user2460606

0
Sub Search() 

Dim rowNum As Long 
Dim i As Range, f As Range 

    rowNum = 1 

    For Each i In Worksheets("Sheet1").Range("C2:C4503").Cells 

     If Len(i.Value) > 0 Then 
      'search for value on sheet2 
      Set f = Worksheets("Sheet2").Range("X2:X4052").Find(_ 
          i.Value, , xlValues, xlWhole) 

      If f Is Nothing Then 
       'not found: copy row from sheet1>sheet3 
       i.EntireRow.Copy Worksheets("Sheet3").Cells(rowNum, 1) 
       rowNum = rowNum + 1 
      End If 
     End If 

    Next i 

End Sub