Wymaga rozwiązania VBA - Wyczyść zawartość 4 komórek na lewo od komórki z błędem N / A

0

Mam tabelę danych, w której kolumna L ma formułę vlookup. W wierszach, w których kolumna L (tzn. Vlookup zwraca „# N / A”), chciałbym wyczyścić zawartość ośmiu komórek po lewej stronie (kolumny D do K). Aby to zrobić, chciałbym utworzyć makro VBA. Każda pomoc jest bardzo ceniona.

Oto mój kod teraz:

Dim r As Range
Dim i As Long
ActiveWorkbook.Worksheets("1yr Matcher").Select
For i = 7 To 500
    For Each r In Range(Cells(10, i), Cells(Cells(ActiveSheet.Rows.Count, i).End(xlUp).Row, i))
        If IsError(r) Then
            If r >= 0 Then r.Offset(, -1).Resize(, -8).ClearContents
        End If
    Next r
Next
Ryan
źródło
Witamy w Super Użytkowniku! Proszę zobaczyć Jak zapytać aby pomóc ci pisać dobre pytania. Nie jesteśmy zasobem „napisz mój kod”, ale bardzo chętnie pomożemy Ci, gdy utkniesz. Czego spróbowałeś do tej pory? Jak daleko dotarłeś do kodu? Czy pojawia się komunikat o błędzie w konkretnej linii? Czy otrzymujesz nieoczekiwane wyniki?
Engineer Toast
Dim r As Range Dim i As Long ActiveWorkbook.Worksheets ("Sheet1"). Wybierz Dla i = 7 do 500 Dla każdego rw zakresie (komórki (10, i), komórki (komórki (ActiveSheet.Rows.Count, i). End (xlUp) .Row, i)) If IsError (r) Then Jeśli r & gt; = 0 Następnie r.Offset (, -1) .Resize (, -8) .ClearContents Zakończ jeśli Next r Następny
Ryan
Tak daleko mam.
Ryan
Lepiej też edytować pytanie niż dodawać kod do komentarzy, które mają bardzo ograniczone możliwości formatowania. Poprawa jakości pytania ułatwia innym czytanie.
Anthony Geoghegan

Odpowiedzi:

0

Myślę, że problem jest w twoim For sprawozdania. W tej chwili wartość dla r iteruje przez { G1, G2, ..., G10 } i wtedy { H1, ..., H10 } i aż do { SF1, ... SF10 }. Wygląda na to, że chcesz przejść przez wszystkie komórki w L7:L500 więc dlaczego nie zrobić tego bezpośrednio?

Dim r As Range
For Each r In Range("L7:L500")
    If IsError(r) Then
        If r >= 0 Then r.Offset(, -1).Resize(, -8).ClearContents
    End If
Next
Engineer Toast
źródło
0

Spróbuj:

Sub ErrorCleaner()
    Dim r As Range, rng As Range, L As Long
    Set rng = Range("L:L").Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
    For Each r In rng
        If r.Text = "#N/A" Then
            L = r.Row
            Range(Cells(L, "D"), Cells(L, "K")).Clear
    End If
    Next r
End Sub
Gary's Student
źródło