Makro zmieniejące pełne komórki na puste

0

Chciałem napisać proste makro które komórki w których są zera zamienia na puste komórki

To jest kod makra

Sub Makro2()
'
' Makro2 Makro
'

'
ActiveCell.FormulaR1C1 = "=COUNTA(C[-21])"
Range("V3").Select

Z = Cells(2, 20)

For i = 1 To 500 - Z
Cells(Z + i, 14).Value = " "
Next i

End Sub

Ten kawałek makra
ActiveCell.FormulaR1C1 = "=COUNTA(C[-21])"
Range("V3").Select

to po prostu zliczanie ile jest niepustych komórek i umieszczenie tej wartości polu (2,20)

Niestety makro wypełnia pustymi komórkami wszystkie komórki w kolumnie N. Jeżeli zamiast Z umieszczę fizycznie to ile jest niepustych komórek czyli w moim arkuszu 141 a zamiast 500 - Z umieszczę 359 to makro działa poprawnie. Dlaczego nie działa takim kodem jaki umieściłem powyżej?

0

Poniżej dwa makra:

Sub ver01()

    Range("A1:A6").Replace What:="0", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub
Sub ver02()
Dim cell02 As Range

For Each cell01 In Range("A1:A6")
    If cell01.Value = 0 Then
        cell01.Value = ""
    End If
Next cell01

End Sub

W Range zmień na potrzebny zakres.

0
chillycamel napisał(a):

Poniżej dwa makra:

Sub ver01()

    Range("A1:A6").Replace What:="0", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub
Sub ver02()
Dim cell02 As Range

For Each cell01 In Range("A1:A6")
    If cell01.Value = 0 Then
        cell01.Value = ""
    End If
Next cell01

End Sub

W Range zmień na potrzebny zakres.

Po zastosowaniu pierwszego makra niektóre wartości zamieniło mi na błąd ARG! a w innych pojawił się znacznik niespójna formuła. Drugie makro nigdy się nie wyłącza. W jednym i drugim zmieniłem zakres na Range("N:N"). Problem polega na tym, że chciałem zerować od konkretnego wiersza a mianowicie od tego po którym kończą mi się wartości liczbowe. Mam do wyzerowania kolumny N,O i P. a w kolumnie O mam same zera i komórki na puste chciałem zamieniać od tej po której kończą mi się w pozostałych wartości liczbowe. Dlatego używam funkcji ILE.NIEPUSTYCH.

0

Załącz plik na którym pracujesz.

0

Dołączam plik z danymi. Proszę o pomoc.

0

Drugie makro nigdy się nie wyłącza, bo ustawiłeś zakres N:N. Czyli makro bada wszystkie komórki w kolumnie do samego końca arkusza. Dlatego powinieneś określić konkretny zakres np. O1:O100.
Żeby to zautomatyzować, musisz dodać do drugiego makra:

Dim bottom01 As Single
bottom01 = Range("a1").End(xlDown).Row
```

A początek pętli zmienić na:
````vba
For Each cell01 In Range(Cells(2, 15), Cells(bottom01, 15))

2 - numer wiersza od którego pętla zaczyna poszukiwania
bottom01 - numer wiersza, gdzie pętla kończy pracę, funkcja przypisana do bottom01 wyznacza dolny zakres danych, przy założeniu że kolumna jest ciągła (nie ma przerw w danych), do wyznaczenia tej zmiennej możesz użyć dowolnej kolumny, która ma ciągły zakres danych.
15 - numer kolumny

Do określenia, gdzie kończą się wartości liczbowe, możesz użyć pętli oraz funkcji, która określa czy w komórce znajduje się wartość liczbowa.

IsNumreric(adres komórki)

Co do niespójności w funkcjach, to załączyłeś plik .csv, który funkcji nie zawiera, więc w tym temacie, nie jestem w stanie się wypowiedzieć. Lepiej załącz plik Excela zawierający problematyczne funkcje, oczywiście po zanonimizowaniu danych.

0

Teraz moje makro wygląda tak

Sub zerowanie()
Dim cell01 As Range

Dim bottom01 As Single

bottom01 = Range("a1").End(xlDown).Row

For Each cell01 In Range(Cells(2, 15), Cells(bottom01, 15))
If cell01.Value = 0 Then
cell01.Value = ""
End If
Next cell01
End Sub

Niestety wypełnia mi zerami całą kolumnę N.

1 użytkowników online, w tym zalogowanych: 0, gości: 1