[XL07] in alle sheets rijen verwijderen bij vinden "waarde"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
Hoe kan ik Excel 2007 automatisch op alle worksheets de rijen laten verwijderen waar column A een bepaalde waarde heeft?

De toepassing is als volgt:

Ik heb een bestand met gegevens op jaar (98-06) en een laatste worksheet met alle jaren op alfabet van bedrijfsnaam.

Een stukje van die laatste worksheet, het totaaloverzicht:

A (bedrijf)B (jaar)C (ebitda)
Air France20052856000000
Air France20063290000000


Nu wil ik elk bedrijf dat niet op z'n minst 4 ebitda gegevens heeft over tijdsperiode (98-06) verwijderen. Ik kan handmatig kijken of het bedrijf dat minimum aan gegevens heeft. Ik wil echter het verwijderen automatisch laten gebeuren, als volgt: Ik geef bedrijfsnaam in en vervolgens worden de betreffende rijen verwijderd uit zowel het totaaloverzicht (hierboven) als de jaarlijkse worksheets (in dit geval 2005 en 2006). Is dit mogelijk en zo ja, hoe?

Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
Ja, ik heb gegoogled. De meeste resultaten hebben betrekking op het verwijderen per worksheet, maar ik wil in een keer alle entries in het hele bestand verwijderen. Is dit mogelijk.

Acties:
  • 0 Henk 'm!

  • Dirk
  • Registratie: November 2004
  • Laatst online: 18:32

Dirk

Coördinator frontpagemoderatie
Ja hoor, ik neem aan dat je met macor's wil werken? Dan ga je gewoon met 'for each' bij alle worksheets langs. :)

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
Is het met zo'n macro ook mogelijk dat ie mij een venstertje geeft waar ik kan invoeren wat hij moet zoeken? Of moet ik dan telkens de macro aanpassen voor de string dat ie moet vinden? Sorry voor alle vragen, maar ik heb nog nooit met macro's gewerkt.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

offtopic:
Op verzoek titel wat aangepast. Zet ajb overigens altijd de pakketnaam in de titel, ook als het ook in de tags wordt gezet. Dit voor de duidelijkheid richting de bezoekers. :)

Inderdaad zou je een macro moeten maken die met een loop alle worksheets af gaat en per sheet en daarbinnen met een tweede loop per rij kijkt of de rij moet worden verwijderd.

Let daarbij trouwens op dat je geen rijen overslaat: begin eventueel achteraan bij verwijderen.
Voorbeeld:
1 a
2 b
3 c
4 a
5 a
6 b

Als je doet "for i = 1 to 10: als rij i = a dan delete rij i, next i", dan wordt het resultaat
b
c
a
b

omdat b op rij 1 staat zodra je de rij met de eerste a hebt verwijderd, etc.

edit: ja, je kan prima een invoerscherm maken:
code:
1
zoekwaarde = InputBox("Wat wil je?")

