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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.