Toon posts:

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

Pagina: 1
Acties:

Onderwerpen


  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
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?

  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
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.

  • Dirk
  • Registratie: november 2004
  • Laatst online: 19:54

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.


  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
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.

  • 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)


  • _heretic_
  • Registratie: mei 2004
  • Laatst online: 16-12-2012

_heretic_

so, a chicken is not a sparrow

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

In corporate religions as in others, the heretic must be cast out not because of the probability that he is wrong but because of the possibility that he is right.


  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
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

  • Dirk
  • Registratie: november 2004
  • Laatst online: 19:54

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.


  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
Ik krijg nu oneindige input vensters

  • Dirk
  • Registratie: november 2004
  • Laatst online: 19:54

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.


  • 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)


  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
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 Bluze op 12-10-2010 16:23]


  • 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 _heretic_ 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)


  • Bluze
  • Registratie: april 2006
  • Laatst online: 31-07-2012
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?

  • 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)


  • Dirk
  • Registratie: november 2004
  • Laatst online: 19:54

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.


  • _heretic_
  • Registratie: mei 2004
  • Laatst online: 16-12-2012

_heretic_

so, a chicken is not a sparrow

^ 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

In corporate religions as in others, the heretic must be cast out not because of the probability that he is wrong but because of the possibility that he is right.


  • 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.
_heretic_ 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: :)
_heretic_ 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 | Middelen tegen corona

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee