Adam Nieradzik

Adam Nieradzik Student, Uniwersytet
Ekonomiczny w
Wroclaw

Temat: usuwanie wierszy gdy dany tekst.

Hej

Poszukuje makra, ktore bedzie przeszukiwac kolumne powiedzmy B i jezeli znajdzie w niej dany wyraz to usunie caly wiersz. Ponizej mam makro, ktore wlasnie dziala w ten sposob, ze jezeli w komorce B znajduje sie wyraz auto to zostanie usuniety wiersz. Problem polega na tym, ze jezeli w danej komorce jest "cos" jeszcze niz tylko Auto wiersz ten nie zostanie usuniety. Czy moglby ktos poradzic mi jak rozwiazac ten problem i jak dopisac kolejne wyrazenia oprocz "auto", powiedzmy "autoreply", "reply".

Sub WytnijAuto()
Dim i&

For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
If Cells(i, 2).Value = "Auto" Then Rows(i).Delete
Next i
End Sub

Z gory dziekuje za pomoc
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: usuwanie wierszy gdy dany tekst.

Witam, proszę bardzo:

Sub WytnijAuto()
Dim i&

For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
If Cells(i, 2).Value like "*Auto*" or Cells(i, 2).Value like "*autoreply*" or Cells(i, 2).Value like "*reply*" Then Rows(i).Delete
Next i
End Sub

Pozdrawiam!
Dariusz Kolasa

Dariusz Kolasa Akademia VBA

Temat: usuwanie wierszy gdy dany tekst.

zależy ile tych wyrażeń, jak kilka to wystarczy OR:

If Cells(i, 2).Value = "Auto" or Cells(i, 2).Value = "Autocośtam" Then Rows(i).Delete

Jak masz cały słownik wyrażeń, to trzeba by użyć innego Range z wyrażeniami i przeglądać go drugą pętlą
Dariusz Kolasa

Dariusz Kolasa Akademia VBA

Temat: usuwanie wierszy gdy dany tekst.

przy okazji pozdrawiam niezmordowanego Pana Tomasza z którym mieliśmy jednoczesne trafienie z czasem odpowiedzi :)
Adam Nieradzik

Adam Nieradzik Student, Uniwersytet
Ekonomiczny w
Wroclaw

Temat: usuwanie wierszy gdy dany tekst.

Dziekuje za pomoc :)

Pozdrawiam
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: usuwanie wierszy gdy dany tekst.

Aaaa.... pozdrowienia od Pana Dariusza zdecydowanie należą do Pozdrowień-o-Wartości-Kolekcjonerskiej - i w takim to albumie będą przechowywane!
Również pozdrawiam i jak sądzę obaj nie mamy już co dziś grać w Dużego Lotka - dzisiejsze punkty nieprawdopodobieństwa zużyliśmy odpisując Koledze Adamowi w jednej i tej samej minucie :)
Pozdrawiam!
Dariusz Kolasa

Dariusz Kolasa Akademia VBA

Temat: usuwanie wierszy gdy dany tekst.

co za odpowiedź, jestem w szoku... ;)

konto usunięte

Temat: usuwanie wierszy gdy dany tekst.

Witam,
tak mi się skojarzyło: http://www.excelforum.pl/topics3/jak-zoptymalizowac-pe... Może komuś się przyda, pzdr.
Katarzyna T.

Katarzyna T. I’m on the earth to
make a star-like
diamond rise from
th...

Temat: usuwanie wierszy gdy dany tekst.

Hej,
odgrzebałam temat bo wydaje się być podobny do tematu, który mi ostatnio myśli zaprząta.

Potrzebuję napisać makro, które:

1. założy filtr na kolumnę powiedzmy B, spełniający warunki np. ="Auto", "Samochód", "Rower", "Motocykl"
2. usunie całe wiersze, dla odfiltrowanych rekordów.

Pomożecie?
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: usuwanie wierszy gdy dany tekst.

Hej,

"Pomożemy!"

Część pierwsza niezbędna: makrodlakasi1.avi
Część druga niezbędna: makrodlakasi2.avi

Część trzecia: plikzmakrem.xlsm

Pozdrawiam!Tomasz Gryzio edytował(a) ten post dnia 17.01.13 o godzinie 00:53
Katarzyna T.

Katarzyna T. I’m on the earth to
make a star-like
diamond rise from
th...

Temat: usuwanie wierszy gdy dany tekst.

Panie Tomaszu,

dostosowałam kod do swoich potrzeb i śmiga jak wściekły :D

Próbowałam analogicznie napisać kod do kasowania wierszy dla których daty> dziś(). Zaczęłam od filtrowania kolumny, w której są daty, no i się nacięłam: wychodzi błąd pomimo, że mam kilkaset wierszy z datą >dzisiejszej.... poproszę o podpowiedź?

Sub FilrujeDate()
dData = Format(Now(), "yyyy-mm-dd")
Range("g1").Select
Range(Selection, Selection.End(xlDown)).Select

