0

在这种情况下,我正在检查“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
4

1 回答 1

1

这怎么能行?

If cell.Value = Range("D2:" & lastrow) Then

它试图将单个单元格与一组单元格进行比较,并且永远不会评估为真。

既然您提到您正在查看每个单元格是否与单独范围“D”中的任何单元格匹配,我认为您的代码中的每个单元格都需要另一个:

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

请注意,以上假设范围跨越同一组行。如果确实如此,那么我建议您考虑改用 vlookups。

例如,您可以使用 G 列执行 vlookup。将其放入 G2 并填写:

 =IFERROR(VLOOKUP(F2,D:D,1,FALSE), "")

然后,在 Sheet2 的单元格 B2 中,您可以引用 G2:

 =IF(Sheet1!G2="","",Sheet1!D2)

...等等。

于 2013-05-15T00:05:59.267 回答