2010-08-18 5 views
0

통합 문서에는 Sheet1, Sheet2, Sheet3의 세 개의 시트가 있습니다. 시트 2가에는 GroupA '모든 행을 포함하도록Excel 매크로 - 한 시트에서 다른 시트로 행을 반복적으로 복사합니다.

key  values 
GroupA  aaa, bbbb 
GroupB  ccc, dddd 

이 어떻게 다른 시트 시트 2 및 Sheet3의 데이터를로드 할 수

aaa 3 
aaa 2 
aaa 45 
aaa 211 
aaa 12 
bbbb 3 
bbbb 2 
bbbb 4 
ccc 2 
ccc 5 
dddd 2 
dddd 10 
dddd 25 

이 같은 해시 테이블이있을 것입니다 : Sheet1에 다음과 같은 데이터가 'Sheet3 매크로 Subroutine을 사용하여 Sheet1에'GroupB '가있는 모든 행이 있습니까?

EDIT :
제가 그들의 값 등에는 GroupA, GroupB가를 저장하는 구조의 해시 테이블 종류를 사용하고자하는 반복적 프로세스가 각 그룹 w.r.t 따라서 SHEET1.

+0

제안하는대로 실제로해야합니까? 아마도 당신이 성취하고자하는 것에 대해 더 구체적이라면, 누군가 당신이 지금까지 생각한 것보다 더 우아한 해결책을 제안 할 수 있습니다. –

답변

0

테이블 스타일을 고수해야합니까? 시트 1의 추가 열에 그룹을 포함시킨 다음 시트 2에 대한 피벗 테이블을 사용할 수 있다고 생각하면

+0

감사합니다. 추가 열이 도움이됩니다. 의사 코드가 도움이 될 것입니다. 다시 한번 감사드립니다. – Abhishek

+0

이렇게하면 코드를 작성하지 않아도됩니다. 다음은 피벗 테이블 사용에 대한 링크입니다. http://www.dummies.com/how-to/computers-software/ms-office/excel/data/using-tables.html 기본적으로 아이디어는 다음과 같습니다. 당신은 날짜 (귀하의 경우 Sheet1)의 소스를 가지고 당신이 다른 방식으로 그것을 표시하기 위해 데이터를 "피벗"그래서 당신은 단지 그룹 1 등의 레코드를 보여줄 수있는 필터가됩니다 Sheet2에 –

2

ADO를 사용할 수 있습니다.

Dim cn As Object 
Dim rs As Object 
Dim rs2 As Object 
Dim sFile As String 
Dim sCon As String 
Dim sSQL As String 
Dim s As String 
Dim i As Integer, j As Integer 

''This is not the best way to refer to the workbook 
''you want, but it is very convenient for notes 
''It is probably best to use the name of the workbook. 

sFile = ActiveWorkbook.FullName 

''Note that if HDR=No, F1,F2 etc are used for column names, 
''if HDR=Yes, the names in the first row of the range 
''can be used. 
''This is the Jet 4 connection string, you can get more 
''here : http://www.connectionstrings.com/excel 

sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFile _ 
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 

''Late binding, so no reference is needed 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 
Set rs2 = CreateObject("ADODB.Recordset") 


cn.Open sCon 

sSQL = "SELECT Key, [Values] " _ 
     & "FROM [Sheet2$] " 

rs.Open sSQL, cn, 3, 3 

i = 3 
Do While Not rs.EOF 

    sSQL = "SELECT Key, [Values] " _ 
      & "FROM [Sheet1$] " _ 
      & "WHERE '" & rs![Values] _ 
      & "' Like '%' & Key & '%' " 

    rs2.Open sSQL, cn, 3, 3 

    ''Pick a suitable empty worksheet for the results 
    ''Worksheets.Add 
    With Worksheets("Sheet" & i) 
     .Cells(1, 1) = rs!Key 

     For j = 0 To rs.Fields.Count - 1 
      .Cells(2, j + 1) = rs.Fields(j).Name 
     Next 

     .Cells(3, 1).CopyFromRecordset rs2 
    End With 

    rs.MoveNext 
    i = i + 1 
    rs2.Close 
Loop 

''Tidy up 
rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 
+0

일부 ADO 치료 +1 데이터로 워크 시트를 능가하십시오! –

관련 문제