2014-03-31 2 views
0

나는이 작업을 같은 주 동안 검색하여 수행했지만 해결 방법을 찾지 못했습니다. 여러분이 해결책을 제시해 주셨으면합니다.
VBA 대용량 데이터 요약

내 조건은 다음과 같습니다 :
1. I가 2 개 엑셀 통합 문서
로그에서 (1 : Log.xlsx은 - -, 데이터를 요약하는
2 data.xls 데이터 소스)
(2) .xlsx, 생산 날짜, 제품 ID 및 로트 번호가 있습니다.
3. data.xls에서 생산 수율 결과 (다른 ID에 대해 다른 워크 시트가 있음)
FYI, 워크 시트 번호가 약 100 워크 시트
4. I 동일한 날짜, 제품 ID 및 lot # (Log.xlsx에서
과 일치)에서 yield 결과 (data.xls)를 검색하려면 다음을 입력하십시오.

당신이 이것을 가능하게하는 방법을 나에게 조언을 할 수 Log.xlsx 수율 결과는
5. data.xls 워크 시트의 이름은 제품 ID는 다른,하지만 실제 제품 ID는
B2 셀에 표시됩니다?
정말 감사드립니다.

감사합니다.

답변

0

그 코드를 log.xlsx에 가정 모두 통합 문서가 현재 열려있는,이

Option Explicit 

Public Sub DataSummary() 
Dim wbData As Workbook 
Dim wsLog As Worksheet 
Dim wsDataSet As Worksheet 
Dim i, j, k As Integer 
Dim prodDate As Date 
Dim prodID As String 
Dim lotNumber As Integer 

Set wbData = Workbooks("Data.xls") 
Set wsLog = ThisWorkbook.ActiveSheet 

For i = 2 To wsLog.UsedRange.Rows.Count 
    prodDate = wsLog.Cells(i, 1).Value 
    prodID = wsLog.Cells(i, 2).Value 
    lotNumber = wsLog.Cells(i, 3).Value 
    For Each wsDataSet In wbData.Worksheets 
     If wsDataSet.Cells(2, 2).Value = prodID Then 
      For j = 4 To wsDataSet.UsedRange.Rows.Count 
       If wsDataSet.Cells(j, 1).Value = prodDate And wsDataSet.Cells(j, 3).Value = lotNumber Then 
        wsLog.Cells(i, 4).Value = wsDataSet.Cells(j, 4).Value 
        wsLog.Cells(i, 5).Value = wsDataSet.Cells(j, 5).Value 
        wsLog.Cells(i, 6).Value = wsDataSet.Cells(j, 6).Value 
        wsLog.Cells(i, 7).Value = wsDataSet.Cells(j, 7).Value 
        Exit For 
       End If 
      Next j 
      Exit For 
     End If 
    Next wsDataSet 

Next i 

End Sub 

Here is link to excel files with code and sample data.

이 아래는 log.xlsx하는 data.xls에서 7까지의 항목 4를 복사합니다 코드를 추가로 확인하십시오. 그것은 일치하는 yeild가 없을 때 "0"을 넣습니다.

Option Explicit 

Public Sub DataSummary() 
Dim wbData As Workbook 
Dim wsLog As Worksheet 
Dim wsDataSet As Worksheet 
Dim i, j, k As Integer 
Dim prodDate As Date 
Dim prodID As String 
Dim lotNumber As Integer 
Dim foundIt As Boolean 
Dim Message As String 

Message = "0" 
Set wbData = Workbooks("Data.xls") 
Set wsLog = ThisWorkbook.ActiveSheet 

For i = 2 To wsLog.UsedRange.Rows.Count 
    foundIt = False 
    prodDate = wsLog.Cells(i, 1).Value 
    prodID = wsLog.Cells(i, 2).Value 
    lotNumber = wsLog.Cells(i, 3).Value 
    For Each wsDataSet In wbData.Worksheets 
     If wsDataSet.Cells(2, 2).Value = prodID Then 
      For j = 4 To wsDataSet.UsedRange.Rows.Count 
       If wsDataSet.Cells(j, 1).Value = prodDate And wsDataSet.Cells(j, 3).Value = lotNumber Then 
        wsLog.Cells(i, 4).Value = wsDataSet.Cells(j, 4).Value 
        wsLog.Cells(i, 5).Value = wsDataSet.Cells(j, 5).Value 
        wsLog.Cells(i, 6).Value = wsDataSet.Cells(j, 6).Value 
        wsLog.Cells(i, 7).Value = wsDataSet.Cells(j, 7).Value 
        foundIt = True 
        Exit For 
       End If 
      Next j 
      Exit For 
     End If 
    Next wsDataSet 
    If Not foundIt Then 
     wsLog.Cells(i, 4).Value = Message 
     wsLog.Cells(i, 5).Value = Message 
     wsLog.Cells(i, 6).Value = Message 
     wsLog.Cells(i, 7).Value = Message 
    End If 
Next i 

End Sub 

이 진정한 해결책의 거친 scetch 것을 기억하십시오, 당신은 데이터가 올 경우 더 많은 검사가 마지막으로 내가 요약 할 수 있습니다!

+0

정말 감사 등을 볼 예외 처리를 추가해야 자료! 예상대로. 다시 감사합니다!. 하나만 더 질문 할 수 있습니까? 로트 번호를 "0"으로 표시하려면 무엇을 추가해야합니까? 미확인 로트 번호? 미리 감사드립니다. – Nesloais