kako brisati vse vrstice z določeno vsebino
kako brisati vse vrstice z določeno vsebino
pozdravljeni,
Forumaši, hvala vam za vse dosedanje odgovore ko ste me rešili iz zagate.
Vedno znova pa naletim na nove probleme. Tu je en takšen.
Dvakrat na teden dobim naročilo materiala (ni druge variante) v pdf formatu (50 ali več listov). Ko ga skopiram v excell so mi določene vrstice, ki imajo v stolpcu A stalno enako vsebino, odveč in delajo zmedo. Kako jih najenostavneje izbrisati?
Sortiranje ne pride v poštev, ker se potem drugi podatki pomešajo med sabo.
lep dan
Forumaši, hvala vam za vse dosedanje odgovore ko ste me rešili iz zagate.
Vedno znova pa naletim na nove probleme. Tu je en takšen.
Dvakrat na teden dobim naročilo materiala (ni druge variante) v pdf formatu (50 ali več listov). Ko ga skopiram v excell so mi določene vrstice, ki imajo v stolpcu A stalno enako vsebino, odveč in delajo zmedo. Kako jih najenostavneje izbrisati?
Sortiranje ne pride v poštev, ker se potem drugi podatki pomešajo med sabo.
lep dan
Re: kako brisati vse vrstice z določeno vsebino
Kdo je rekel . Če malce premislite je to najhitrejši način (če seveda zanemariva makro, ki pa ga, sklepam, ne znate napisati in zatorej ni opcija). Rešitev pa je banalno preprosta:senbric napisal/-a:Sortiranje ne pride v poštev, ker se potem drugi podatki pomešajo med sabo.
- V prazen stolpec vpišite zaporedno številko vsake vrstice.
- Sortirate po koloni A in odstranite odvečne
- Sortirate po koloni z zaporednimi številkami in dobite originalno zaporedje vrstic
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Pozdravljeni
Poskusite s to kodo:
Lp
Poskusite s to kodo:
Koda: Izberi vse
Sub Macro1()
'
For Each c In Range("A1:A" & Range("A65536").End(xlUp + 1).Row)
If c.Value = "" Then GoTo Naprej
vsebina = c.Value
For Each x In Range(c.Offset(1, 0).Address & ":A" & Range("A65536").End(xlUp).Row + 1)
If x.Value = vsebina Then Rows(x.Row & ":" & x.Row).Delete
Next x
Naprej:
Next c
'
End Sub
Hvala obema za odgovore
Stenly, vaša koda mi izbriše podvojene zapise (tudi to je uporabno).
Jaz pa bi želel, da mi izbriše vse vrstice, kjer je v koloni A napisano naprimer "pošta", zato sem skušal vašo kodo predelati a mi ne uspe, saj o makrojih vem premalo (skoraj nič)
Sub Macro1()
'
For x = 1 To 5000
If Range("a" & x).Value = "pošta" Then Rows(x.Row). Delete
Next x
'
End Sub
kaj sem naredil narobe?
Stenly, vaša koda mi izbriše podvojene zapise (tudi to je uporabno).
Jaz pa bi želel, da mi izbriše vse vrstice, kjer je v koloni A napisano naprimer "pošta", zato sem skušal vašo kodo predelati a mi ne uspe, saj o makrojih vem premalo (skoraj nič)
Sub Macro1()
'
For x = 1 To 5000
If Range("a" & x).Value = "pošta" Then Rows(x.Row). Delete
Next x
'
End Sub
kaj sem naredil narobe?
Koda: Izberi vse
Sub brisi()
Dim i
For i = 1 To 250
If Range("A" & i).Value = "pošta" Then
Rows(i & ":" & i).Select
Selection.ClearContents
End If
Next
Range("A1").Select
End Sub
[img]http://shrani.si/f/3t/YL/4W2P37B9/office.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
[img]http://shrani.si/f/12/aa/1rt1wj6i/1/userbardionaea.gif[/img]
[img]http://shrani.si/f/3D/nN/3RQySBCl/vista-copy.gif[/img]
kljuka13 hvala,
vašo kodo sem malo spremenil saj želim da mi vrstico izbriše, ne samo "izprazni". Dodal sem še en Go To stavek, sicer mi ni izbrisalo vrstic, kjer se je v eni pod drugo pojavljala iskana beseda.
Kolikor sem uspel preveriti koda sedaj dela OK.
Sub brisi()
Dim i
For i = 1 To 250
Nazaj:
If Range("A" & i).Value = "pošta" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
Next
Range("A1").Select
End Sub[/code]
vašo kodo sem malo spremenil saj želim da mi vrstico izbriše, ne samo "izprazni". Dodal sem še en Go To stavek, sicer mi ni izbrisalo vrstic, kjer se je v eni pod drugo pojavljala iskana beseda.
Kolikor sem uspel preveriti koda sedaj dela OK.
Sub brisi()
Dim i
For i = 1 To 250
Nazaj:
If Range("A" & i).Value = "pošta" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
Next
Range("A1").Select
End Sub[/code]
kako skrajšati čas izvajanja
torej napisal sem makro, ki mi dela to kar sem želel, vendar ker mora pregledati 2500 vrstic in poiskati 30 nezaželenih vsebin (vsaka od teh nezaželenih vsebin se lahko pojavi 1 ali večkrat) to delo traja odvisno od hitrosti računalnika 2 do 10 minut.
Ali se da namesto 30 zaporednih if stavkov, ki sem jih uporabil v svojem programu uporabiti kaj enostavnejšega. Oz kako pospešiti izvajanje makroja.
prilagam del kode makroja
Sub razvrscanje_v_stolpce()
'
' razvrscanje_v_stolpce Macro
' Macro recorded 7.2.2008 by Milan Jelen
'
' Keyboard Shortcut: Ctrl+r
'
' brisanje motečih vrstic
Sheets("vnos odpoklica").Select
Range("A1").Select
Dim i
For i = 1 To 2500
Nazaj:
If Range("A" & i).Value = "_______________________________________________________________________________" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Range("A" & i).Value = "Prosim dobaviti na:" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Range("A" & i).Value = "Podjetje" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Mid(Range("A" & i).Value, 2, 6) = "orenje" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Range("A" & i).Value = "Partizanska" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
Ali se da namesto 30 zaporednih if stavkov, ki sem jih uporabil v svojem programu uporabiti kaj enostavnejšega. Oz kako pospešiti izvajanje makroja.
prilagam del kode makroja
Sub razvrscanje_v_stolpce()
'
' razvrscanje_v_stolpce Macro
' Macro recorded 7.2.2008 by Milan Jelen
'
' Keyboard Shortcut: Ctrl+r
'
' brisanje motečih vrstic
Sheets("vnos odpoklica").Select
Range("A1").Select
Dim i
For i = 1 To 2500
Nazaj:
If Range("A" & i).Value = "_______________________________________________________________________________" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Range("A" & i).Value = "Prosim dobaviti na:" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Range("A" & i).Value = "Podjetje" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Mid(Range("A" & i).Value, 2, 6) = "orenje" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
If Range("A" & i).Value = "Partizanska" Then
Rows(i & ":" & i).Delete
GoTo Nazaj
End If
Oh seveda se da vaš makro svetlobno pohitriti predvsem pa zelo zelo zmanjšati in pač narediti berljivega in .... ok, da vam ne poberem volje do programiranja .
Torej potrebno je narediti sledeče in potem bo makro že malce uporabnejši:
PS: Kolikokrat je takšen makro hitrejši?
Torej potrebno je narediti sledeče in potem bo makro že malce uporabnejši:
- Zavrteti zanko od zadaj naprej in potem ni nobenenega nepotrebnega skakanja
- Prekiniti osveževanje ekrana
- Uporabiti objekt Cells in ne Range!
- Znebiti se if stavkov, tako da v seznamu naštejete kaj iščete
- Pa bo za prvo silo kar dosti
Koda: Izberi vse
' www.matjazev.net
' februar 2008
Option Explicit
Function AliJeVrednostVSeznamu(Seznam, vrednost) As Boolean
AliJeVrednostVSeznamu = True
Dim i
For i = LBound(Seznam) To UBound(Seznam)
If (Seznam(i) = vrednost) Then Exit Function
Next
AliJeVrednostVSeznamu = False
End Function
Sub razvrscanje_v_stolpce()
Dim IskaneVrednosti
IskaneVrednosti = Array( _
"_______________________________________________________________________________", _
"Prosim dobaviti na:", _
"Podjetje", _
"Partizanska")
Application.ScreenUpdating = True
Sheets("vnos odpoklica").Select
Dim i
For i = 2500 To 1 Step -1
If (AliJeVrednostVSeznamu(IskaneVrednosti, Cells(i, 1))) Then Rows(i).Delete
' tam kjer pa ne isčete celotnih nizov temveč samo del, pa je še vedno potreben if stavek!
If Mid(Cells(i, 1).Value, 2, 6) = "orenje" Or _
Mid(Cells(i, 1).Value, 3, 8) = "bla bla" Or _
Mid(Cells(i, 1).Value, 10, 15) = "nekaj" Then
Rows(i).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Računakniku je, podobno kot človeku, precej lažje delati s koordinatnim sistemom kot iskati celice vsepovprek... In pri Range objektu vi najprej izgubite čas, da združite niz "A" in številko 1 v niz "A1" potem pa računalnik zopet izgubi čas, da A1 pretvori v koordinati (1,1) in nato dostopi do iskane celice... Imate torej 2 nepotrebni pretvorbi pri vsakem dostopu in teh dostopov je 2500 * število Range objektov.... Olala mnogo mnogo več kot 10.000
Pri objektu cells pa ni nobenega pretvarjanja ne z vaše ne z računalnikove strani!
Pri objektu cells pa ni nobenega pretvarjanja ne z vaše ne z računalnikove strani!
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator