2016-06-08 6 views
0

나는이 훌륭한 코드 조각을 발견했다. 그리고 나는 그것을 위해 작동하도록 조작하려고 노력하고있다. 그러나 나는 그것을 얻는 것처럼 보일 수 없다. 불행히도 나는 그것을 완전히 이해하기 위해 그 주위에 내 머리를 얻을 수 없었지만 도움이되지 않습니다. 그래서 나는 너에게로 향했다. 셀의 열을 평가하고 유사점이나 차이점을 찾아야합니다. 시트 1 열 1의 셀이 시트 2 열 1의 셀과 동일하지 않으면 전체 행을 사용 된 영역의 맨 아래에있는 시트 1에 복사하려고합니다. 당신이 보는 것이 정확한 첫 번째 셀을 복사 할 지점까지 이걸 얻었지만 전체 행을 복사 할 수는 없습니다. 나는 'With'가 어떻게 구조화 되었는가하는 이유로 생각하지만 평가할 셀이 30k 이상 있기 때문에 루프를 수행하지 말아야한다.셀 데이터 비교 및 ​​복사

도로를 따라 가면서 나는 위와 같은 방법으로 중복을 찾고 싶을 것입니다. 중복이 있으면 인접 셀을 비교하여 차이가 있는지 기존 데이터를 주석으로 옮깁니다 새 데이터를 기존 셀로 이동하십시오.

모든 조언은 언제나처럼 높이 평가됩니다.

Sub Compare_Function() 
    Call Get_Master_Cell_Info 
    Application.ScreenUpdating = False 
    With Sheets("Update").Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(, 1) 
     .Formula = "=VLOOKUP(A4,'New Master Data 6.1'!A:A,1,FALSE)" 
     .Value = .Value 
     .SpecialCells(xlCellTypeConstants, 16).Offset(, -1).Copy Sheets("New Master Data 6.1").Range("A" & Rows.Count).End(xlUp).Offset(1) 
     .ClearContents 
    End With 
    Application.ScreenUpdating = True 
End Sub 

답변

1
선 고장

빠른 라인이 그때 COLUMNA에서 마지막으로 사용한 셀 셀 A4에서 전체 사용 범위를 소요 한 열에 의해 너무 B4를 상쇄

: Bx로 (x가 최종 사용의 행 열 A)

With Sheets("Update").Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(, 1) 

에서 이것은 마스터 시트에 A4, A5, A6 등을 조회하므로, 모든 셀에 수식을두고 그 발견되지 않는 경우는 마스터 시트의 값 또는 오류를 반환합니다. 그러므로 그래서 그들은

.Formula = "=VLOOKUP(A4,'New Master Data 6.1'!A:A,1,FALSE)" 
.Value = .Value 

Specialcells에서 하드 코드 부 이상 값 (즉, 세포가없는) -1- (그래서 칼럼 A)에 의한 오프셋 오차 세포를 의미 상수 (모든 셀)과 값 (16)을 찾는다 및 rows.count에서 새 시트의 열 A에 복사 + 1

.SpecialCells(xlCellTypeConstants, 16).Offset(, -1).Copy Sheets("New Master Data 6.1").Range("A" & Rows.Count).End(xlUp).Offset(1) 

당신은 또한 당신이 열 B의 모든 오류 세포를하지 않도록 당신 .clearcontents 후이 작업을 수행 할 수 있습니다

해결하기 복사 한 범위를 .entirerow로 바꿀뿐입니다.

.SpecialCells(xlCellTypeConstants, 16).entirerow.Copy Sheets("New Master Data 6.1").Range("A" & Rows.Count).End(xlUp).Offset(1) 

또한 B 열의 오류를 복사하지만이 구조에서는 오류가 발생하지 않습니다. 항상 마스터 시트에서 지울 수 있습니다.

또한이 코드는 당신이 당신의 세포가 당신의 범위에 필요한 내부에서 작동하기 때문에이 코드가 활성화되는 시트 업데이트에 따라

한 번 더 참고, 그것은 그렇지 않으면 실행되지 않습니다

열 B에 저장된 모든 데이터를 덮어 쓰게됩니다주의 워크 시트는 명시 적으로 명시된 것처럼 행이 있습니다. 시트를위한 것이고 범위를 가진 것 (셀과 .rows.counmt 사용)이 더 좋을 것입니다.