2014-12-23 4 views
-1

Excel 2003에서는 동일한 레이아웃의 두 시트에서 데이터를 추출해야합니다. 예를 들면 :두 시트에서 해당 셀 (같은 행과 열)을 추출하십시오.

시트 1 (숫자)

 H1 H2 H3 H4 H5 
DAY1 20 10 22 10 23 
DAY2 14 25 21 17 8 
DAY3 26 12 13 18 9 
DAY4 2 45 8 7 9 
DAY5 6 8 7 8 30 

시트 2 (해당 자)

나는 시트 1에서 20보다 크거나 같은 모든 값을 추출 할
 H1 H2 H3 H4 H5 
DAY1 AB DF DS RE GF 
DAY2 DF SD QE TY EW 
DAY3 ER WE QW YT IY 
DAY4 WE NB RE SD HK 
DAY5 IU PO ER ER MB 

자신의 결과 시트 2의 해당 문자 :

DAY1 H1 20 AB 
DAY1 H3 22 DS 
DAY1 H5 23 GF 
DAY2 H2 25 SD 
DAY2 H3 21 QE 
DAY3 H1 26 ER 
DAY4 H2 45 NB 
DAY5 H5 30 MB 

이것을 빨리 달성하는 방법?

+0

* 당신이 묻는 것이 불분명합니다. ** **? ** – pnuts

답변

1

전혀 어렵지 않습니다. 특히 레이아웃이 좋고 시트간에 값이 실제로 일치하기 때문에 매우 쉽습니다.

  • 루프 행을 통해 Sheet1의

  • 임시 날 가져 : 여기

    는 흐름입니다.

  • 해당 행의 열을 반복합니다.

  • 각 셀의 값을 temp 값에 할당하고 테스트하십시오.

  • 기준이 맞으면 필요에 따라 세 번째 시트에 값을 할당하십시오.

테스트 :

Sub ExtractConditionally() 

Dim lastRow As Long 
Dim lastCol As Long 
Dim s1 As String  'Sheet 1 Name 
Dim s2 As String  'Sheet 2 Name 
Dim s3 As String  'Combined Sheet Name 
Dim tempDay As String 
Dim tempVal As Double 
Dim tRow As Long  'Target Row on Combined Sheet 
Dim tCol As Long  'Target Column on Combined Sheet 

    s1 = "Sheet1" 
    s2 = "Sheet2" 
    s3 = "Combined" 
    tRow = 1 'No header row for combined sheet, as shown in description 

    lastRow = Sheets(s1).Range("A" & Rows.count).End(xlUp).row 
    lastCol = Sheets(s1).Cells(2, Columns.count).End(xlToLeft).column 

    For lRow = 2 To lastRow  'Loop through Rows on Sheet1 

     tempDay = Sheets(s1).Cells(lRow, 1)   'Assign the temp Day 

     For lCol = 2 To lastCol      'Loop BY column 
      tempVal = Sheets(s1).Cells(lRow, lCol) 'Get the temp value 

      If tempVal >= 20 Then     'Test the value 
      'Matched criteria, now set the target sheet 
       Sheets(s3).Cells(tRow, 1) = tempDay 
       Sheets(s3).Cells(tRow, 2) = Sheets(s1).Cells(1, lCol) 
       Sheets(s3).Cells(tRow, 3) = tempVal 
       Sheets(s3).Cells(tRow, 4) = Sheets(s2).Cells(lRow, lCol) 
       tRow = tRow + 1  'Increment target Row 
      End If 
     Next lCol 
    Next lRow 

End Sub 

Sheet1 Sheet2 Sheet3

1

VBA없이 :

이 단계는 첫 번째 범위 here 선택 Sheet1의 데이터를 설명하십시오.

표 적용, 범위로 변환. 값 열을 ColumnD에 복사합니다. 시프트 셀을 사용하여 D1을 삭제하십시오. 선택할 필터가 ColumnD에 0보다 크고 Row1을 제외한 모두를 삭제하십시오. ColumnC에서 20보다 작은 필터를 선택하고 Row1을 제외한 모든 필터를 삭제하십시오. 마지막으로 채워진 행을 삭제하십시오.