2011-07-28 2 views
1

하나의 통합 문서에는 약 15 개의 열과 50,000 개의 행을 가진 두 개의 다른 통합 문서가 있고 다른 통합 문서에는 10 개의 열과 1000 개의 행이 있으며 두 개의 열 (부품 번호, 변경 수준) 만 공통입니다. 그래서이 두 통합 문서에서 두 개의 보고서를 가져 오려고합니다.두 개의 통합 문서 열을 비교하고 중복 목록을 새 목록으로 표시하려면 어떻게합니까?

  1. 일반 부품 번호가 & 인 레코드를 다른 통합 문서에 하나의 보고서로 포함하십시오.
  2. 첫 번째 통합 문서에서 공통 부품 번호 & 변경 레벨 레코드를 삭제하고 나머지 모든 레코드를 다른 통합 문서로 다른 보고서로 복사하려고합니다.

답변

1

엔지. . .

누구나 답변 할 수 있도록 몇 가지 질문이 있습니다.

  1. 이 데이터를 정리하고 새로운 출발점을 마련하려고 한 시간 거래이고 당신은 계속해서 또 다시이 과정을 실행할 필요가 없습니다?

  2. 데이터 행이 두 워크 북의 동일한 워크 시트 행에 없다고 가정 할 수 있습니까?

두 질문에 대한 대답이 예인 경우 Excel은 확실히 사용해야하는 Office 응용 프로그램이 아니라고 말할 수 있습니다. 두 통합 문서를 별도의 테이블로 Access 데이터베이스로 가져 오는 것이 좋습니다. 그렇게하면 코드를 거의 또는 전혀 필요로하지 않고 SQL을 사용하여 일치 및 조회를 수행 할 수 있습니다. 원하는 결과를 얻으면 쿼리 결과를 다시 Excel 통합 문서로 내보낼 수 있습니다. 1 시간 후에 답을 얻을 수 있습니다. 이 옵션을 사용하면 워크 시트를 Access DB에 링크하고 가져 오기를 피할 수 있습니다. 빠른 것은 아니지만 효과가있을 것입니다.

그렇지 않으면 Excel에서 문제가있는 경우 하나의 통합 문서에있는 모든 레코드를 반복하면서 다른 통합 문서의 값을보고 출력을 생성하는 등 상당한 양의 코드를 작성해야합니다 더 많은 워크 북에서. . . 또는. . . 1000 개의 레코드가있는 워크 시트를 다른 통합 문서로 복사 한 다음 워크 시트 함수 VLOOKUP 및/또는 HLOOKUP을 사용하여 많은 수식을 만들 수 있습니다. (좋은 양심으로는이 두 번째 접근법을지지 할 수는 없지만 VBA에서 경험이 부족한 경우에는 더 나은 접근법이 될 수 있습니다.)

어쨌든 Excel 솔루션을 사용하면 많은 작업이있을 것입니다.

특정 코딩 문제가있는 경우 올바른 위치에 있습니다. 그러나 먼저 접근 방식을 선택해야합니다.

행운을 빈다.

더그

+0

1. 아니요, 이것은 한 번 거래가 아니며 매월이 작업을 수행해야합니다. 2.이 질문을 제대로 이해하지 못했습니다. 한 워크 시트의 같은 데이터 행이 다른 워크 시트의 같은 행에 있지 않음을 의미합니까? 이것이 나의 대답이 예일 것이라는 질문 인 경우, 그것들은 두 개의 왁스 시트에서 같은 줄에 있지 않습니다. – Angiee

+0

** 네, 질문 **이었습니다. 당신이 엑셀을 사용하거나 Access에 옵션을 사용하고 있습니까? – dscarr

+0

+1 * Excel은 반드시 사용해야하는 Office 응용 프로그램이 아닙니다 *. –

0

문제는 문제는 두 배에 와서 대답 할 수있는 쉬운 일이다.

  1. 컴퓨터 속도는 얼마입니까?
  2. 얼마나 자주이 코드를 실행해야합니까?

