使用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
有没有快速实现这一目标的方法?
答案 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
答案 1 :(得分:1)
没有VBA:
按照详细步骤here选择第一个范围的Sheet1数据。
应用表格,转换为范围。将Value列复制到ColumnD。删除带有移位单元格的D1。要在ColumnD中选择的筛选大于0
,并删除除Row1之外的所有内容。要在ColumnC中选择的过滤器小于20
并删除除Row1之外的所有内容。删除上一个填充的行。