Справка VBA - Если в одной ячейке содержится определенное значение, а в другой - дата?чем другая ячейка - удалить всю строку - PullRequest
0 голосов
/ 28 ноября 2018

Я работаю над электронной таблицей, в которой есть данные, которые мне нужно удалить на основе трех разных ячеек.Вот моя цель:

Если A1 = 31 И B1 содержит дату>, а не дату в C1, удалите всю строку.Мне нужно просмотреть весь набор данных и проверить каждую строку.У меня есть удаление строки, если A1 = 31 и цикл по листу, но не может добавить компонент даты.

Вот мое кодирование.Это, вероятно, немного грязно, поскольку в основном копируется и вставляется.Я не очень опытный программист, и мне все равно, как он выглядит, пока он работает.Я также не работаю с массивными наборами данных, поэтому скорость не проблема.

Sub Remove_Future_Dates()
    Dim Firstrow As Long
    Dim LastRow As Long
    Dim Lrow As Long
    Dim CalcMode As Long
    Dim ViewMode As Long

Firstrow = ThisWorkbook.Worksheets(2).UsedRange.Cells(1).Row
LastRow = ThisWorkbook.Worksheets(2).Cells(ThisWorkbook.Worksheets(2).Rows.Count, "A").End(xlUp).Row

    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        '.ScreenUpdating = False
    End With
    With ActiveSheet
        .Select
        Firstrow = .UsedRange.Cells(1).Row
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        For Lrow = LastRow To Firstrow Step -1

            With .Cells(Lrow, "A")

                If Not IsError(.Value) Then

                    If .Value = "31" Then .EntireRow.Delete
                End If
                End With

        Next Lrow

    End With

End Sub

1 Ответ

0 голосов
/ 28 ноября 2018

Все еще неясно

Это еще не рабочий код!

Если вы не собираетесь запускать этот код на разных листах, вам следует заменить ActiveSheet на индексный номер, как вы это сделали с Worksheets(2).Тем не менее, предпочтительнее использовать имена рабочих листов, но лучше всего использовать имена кодов.

Вам нужно будет определить имя (или индекс) «OtherWorksheet», которое я использовал, и настроить его столбец и строку.Раскомментируйте прокомментированные части только после того, как код заработал.

Я заставляю этот код работать, если вы предоставляете имена или индексы всех рабочих листов и точную «серию из 3» данных, например A1,B1 на листе 1, рабочий лист (1), рабочий лист («главный») или ActiveSheet и C2 на листе 3, рабочий лист (3) или рабочий лист («ведомый»).

Option Explicit

Sub Remove_Future_Dates()

    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

    On Error GoTo SafeExit

    With ThisWorkbook.Worksheets(2)
        Firstrow = .UsedRange.Cells(1).Row
        LastRow = .Worksheets(2).Cells(Rows.Count, "A").End(xlUp).Row
    End With

    With ActiveSheet
        For Lrow = LastRow To Firstrow Step -1
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Value = "31" _
                        And .Offset(0, 1) > _
                        ThisWorkbook.Worksheets("OtherWorksheet") _
                            .Cells(Lrow + 1, "C") _
                        Then .EntireRow.Delete
                End If
            End With
        Next Lrow
    End With

SafeExit:

'    With Application
'        CalcMode = .Calculation
'        .Calculation = xlCalculationManual
'        .ScreenUpdating = True
'    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...