2017-08-04 7 views
3

私は、このプロジェクトの最初のマクロを作成しています。このマクロは、モーションセンサーから次のデータをエクスポートします。それは、「動き検出」行ごとに「動きなし」を持ちます。この「動きなし」は、センサーのファームウェア内で編集できないグリッチです。したがって、次のようになります。Excel VBAで現在のセルのセル値に基づいてExcelシートの前の行を削除する必要があります

DataMessageGUID SensorID Sensor Name Date Value Formatted Value Battery 
5d6f57c1-7449-4da3-a9fa-9709ae4b0671 3Bedroom Left 8/4/2017 8:57 0 No Motion 100 
adaa026e-8847-4eab-ac48-6ac93fc93f16 3Bedroom Left 8/4/2017 8:56 1 Motion Detected 100 
0b4287f2-258e-48d5-97e6-e00ed3c68a6a 3Bedroom Left 8/4/2017 8:56 0 No Motion 100 
0a3ba320-f8e5-4ae9-97ac-26c5269e811e 3Bedroom Left 8/4/2017 8:55 1 Motion Detected 100 
1946aa41-fbaf-4a0d-8e5e-c846ef0cdb24 3Bedroom Left 8/4/2017 8:55 0 No Motion 100 
ae214e59-c93f-4832-bfd9-5c011a60435a 3Bedroom Left 8/4/2017 8:54 1 Motion Detected 100 
c2518ff0-053c-49fd-99e6-e6ed20798279 3Bedroom Left 8/4/2017 8:22 0 No Motion 100 
e1678d9e-c919-4378-8021-cc669b45918a 3Bedroom Left 8/4/2017 8:21 1 Motion Detected 100 
ed8c20ee-3630-4b68-8063-788b25f7c433 3Bedroom Left 8/4/2017 8:19 0 No Motion 100 
7d537313-9133-4525-9ef8-fcb1fbce81ad 3Bedroom Left 8/4/2017 8:19 1 Motion Detected 100 
dcaa463c-0ff0-4a17-9881-f67641fae014 3Bedroom Left 8/4/2017 8:16 0 No Motion 100 
c66d16d2-063b-4aca-bd81-3abdaaa3063f 3Bedroom Left 8/4/2017 8:15 1 Motion Detected 100 
1fbf6e16-c8e8-4a18-ae71-42195fcf6e48 3Bedroom Left 8/4/2017 8:14 0 No Motion 100 
7f5ed16c-ab3d-411e-a2c7-851eeb5641d4 3Bedroom Left 8/4/2017 8:13 1 Motion Detected 100 
63f79047-143b-4b17-a359-6d6eac1d3a43 3Bedroom Left 8/4/2017 8:13 0 No Motion 100 
52f857f2-5b5b-4fec-b7da-67390236f473 3Bedroom Left 8/4/2017 8:12 1 Motion Detected 100 
19bce92e-0068-4f46-ac1d-a79877c88a0c 3Bedroom Left 8/4/2017 8:12 0 No Motion 100 

「モーション検出」行の直後に表示される「モーションなし」を削除する必要があります。これは本当に動作しないと、ほとんど私が間違っている行を削除終わる

Sub Macro_Delete_rows() 
Dim Firstrow As Long 
Dim Lastrow As Long 
Dim Lrow As Long 
Dim CalcMode As Long 
Dim ViewMode As Long 

With Application 
    CalcMode = .Calculation 
    .Calculation = xlCalculationManual 
    .ScreenUpdating = False 
End With 

With ActiveSheet 
    .Select 
    ViewMode = ActiveWindow.View 
    ActiveWindow.View = xlNormalView 

    .DisplayPageBreaks = False 

    'Set the first and last row to loop through 
    Firstrow = .UsedRange.Cells(1).Row 
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row 

    For Lrow = Lastrow To Firstrow Step -1 
     With .Cells(Lrow, "F") 
      If Not IsError(.Value) Then 
       If .Value = "Motion Detected" Then .Rows(Lrow - 1).EntireRow.Delete 
       'Here I try to delete previous row to this row 
      End If 
     End With 
    Next Lrow 
End With 

ActiveWindow.View = ViewMode 
With Application 
    .ScreenUpdating = True 
    .Calculation = CalcMode 
End With 

End Sub 

:私が編集したオンラインコードの助けを借りて

は、私はこれを得ました。どこが間違っていますか?

ありがとうございました!

答えて

0

があなたのForループとしてこれを試してみてください:

For Lrow = Lastrow To Firstrow Step -1 
     With .Cells(Lrow, "F") 
      If Not IsError(.Value) Then 
       If .Value = "No Motion" And .Offset(-1, 0) = "Motion Detected" Then 
        .EntireRow.Select 
        .EntireRow.Delete 
       End If 
      End If 
     End With 
    Next Lrow 

アイデアは、前の行は、「モーション検出」でそれが現在の行が「NOモーション」ではないかどうかを確認するために見えることです。その場合は、その "No Motion"行を削除してください。

元のコードは正しい軌跡でしたが、「モーション検出」行がないため、最後の「モーションなし」行は削除されません。

0

これが問題を解決します。

Sub Macro_Delete_rows() 
Dim TotalRows As Long 
TotalRows = Application.WorksheetFunction.CountA(Sheets("yourSheetName").Range("A:A")) 
    For i = 2 To TotalRows 
     'You can delete the data by 0 before No Moton Cell 

     'if G colomn has No Motion 
     Range("G" & i).Select 
     If ActiveCell.Value = "No Motion" Then 
      ActiveCell.EntireRow.Delete 
      i = 1 - 1 
     End If 
'  'If F column has 0 
'  Range("F" & i).Select 
'  If ActiveCell.Value = 0 Then 
'   ActiveCell.EntireRow.Delete 
'   i = 1 - 1 
'  End If 

    Next i 

End Sub 
関連する問題