On Error GoTo Blad
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criterial1:=">" & dData, Operator:=xlAnd
Selection.Offset(1, 0).Select
Selection.Resize(Selection.Rows.Count - 1, 1).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.EntireRow.Delete
Range("a1").Select
Selection.AutoFilter
Blad:
Range("a1").Select
Selection.AutoFilter

End Sub
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: usuwanie wierszy gdy dany tekst.

Pani Katarzyno,

Wściekłość działania kodu to dla kodu najwyższy rodzaj komplementu - gratulować!

Podpowiedź brzmi:

Powyższy kod (FilrujeDate) jest całkiem dobry - i będzie działać, ale tylko jeżeli dane są datami w sensie Excela - czyli są liczbami z formatem daty.

Sprawdzamy to tak:
1. zaznaczam dane
2. zmieniam format komórek na Ogólny

a) Jeżeli wartości komórek teoretycznie datowskich zmieniły się na liczby (oznaczające ilość dni które minęły od początku excelowskiego świata (1900-01-01) do danej daty), to są one datami w sensie Excelowskim!

b) Jeżeli wartości komórek teoretycznie datowskich nie zmieniły się na liczby to są one tekstami i niestety taki kod: Selection.AutoFilter Field:=1, Criterial1:=">" & dData, Operator:=xlAnd ich "nie złapie".

Co możemy zrobić w przypadku 2b)?
...............
Stworzyć kolumnę dodatkową w Excelu, w której będę miał daty i to tę kolumnę będę wykorzystywał do filtracji.

Zakładam, że mam wpisany tekst wyglądający jak data w sensie excelowskim z formatem dd/mm/rrrr - w takim przypadku w mojej kolumnie dodatkowej będę wykorzystywał następującą formułę:
=DATA(PRAWY(A1;4);FRAGMENT.TEKSTU(A1;4;2);LEWY(A1;2))
...............
Możemy stworzyć linijkę (a może nawet trzy) kodu w vba, która zamieni teksty na daty.

Zakładam, że mam wpisany tekst wyglądający jak data w sensie excelowskim z formatem dd/mm/rrrr!

Wykorzystanie takiego kodu powinno doprowadzić do rezultatu:

(...)
On Error GoTo Blad
for each kom in selection
kom.value = dateserial(right(kom.value,4),mid(kom.value,4,2),left(kom.value,2))
next
Selection.AutoFilter


ale(!) - no nie po to używam najwydajniejszego narzędzia excelowskiego (w tego typu zadaniach) - autofiltru - żeby teraz się wstrzymywać forkiem,

hmm to może jednak wykorzystać:
- wstawioną dodatkową kolumnę z formułą,
- wykorzystywać ją do filtracji - to już mamy (sub FilrujeDate)
- usunąć kolumnę dodatkową!

Te operacje można nagrać - i dołączyć do sub FilrujeDate!

Pozdrawiam!
Katarzyna T.

Katarzyna T. I’m on the earth to
make a star-like
diamond rise from
th...

Temat: usuwanie wierszy gdy dany tekst.

z tą datą to chyba jest jeszcze jakiś haczyk...

