Excel VBA: как очистить содержимое для указанных ячеек, если другая ячейка содержит определенный текст или строку - PullRequest
1 голос
/ 03 октября 2019

У меня возникли проблемы с поиском кода VBA для удаления нескольких определенных ячеек, если определенная ячейка содержит определенный текст. Эта электронная таблица может также выполнять около 100 тыс. Строк, но будет варьироваться в зависимости от извлечения данных.

Определенный VBA сможет выполнять следующие действия:

Если ячейка J3 равна # N / A, пусто или 0, то очистить содержимое ячеек J3: K3 и P3: X3,и затем повторите, пока не достигнет нижней части столбца J.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Я предпочитаю помещать значения в массив, если вы собираетесь изменять кучу ячеек в подпрограмме. Как правило, это значительно ускоряет процесс.

Начните с настройки таблицы и объектов диапазона. Обратите внимание, что приведенный ниже код в настоящее время использует индекс 1 для рабочего листа здесь: Set ws = ThisWorkbook.Worksheets(1). Если это не тот лист, который вам лично нужен, вам придется это изменить.

Затем поместите содержимое ячейки всего диапазона в массив. Как я упоминал ранее, этот процесс быстрее, чем вносить изменения в отдельные ячейки 1 за один раз.

Зацикливать массив, проверяя либо конкретное значение ошибки #N/A, либо другие критерии. Если этот критерий совпадает, вы введете другой цикл, который быстро проходит по «столбцам» в строке, и будет удалять значения только из указанных вами столбцов.

После завершения переписать массив обратно врабочий лист.

Sub main()

    Dim ws As Worksheet, rng As Range, dataArr() As Variant
    Set ws = ThisWorkbook.Worksheets(1)
    Set rng = ws.Range("J3:X" & ws.Cells(ws.Rows.Count, "J").End(xlUp).Row)

    ' Place the entire contents of worksheet range into an array
    dataArr = rng.Value

    Dim i As Long, x As Long, clearRow As Boolean
    For i = LBound(dataArr) To UBound(dataArr)

        If IsError(dataArr(i, 1)) Then
            If dataArr(i, 1) = CVErr(xlErrNA) Then clearRow = True
        ElseIf dataArr(i, 1) = vbNullString Or dataArr(i, 1) = 0 Then
            clearRow = True
        End If

        ' Loop thru the columns (x) of the current row (i)
        If clearRow Then
            For x = 1 To 15
                Select Case x
                Case 1, 2, 7 To 15
                    dataArr(i, x) = ""
                End Select
            Next x
            clearRow = False
        End If

    Next i

    ' Re-write the entire array back to the worksheet in one step
    rng.Value = dataArr

End Sub
0 голосов
/ 03 октября 2019

Как очистить содержимое для указанных ячеек, когда другая ячейка содержит определенный текст или строку

Dim cellToClear As Range
Dim cellToCheck As Range
Dim specificText As String
If cellToCheck.Value = specificText Then cellToClear.ClearContents

"У меня возникли проблемы при попытке найти код VBA"

Эти ссылки содержат код VBA, который вы можете использовать, когда у вас больше не будет проблем с попытками. Они содержат примеры, которые вы можете вставить в свой проект и изменить для своих нужд.

Эта ссылка содержит примеры того, как читать содержимое ячейки .

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

Цикл - это когда программа повторяет одну и ту же последовательность шагов, обычно до тех пор, пока не будет выполнено определенное условие. Примеры различных циклов можно найти здесь .

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