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

単一のセルをセルのコレクションと比較しようとしていますが、true と評価されることはありません。

各セルが別の範囲「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), "")

次に、シート 2 のセル B2 で、G2 を参照できます。

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

...等々。

于 2013-05-15T00:05:59.267 に答える