Kolumna w której chcę filtrować daty powstaje właśnie w taki sposób, że dane pobierane są z kolumny obok => w niej widnieją jako tekst i są konwertowane do formatu "excelowskiej" daty i już po skonwertowaniu kod sub FilrujeDate nie działa prawidłowo :(
Ewelina L.

Ewelina L. Inspektor ds.
raportowania, Getin
Noble Bank S.A.

Temat: usuwanie wierszy gdy dany tekst.

Cześć,

właśnie posiłkuję się Waszymi fragmentami kodów, żeby obrobić swoje dane.
Potrzebuję skasować niepotrzebne wiersze, czy poniższe ma sens?
Pierwszy wiersz musi zostać, jako nagłówkowy. W kolumnie D chcę pokasować wiersze, które nie zawierają daty z poprzednich miesięcy (musi zostać tylko data z bieżącego miesiąca).

Sub test()

Range("E:E,G:G,J:J").Delete 'kasuje niepotrzebne kolumny

Dim i As Integer

For i = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
If Cells(i, 2).Value = "Auto" Then Rows(i).Delete
Next i

For i = Cells(Rows.Count, "C").End(xlUp).Row To 2 Step -1
If Cells(i, 3).Value = "COŚ" Or Cells(i, 3).Value = "TAM" Or Cells(i, 3).Value = "OLA" Then Rows(i).Delete
Next i

For i = Cells(Rows.Count, "D").End(xlUp).Row To 2 Step -1
If Cells(i, 4).Value <> Month(Now) And Cells(i, 4).Value <> Year(Now) Then Rows(i).Delete
Next i

End Sub
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: usuwanie wierszy gdy dany tekst.

Witam,

Proszę bardzo:


Sub test()

Range("E:E,G:G,J:J").Delete 'kasuje niepotrzebne kolumny

Dim i As Integer

For i = Cells(Rows.Count, 4).End(xlUp).Row To 2 Step -1
If CDate(Cells(i, 4).Value) < DateSerial(Year(Now), Month(Now), 1) Then
Rows(i).Delete
End If
Next i

End Sub


Kluczem jest: sprawdzenie czy wartość z komórki z i-tego wiersza skonwertowana na datę (CDate) jest wcześniejsza (<) od daty stworzonej (DateSerial) z aktualnego roku (Year(Now)), aktualnego miesiąca (Month(Now)) i dnia numer jeden => z 2013-03-05 powstaje data 2013-03-01, a więc wszystkie wcześniejsze są datami do usunięcia.

Pozdrawiam!
Jacek Szalek

Jacek Szalek preparation, Sony
DADC

Temat: usuwanie wierszy gdy dany tekst.

Witam,
jestem tu po raz pierwszy, w zasadzie to dopiero zaczynam swoją przygodę z VBA.
Potrzebuję w zależności od czasu jaki upłynął(kolumnaH) czyścić zawartość kolumn A,B,C i D. Napisałem coś takiego wykorzystując wpis pana Tomasza Gryzio:

Sub test2()
Dim i As Integer

For i = Cells(Rows.Count, 8).End(xlUp).Row To 2 Step -1
If CDate(Cells(i, 8).Value) < DateSerial(Year(Now), Month(Now), Day(Now) -3) Then
Range("A" & i).ClearContents
Range("B" & i).ClearContents
Range("C" & i).ClearContents
Range("D" & i).ClearContents

End If
Next i

End Sub

Niestety nie działa mi to jak należy ponieważ czas mam podany w kolumnieH w godzinach, chodzi mi dokładnie o usuwanie zapisów starszych jak 72 godziny a to co napisałem usuwa mi niestety wszystkie zapisy...
Byłbym naprawdę wdzięczny za pomoc.

PozdrawiamTen post został edytowany przez Autora dnia 04.08.13 o godzinie 15:40
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: usuwanie wierszy gdy dany tekst.

Jacek S.:
Niestety nie działa mi to jak należy ponieważ czas mam podany w kolumnieH w godzinach, chodzi mi dokładnie o usuwanie zapisów starszych jak 72 godziny a to co napisałem usuwa mi niestety wszystkie zapisy...
Po przeróbce:

Sub test2()
Dim i As Integer

For i = Cells(Rows.Count, 8).End(xlUp).Row To 2 Step -1
If CDate(Cells(i, 8).Value) < Now And DateDiff("h", CDate(Cells(i, 8).Value), Now) > 72 Then
Range("A" & i).ClearContents
Range("B" & i).ClearContents
Range("C" & i).ClearContents
Range("D" & i).ClearContents

End If
Next i

End Sub
Jacek Szalek

Jacek Szalek preparation, Sony
DADC

Temat: usuwanie wierszy gdy dany tekst.

Niestety dalej nie działa to jak należy. W kolumnie H mam sformatowane komórki jako czas np: 744:26:33 lub
24:26:33. Rozwiązanie podane przez panią Marzannę usuwa mi wszystkie zapisy z wyjątkiem liczb bardzo wielkich
np: 995779:24:33.
Problem po kilku godzinach rozwiązałem w bardzo prosty sposób

Sub test2()
Dim i As Integer

For i = Cells(Rows.Count, 8).End(xlUp).Row To 2 Step -1
If CDate(Cells(i, 8).Value) > 3 Then
Range("A" & i).ClearContents
Range("B" & i).ClearContents
Range("C" & i).ClearContents
Range("D" & i).ClearContents

End If
Next i

End Sub

Po prostu wstawiłem liczbę 3 odpowiadającą 72 godzinom, niestety mogę w ten sposób czyścić zapisy tylko z dokładnością do dni, ponieważ VBA nie przyjmuje mi liczb dziesiętnych a np. 60 godzin jest liczbą 2,5.
Ma ktoś jakiś pomysł jak rozwiązać ten problem?
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: usuwanie wierszy gdy dany tekst.

Założyłam, że w komórkach są pełne daty wraz z godzinami - dla takiego układu to działa.
VBA przyjmuje liczby dziesiętne, ale z kropką, a nie przecinkiem.

Temat: usuwanie wierszy gdy dany tekst.

Sub test2()
Dim i As Integer
Dim CzasPrzeterminowania As Date

'usuń te które przekroczyły czas 3h 10m 15s => dostosuj
CzasPrzeterminowania = CDate("3:10:15")


For i = Cells(Rows.Count, 8).End(xlUp).Row To 2 Step -1
If VarType(Cells(i, 8).Value) = vbDouble Then
If CDbl(Cells(i, 8).Value) > CDbl(CzasPrzeterminowania) Then
Range("A" & i & ":D" & i).ClearContents
End If
End If
Next i

End Sub

Następna dyskusja:

excel - usuwanie serii wier...




Wyślij zaproszenie do