1

コンテキスト: N 行と 3 列 (SerialNum、DeviceID、DateTime) の Excel テーブルがあります。DeviceID は一意です (値が繰り返されないため)。ただし、SerialNum と DeviceID の間には 1:N の関係が存在する可能性があります (したがって、同じシリアル番号に複数の DeviceID がある場合があります)。重複した SerialNum 値を削除して、各 SerialNum に関連付けられた 1 つの DeviceID を持たせたいと考えています。

質問: 問題は、重複したシリアル番号のグループごとに、DateTime 値が最新 (つまり、最新) の DeviceID を保持したいことです。これを行う方法はありますか?

4

1 に答える 1

1

1 つのオプションはColumn A、シリアル番号の各項目をテストして、そのシリアル番号の最大の日付/時刻を決定することです。シリアル番号の 2 つのエントリの正確な日付/時刻が同じである場合に、この方法を使用する際に私が目にする唯一の実際のリスクです。これが可能性があると思われる場合は、テストするか、2 番目のループを実行して、使い慣れたルールに基づいて重複した SN を削除することができます。

以下のコードを見て、それがあなたのニーズを満たしているかどうか教えてください。

Sub RemoveDuplicateSerialNumbersUnlessSerialNumberIsMostRecentDateTimeValue_Dawg()
    Dim nLastRow As Long
    Dim dtMaxDateTime As Date
    Dim strFormula As String

    nLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

    For i = nLastRow To 2 Step -1
        strFormula = "=MAX(IF(A2:A16=" & Cells(i, 1).Address & ",C2:C16))"
        dtMaxDateTime = Evaluate(strFormula)

        If Cells(i, 3).Value = dtMaxDateTime Then
            'Do Nothing Unless You Want TO
        Else
            Rows(i).Delete
        End If
    Next i

End Sub
于 2015-02-13T20:38:51.693 に答える