从两张纸中提取相应的单元格(相同的行和列)

时间:2014-12-23 22:11:46

标签: excel vba excel-vba vlookup excel-2003

使用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(对应字符)

      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

我想从Sheet 1中提取大于或等于20的所有值及其在Sheet 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

有没有快速实现这一目标的方法?

2 个答案:

答案 0 :(得分:1)

这一点都不难。因为你有一个很好的布局,而且这些值实际上是从一张纸到另一张相匹配,所以它非常容易。

以下是流程:

  • 遍历Sheet1

  • 上的行
  • 获得临时日。

  • 遍历该行的列。

  • 将每个单元格的值分配给临时值并对其进行测试。

  • 如果符合条件,请根据需要在第三张纸上指定值。

<强>试验:

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 :(得分:1)

没有VBA:

按照详细步骤here选择第一个范围的Sheet1数据。

应用表格,转换为范围。将Value列复制到ColumnD。删除带有移位单元格的D1。要在ColumnD中选择的筛选大于0,并删除除Row1之外的所有内容。要在ColumnC中选择的过滤器小于20并删除除Row1之外的所有内容。删除上一个填充的行。