0

次のことを行うために、Excel vba でループをコーディングしようとしています。

長い日付と時刻の列があります。テキスト文字列を含む別の列があります。

時間の変化 (行 - 上の行) が 0:00:05 未満であり、文字列の値が同じ (行と上の行) である場合、行全体を削除したい

IF 条件、特に 5 秒の部分で問題が発生しています。気に入らない...

For Lrow = Lastrow To Firstrow Step -1

  'We check the values in the D column
   With .Cells(Lrow, "D")

      If Not IsError(.Value) Then

        If (Cells(i,"D") - Cells(i-1,"D")) > (0:00:05) AND (Cells.Value(i,"F") = 
        Cells.Value(i-1,"F")
        Then .EntireRow.Delete

      End If

  End With

Next Lrow

OK、上記のコードは最悪です。別のタックルを探索するつもりです。列 F - 現在のセルとその下のセルを比較したい。それらが同じである場合、次の句をトリガーします-Dの現在のセルがその下のセルと0:00:05秒未満であるかどうかを確認し、そうであれば削除します(またはループの外で削除する情報を保存します)。

F の 2 つのセルが同じでない場合は、次のセルにスキップします。

それはもっと理にかなっていますか?コードを作成してここに投稿しましょう。

4

3 に答える 3

1

正しくないように見えるいくつかのインデックスを含む、さまざまな問題が見られます。ここに改善されたバージョンがあります (より明確に見えるため、ループは前方に進みます):

     Dim toDelete(10) As Integer 'Put same size than Lastrow rather than 10
     Dim toDeleteCount As Integer: toDeleteCount = -1
    'FirstRow has to be greater or equal than 2
    Firstrow = 2
    For Lrow = Firstrow To Lastrow Step 1

            'We check the values in the D column
             With Cells(Lrow, "D")
                If Not IsEmpty(.Value) Then

                    If ((CDate(Cells(Lrow, "D")) - CDate(Cells(Lrow - 1, "D")) > CDate("0:00:05")) And (Cells(Lrow, "F") = Cells(Lrow - 1, "F"))) Then
                        Cells(Lrow, "D") = ""
                        Cells(Lrow, "F") = ""
                        'You cannot delete the whole row inside the loop. Just delete the values in the cells you want or store the row number in a variable such that you can delete all the rows outside the loop
                        toDeleteCount = toDeleteCount + 1
                        toDelete(toDeleteCount) = Lrow
                    End If
                End If

            End With
        Next Lrow
        If (toDeleteCount >= 0) Then
           For Each rDelete In toDelete
              Rows(rDelete).Delete
           Next rDelete
        End If
于 2013-07-03T17:02:11.157 に答える