在这种情况下,我检查"F“范围内的每个单元格。并查看每个单元格是否与单独范围"D“中的任何单元格匹配。如果是,我想知道该单元格所在的行号,并将其(以及同一行的其他列中的信息)复制到另一个工作表中。如果它找不到匹配项,它将打印它找不到的单元格,并在其旁边打印"0“。如何找到该数据所在行的值?
Dim lastrow As Integer
lastrow = Range("F65336").End(xlUp).Row
Dim C As Integer
C = 2
For Each cell In Range("F2:F" & lastrow)
If cell.Value = Range("D2:" & lastrow) Then
sheet2.Range("B" & C).Value = Sheet1.Range("D" & C).Value
Sheet1.Range("D" & C).Value = Sheet1.Range("F" & VALUE_OF_ROW_OF_MATCHING_CELL).Value
sheet2.Range("C" & C).Value = Sheet1.Range("H" & VALUE_OF_ROW_OF_MATCHING_CELL).Value
Else
sheet2.Range("B" & C).Value = Sheet1.Range("D" & C).Value
Sheet1.Range("C" & C).Value = 0
End If
C = C + 1
Next cell
发布于 2013-05-15 00:05:59
这怎么行得通呢?
If cell.Value = Range("D2:" & lastrow) Then
它尝试将单个单元格与一组单元格进行比较,结果永远不会为真。
Dim lastrow As Integer
lastrow = Range("F65336").End(xlUp).Row
Dim fCell, dCell
For Each fCell In Range("F2:F" & lastrow)
Dim fRow As Integer
fRow = fCell.Row
'prepopulate with default, not-found values
Sheet2.Range("B" & fRow).Value = Sheet1.Range("D" & fRow).Value
Sheet1.Range("C" & fRow).Value = 0
For Each dCell In Range("D2:D" & lastrow)
If fCell.Value = dCell.Value Then
Dim dRow As Integer
dRow = dCell.Row
Sheet2.Range("B" & fRow).Value = Sheet1.Range("D" & dRow).Value
Sheet1.Range("D" & fRow).Value = Sheet1.Range("F" & dRow).Value
Sheet2.Range("C" & fRow).Value = Sheet1.Range("H" & dRow).Value
End If
Next dCell
Next fCell
请注意,上面假设范围跨越相同的行集。如果确实是这样,那么我会建议使用vlookup。
例如,您可以使用列G来执行vlookup。将此代码放入G2中,然后填写:
=IFERROR(VLOOKUP(F2,D:D,1,FALSE), "")
然后,在单元格B2中,您可以引用G2:
=IF(Sheet1!G2="","",Sheet1!D2)
...and等等。
https://stackoverflow.com/questions/16552053
复制