내가 상관없이 코드가 실제로이 작품은 오히려 견고 컴퓨터가 필요 ... 지 확인하는 방법에 작은 5 만 개 라인의 코드를 실행하지 있기 때문에이 질문은 물어 이유, 그렇지 않으면이 코드 귀하의 컴퓨터를 멈추게 할 것입니다. 또는 실제로 얼마나 빨리 그리고 얼마나 많은 메모리를 가지고 있는지에 따라 3 분 이상으로 좋은 순간을 보내십시오.

통합 문서를 보지 않으면 매우 간단한 수식이 필요하지만 통합 문서에 다른 줄을 추가하면됩니다. P 열에는 검증 수식이 필요합니다. 이 공식은 간단하지만 필요한 참조 지점 수에 따라 다릅니다.

=COUNTIFS('Sheet2'!$A:$A,$A3,'Sheet2'!$E:$E,$E3)

거기에서 당신은 중복 여부 무엇인지 볼 수 있습니다. 그런 다음 열 Q이 같은 공식 가질 수 있습니다

=IF($P3,"SAME","")

을 그리고 데이터가 동일인지 아닌지는 당신을 말할 것이다. 기본적으로 P3에 0이 있으면 0이 있다고 말합니다. 그렇지 않으면 그렇지 않습니다. 이 당신의 방법에 당신을 얻을해야

Sub Update_TNOOR() 
    Dim wsS1 As Worksheet 
    Dim wsS2 As Worksheet 
    Dim lastrow As Long, fstcell As Long 

    Set wsS1 = Sheets("Sheet1") 
    Set wsS2 = Sheets("Sheet2") 

    With Application 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
     .EnableEvents = False 
    End With 

    With wsS1 
     wsS1.Columns("P:Q").ClearContents 
     ThisWorkbook.Sheets("Sheet1").Cells(1, 16).Value = “=COUNTIFS('Sheet2'!$A:$A,$A3,'Sheet2'!$E:$E,$E3)" 
     ThisWorkbook.Sheets("Sheet1").Cells(1, 17).Value = “=IF($P3,"Same",””””)" 
    wsS2.Columns("P:Q").ClearContents 
     ThisWorkbook.Sheets("Sheet2").Cells(1, 16).Value = “=COUNTIFS('Sheet1'!$A:$A,$A3,'Sheet1'!$E:$E,$E3)" 
     ThisWorkbook.Sheets("Sheet2").Cells(1, 17).Value = “=IF($P3,"Same",”Different”)" 

    End With 


    With Intersect(wsS1, wsS1.Columns("Q")) 
     .AutoFilter 1, "<>Same" 
     With Intersect(.Offset(2).EntireRow, .Parent.Range("B:Q")) 
      .EntireRow.Delete 
     End With 
     .AutoFilter 
    End With 

    'Blow away rows that are useless 
    lastrow = wsS2.Range("A2").End(xlDown).Row 
    wsS2.Range("P1:Q1").Copy wsS2.Range("P2:Q" & lastrow) 

    With Intersect(wsS2.UsedRange, wsS2.Columns("Q")) 
     wsS2.Range("P:Q").Calculate 
     .AutoFilter 1, "<>Different" 
     .SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 

    With wsS2 
     lastrow = wsS2.Range("A1").End(xlDown).Row 
     Intersect(.UsedRange, .Range("A1:N" & lastrow)).Copy wsS1.Cells(Rows.Count, "B").End(xlUp).Offset(1) 
    End With 


    With Application 
     .ScreenUpdating = True 
     .DisplayAlerts = True 
     .EnableEvents = True 
    End With 
End Sub 

... 난 당신이 올바르게 할 시도하는 것을 읽으면 :

은 거기에서이 등의 코드 정렬이 필요합니다.

사람들이 말했듯이, 당신이 원하는 것은 Excel에서 할 수 있습니다. 잘 모르겠어요 ... 여기 사람들은 생각하지 않는 것처럼 보이지만, 당신이 엑셀을 사용해야 할 필요가 있다면, 이것은 당신을 얻을 것입니다. 당신 길에.

워크 북의 모양을 알 수 없으므로 도움이 되었기를 바랍니다. 그러면 데이터가 비교되어 첫 번째 시트에 병합됩니다. IT는 당신이하고 싶은 모든 일을하지 않을 것입니다. 그러나 이것은 당신을 당신의 길로 인도 할 것입니다.