[ Voor 6% gewijzigd door F_J_K op 12-10-2010 15:33 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

Anoniem: 113297

(tijdelijke) kolom D toevoegen die aantal voorkomens in kolom A telt. (aantal.als)
filteren op < 4 en alle rijen verwijderen.

Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
Ik begrijp dat ik ook met eigen inbreng moet komen en ik verwacht dan ook helemaal niet dat jullie een hele macro voor mij gaan maken.

Ik kwam daarnet dit tegen:

http://www.ozgrid.com/for...thread.php?t=66221&page=1, post #4

kan ik dan deze code als volgt aanpassen om op alle worksheets te werken? (aanpassing op regel 6)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub DeleteRows()
    Dim c As Range
    Dim SrchRng As Range
    Dim SrchStr As String

    For Each sht In ActiveWorkbook.Sheets
    Set SrchRng = ActiveSheet.Range("A1", ActiveSheet.Range("A65536").End(xlUp))
    SrchStr = InputBox("Please Enter A Search String")
    Do
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing

End Sub

Acties:
  • 0 Henk 'm!

  • Dirk
  • Registratie: November 2004
  • Laatst online: 18:32

Dirk

Coördinator frontpagemoderatie
Je moet bij elke 'for' ook een 'next' neerzetten aan het eind van de te herhalen code (regel 12), maar verder zou het moeten werken.

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
Ik krijg nu oneindige input vensters

Acties:
  • 0 Henk 'm!

  • Dirk
  • Registratie: November 2004
  • Laatst online: 18:32

Dirk

Coördinator frontpagemoderatie
Ja, die krijg je nu per sheet. Haal de inputbox uit de for-next loop om hem maar 1 keer te krijgen. Dat is toch iets wat je zelf zou moeten kunnen zien.

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Inderdaad is zoiets maken 90% gezond verstand en letterlijk lezen en volgen wat er staat en hooguit 10% kennis.

Daarnaast wil je niet ActiveSheet.Range() gebruiken, maar sht.Range(). Anders neem je steeds het actieve sheet en dat is weinig zinvol :P
Ook zou ik het bereik kleiner maken dan A1:A65536 als dat kan, maar dat hangt natuurlijk van je data af.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
Nogmaals ik heb nog nooit gewerkt met macro's. De code zegt me helemaal niets. Het enige wat ik kan is HTML.

Maar wel bedankt hoor. Ik ga nog wat proberen.

[ Voor 19% gewijzigd door Anoniem: 174135 op 12-10-2010 16:23 ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

De truc is "domweg" regel voor regel lezen wat er staat en in je hoofd als oefening even nadoen wat er gebeurt. Dan kom je er al snel achter waar het vastloopt.

--

Als je geen ervaring hebt met scripting: controleer heel goed wat er gebeurt voor je het resultaat aan een ander geeft. Per ongeluk benodigde data verwijderen is een duur grapje ;)

Je zou daarom ook - zoals Anoniem: 113297 in "[XL07] in alle sheets rijen verwijderen ..." aangeeft - het zonder scripting kunnen doen door slim gebruik van extra hulptabellen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

Anoniem: 174135

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Verwijderen()

    Dim c As Range
    Dim SrchRng As Range
    Dim SrchStr As String

    
    Set SrchRng = sht.Range("A1", sht.Range("A2000").End(xlUp))
    SrchStr = InputBox("Please Enter A Search String")
    Do
        For Each sht In ActiveWorkbook.Sheets
        Set c = SrchRng.Find(SrchStr, LookIn:=xlValues)
        If Not c Is Nothing Then c.EntireRow.Delete
    Loop While Not c Is Nothing
        Next
End Sub


moet de "Next" na "Loop While" of ervoor?

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Er na, maar je hebt ten onrechte de FOR-loop naar beneden gehaald. Nu heb je per sheet per regel en dat gaat niet werken als je per regel per sheet bedoelde ;)

Probeer dit dus eens in je hoofd na te spelen en zie waar het fout loopt. Als je Do .. Loop en For .. Next niet snapt, kijk dan eerst even naar de F1-teksten en voorbeelden daarbij. Edit: zie ook [google=nested loop] want daar hebben we het over.

We geven trouwens niet 'om te pesten' geen kant en klaar antwoord, het is simpelweg 'levensgevaarlijk' als je zonder te begrijpen dergelijke scripts draait.

[ Voor 24% gewijzigd door F_J_K op 12-10-2010 16:58 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Dirk
  • Registratie: November 2004
  • Laatst online: 18:32

Dirk

Coördinator frontpagemoderatie
Kijk wat er werkt. :P Do hoort bij loop en for hoort bij next.
We geven trouwens niet 'om te pesten' geen kant en klaar antwoord, het is simpelweg 'levensgevaarlijk' als je zonder te begrijpen dergelijke scripts draait.
Ach, gewoon met een reservekopie werken. Ik heb in het begin dat ik met macro's werkte ook vaak genoeg geprobeerd 'doet ie het nu wel?' en als er iets stuk ging had ik dat snel genoeg ongedaan gemaakt. :P

[ Voor 75% gewijzigd door Dirk op 12-10-2010 17:01 ]

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


Acties:
  • 0 Henk 'm!

Anoniem: 113297

^ klopt hoor, maar de macro die TS aan de praat probeert te krijgen lost het oorspronkelijke probleem, nl. het verwijderen van bedrijven met <4 ebitda's, helemaal niet op. dus nu moet-ie dat handmatig gaan tellen? :N

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
F_J_K schreef op dinsdag 12 oktober 2010 @ 15:32:
begin eventueel achteraan bij verwijderen.
[...]
omdat b op rij 1 staat zodra je de rij met de eerste a hebt verwijderd, etc.
Een beter idee is dan ook om eerst de te verwijderen rijen te bepalen, en ze allemaal tegelijkertijd te verwijderen. Verwijderen van een rij per keer is nml niet bepaald snel. Zie hier voor een goed voorbeeld.
Anoniem: 113297 schreef op dinsdag 12 oktober 2010 @ 17:19:
^ klopt hoor, maar de macro die TS aan de praat probeert te krijgen lost het oorspronkelijke probleem, nl. het verwijderen van bedrijven met <4 ebitda's, helemaal niet op. dus nu moet-ie dat handmatig gaan tellen? :N
Persoonlijk denk ik ook dat je hier het goede antwoord geeft: :)
Anoniem: 113297 schreef op dinsdag 12 oktober 2010 @ 15:36:
(tijdelijke) kolom D toevoegen die aantal voorkomens in kolom A telt. (aantal.als)
filteren op < 4 en alle rijen verwijderen.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1