VBA стереть формулы в определенном диапазоне ячеек, если возвращается пустое или ""? - PullRequest
0 голосов
/ 14 октября 2019

В рабочей книге есть формулы, которые возвращают выходные данные, если они совпадают с X и "", если нет. Я новичок в VBA и макросах и не знаю, с чего начать. Но моя цель - иметь макрос, который я мог бы запустить, который очищает формулу, если она пуста или "" на нескольких листах. Я хотел бы отметить, что я хочу, чтобы это делалось только в определенных столбцах каждого листа.

Пример:
Лист 1 имеет формулу в ячейках H10: K20, в то время как Лист 2 имеет формулу в AV8: AV400и т. д. и т. д. Цель состоит в том, чтобы он распознал «Лист 1» в диапазоне H10: K20, где он будет стираться, Лист 2 - это AV8: AV400.

Любая помощь будет принята с благодарностью!

Я нашел другой вопрос, который был похож на него, но я не мог понять, как заставить его распознавать разные имена листов или определенные диапазоны в моем файле. Я вставил код, который нашел и попытался использовать ниже, а также ссылку здесь.
Как очистить ячейку, если формула возвращает пустое значение?

Sub ClearCell()
    Dim Rng As Range
    Set Rng = ActiveSheet.Range("A1")

    Dim i As Long
    For i = 1 To 10
        If Rng.Cells(i,1) = "" Then
           Rng.Cells(i,1).ClearContents
        End If
    Next i
End Sub

1 Ответ

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

Может быть, что-то очень простое:

Sub ClearEmptyFormulas()

Dim ws As Worksheet
Dim rng As Range, cl As Range

For Each ws In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) 'Extend the array or loop all worksheets
    Select Case ws.Name
        Case "Sheet1"
            Set rng = ws.Range("H10:K20")
        Case "Sheet2"
            Set rng = ws.Range("AV8:AV400")
        'Etc
    End Select
    For Each cl In rng
        If cl.Value = "" Then
            cl.ClearContents
        End If
    Next cl
Next ws

End Sub

Или даже немного проще:

Sub ClearEmptyFormulas()

Dim rng As Range, cl As Range
Dim arr1 As Variant: arr1 = Array("Sheet1", "Sheet2")
Dim arr2 As Variant: arr2 = Array("H10:K20", "AV8:AV400")

For x = 0 To 1
    Set rng = Sheets(arr1(x)).Range(arr2(x))
    For Each cl In rng
        If cl.Value = "" Then
            cl.ClearContents
        End If
    Next cl
Next x

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