Макрос очищает все ячейки вместо тех, которые равны 0 после Vlookup - PullRequest
0 голосов
/ 15 января 2019

У меня есть макрос, который запускает и форматирует еженедельный отчет о счетах старения.Он запускает Vlookup против файла предыдущей недели, чтобы вернуть обновления, введенные покупателями.Я вставил ИГЕРРОР, чтобы не вернуть #N/A.У нас также есть некоторый написанный код, который был предназначен для изменения любых ячеек, равных «0», но он не работает.

Вместо того, чтобы заменять пустые ячейки, равные 0, он очищает ВСЕ значения ячеек, включая обновления, которые были введены Vlookup.Я далеко не эксперт по кодам, и человек, который мне помогал, взял на себя новую роль и довольно занят.Мне удалось исправить пару других проблем с кодом, но это поставило меня в тупик.

Selection.AutoFilter
ActiveSheet.Range("A1:V" & LastRow).AutoFilter Field:=9, Criteria1:="0"
Range("I2", "I" & LastRow).SpecialCells(xlCellTypeVisible).Select

Set myrange = Selection
If myrange Is Nothing Then

Else
    Selection.ClearContents
    Selection.FillDown
    Selection.AutoFilter
End If

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Попробуйте код ниже, он очистит значения всех ячеек с 0 в столбце «I». Пояснения в комментариях к коду.

Option Explicit

Sub ClearZerosOnly()

Dim Rng As Range, myRange As Range
Dim LastRow As Long
Dim Sht As Worksheet

Set Sht = ThisWorkbook.Sheets("Sheet1") ' change "sheet1" to your sheet's name
With Sht
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("A1").AutoFilter

    Set Rng = .Range("A1:V" & LastRow)
    Rng.AutoFilter Field:=9, Criteria1:="0" ' set the Auto-Filter criteria 

    ' set the Visible range and column I (from row 2, without header)
    Set myRange = Application.Intersect(Rng.SpecialCells(xlCellTypeVisible), .Range("I2:I" & LastRow))
End With

If Not myRange Is Nothing Then myRange.ClearContents

End Sub
0 голосов
/ 15 января 2019

Я полностью согласен с комментарием PEH о том, что следует избегать операторов выбора и т.п., и далее я бы добавил, что лучше всего избегать таких вещей, как Activesheet - вместо этого всегда указывайте, на какой лист вы ссылаетесь.

в любом случае, есть много способов сделать то, что вы ищете. Одним из способов было бы использовать метод Find класса Range, это очень похоже на диалог поиска и замены, который вы получаете, когда нажимаете Ctrl + F.

Cells.Copy
Cells.PasteSpecial xlPasteValues ' replace formulas with their result
Cells.Replace What:="0", Replacement:="", LookAt:=xlWhole ' replace "0" with an empty string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...