Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel 2010] vaag filter maken / data sorten

Pagina: 1
Acties:

  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Hoi Tweakers!

Geen idee waar ik moet beginnen (of met welke keywords ik moet googlen) dus vraag ik jullie! Uiteraard al geprobeerd maar kom telkens op simpele filters uit die niet doen wat ik wil.

Ik heb een spread sheet waar data in staat, bijvoorbeeld:

1- DATUM+TIJD, STATUS, DATA, DATA
2- DATUM+TIJD, STATUS2, DATA, DATA
3- DATUM+TIJD, STATUS2, DATA, DATA
4- DATUM+TIJD, STATUS2, DATA, DATA
5- DATUM+TIJD, STATUS2, DATA, DATA
6- DATUM+TIJD, STATUS, DATA, DATA
7- DATUM+TIJD, STATUS2, DATA, DATA
8- DATUM+TIJD, STATUS2, DATA, DATA
9- DATUM+TIJD, STATUS2, DATA, DATA
10- DATUM+TIJD, STATUS2, DATA, DATA

Wat ik moet filteren, is dat als "STATUS" een bepaalde waarde heeft, dat hij automatisch de rij eronder bewaart, maar vanaf daar weer verder filtert en de rest verwijderd.

Oftwel, met bovenstaande input, zou ik graag de volgende output zien:

1- DATUM+TIJD, STATUS, DATA, DATA
2- DATUM+TIJD, STATUS2, DATA, DATA
6- DATUM+TIJD, STATUS, DATA, DATA
7- DATUM+TIJD, STATUS2, DATA, DATA

DATUM+TIJD en de 2 DATA's zijn variabel, STATUS is altijd 1 vaste waarde, STATUS2 is variabel.

Enig idee waar ik kan beginnen / hoe ik dit zou kunnen filteren?

:?

[ Voor 4% gewijzigd door DrParanoid op 17-03-2014 08:36 ]


Verwijderd

Ik begrijp niet helemaal wat je bedoelt maar ik heb een vermoeden dat je nog niet bij Aangepast sorteren... hebt gekeken. Daar kun je meerdere hiërarchische filter en selectiecriteria opgeven.

  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Verwijderd schreef op maandag 17 maart 2014 @ 09:32:
Ik begrijp niet helemaal wat je bedoelt maar ik heb een vermoeden dat je nog niet bij Aangepast sorteren... hebt gekeken. Daar kun je meerdere hiërarchische filter en selectiecriteria opgeven.
Ik heb geprobeerd het zo duidelijk mogelijk te maken :)

Aangepast sorteren wel gechecked, maar kon het niet voor elkaar krijgen dat wanneer een waarde gevonden is de eerstvolgende rij te zien moet blijven ongeacht de waardes in die rij, en de rij daarna tot de eerste met die waarde weer niet.

  • Coffeemonster
  • Registratie: Juli 2000
  • Laatst online: 17-11 13:43
Advanced filtering werkt ook met formules. Je moet naast een lijst (die je wil filteren) ook een bereik voor het filtercriterium opgeven. In dit bereik laat je de eerste cel leeg, en in de tweede cel zet je een formule die betrekking heeft op de eerste rij van je lijst. Deze formule moet de waarde TRUE geven als de rij de juiste status heeft, of de rij erboven de juiste status heeft. Een vergelijkbaar voorbeeld hiervan is hier uitgewerkt.

Look for something long enough and you will find it; look for something without understanding, and it will find you.
A normal day at the stock exchange


  • Darf
  • Registratie: Juni 2010
  • Laatst online: 13-10 23:25
Imo kan je dit het makkelijkst bereiken met VBA, iets in deze trand:

Sub filter()

Dim A as integer

Do
If Range("C" & A).Value = "Bepaalde waarde" Then
A = A + 2
Else
Rows(A).delete
A = A + 1
End If
Loop Until A > 10

End Sub

  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Thanks voor de pointer, iets aangepast naar hier beneden. Het probleem is nu dat hij row A 1 keer verwijderd en dan blijft loopen op: "A = A + 1"

Coden is niet mijn sterkste punt btw :P

De aangepaste filtering kan voor zover ik kan zien niet doen wat ik wil, ook niet met formules (wel die ene row kopiëren, maar niet die row + de row daaronder (die nooit dezelfde waardes heeft) kopiëren)

Sub filter()

Dim A As Integer
A = 1

Do
If c = "Bepaalde Waarde" Then
A = A + 2
Else
Rows(A).Delete
A = A + 1
End If
Loop Until Z > 10

End Sub


/Edit: "Het probleem is nu dat hij row A 1 keer verwijderd" is natuurlijk wel logisch als ik A = 1 definieer lijkt mij. Als ik die weg haal hangt hij op "Rows(A).delete"

[ Voor 41% gewijzigd door DrParanoid op 17-03-2014 12:42 ]


  • Coffeemonster
  • Registratie: Juli 2000
  • Laatst online: 17-11 13:43
DrParanoid schreef op maandag 17 maart 2014 @ 12:36:
De aangepaste filtering kan voor zover ik kan zien niet doen wat ik wil, ook niet met formules (wel die ene row kopiëren, maar niet die row + de row daaronder (die nooit dezelfde waardes heeft) kopiëren)
Jawel, daar moet je je formule op aanpassen. Als de eerste rij van je lijst in cel A2 begint, en de status in rij B staat, dan wordt de formule:
code:
1
=OR(B2="STATUS";B1="STATUS")

Look for something long enough and you will find it; look for something without understanding, and it will find you.
A normal day at the stock exchange


  • Darf
  • Registratie: Juni 2010
  • Laatst online: 13-10 23:25
Ha, je hebt het iets te letterlijk overgenomen denk ik. Had zelf de typfout gemaakt, later verbetert:

Loop Until Z > 10

Moet zijn

Loop Until A > (aantal rows)

Daarnaast gaat je if functie zo niet werken natuurlijk tenzij je c definieert.

[ Voor 15% gewijzigd door Darf op 17-03-2014 13:08 ]


  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Darf schreef op maandag 17 maart 2014 @ 13:06:
Ha, je hebt het iets te letterlijk overgenomen denk ik. Had zelf de typfout gemaakt, later verbetert:

Loop Until Z > 10

Moet zijn

Loop Until A > (aantal rows)

Daarnaast gaat je if functie zo niet werken natuurlijk tenzij je c definieert.
Hangt nog op "Rows(A).Delete" :) op jouw methode.

Value uiteraard aangepast aan de daadwerkelijke value. Pakt hij C niet op als standaard row C? (geen idee)

Hieronder maakt het misschien wat duidelijker.

Afbeeldingslocatie: http://shavingsociety.nl/images/tweakers%20voorbeeld.png

A = leeg
B = datum / tijd logging
C = waarde waar het omgaat, laten we zeggen als C1 als waarde "bingo" heeft dan moeten C1 (ROW1)+ C2 (ROW2) bewaard blijven, en de check opnieuw uitgevoerd worden op C3, heeft C3 geen waarde "bingo" dan moet de row verwijderd worden en de check opnieuw uitvoeren op C4, etc. De C column kan overigens doorlopen tot rond de 1000-1500.
D = niet boeiend en altijd hetzelfde
E = niet boeiend en altijd hetzelfde

[ Voor 22% gewijzigd door DrParanoid op 17-03-2014 13:38 ]


  • Darf
  • Registratie: Juni 2010
  • Laatst online: 13-10 23:25
Dan zou je de volgende code moeten kunnen gebruiken:

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

Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "bingo" Then
A = A + 2
Else
Rows(A).Delete
A = A + 1
End If
Loop Until A > 1500

End Sub

  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Darf schreef op maandag 17 maart 2014 @ 16:33:
Dan zou je de volgende code moeten kunnen gebruiken:

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

Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "bingo" Then
A = A + 2
Else
Rows(A).Delete
A = A + 1
End If
Loop Until A > 1500

End Sub
Thanks, hij doet iets meer, maar niet consistent. Hierop zie ik hele vage resultaten waar soms de eerste regel na "bingo" word bewaart en soms de eerst volgende 2 of 3 regels. En als ik hem meerdere keren run eindigt het in alle rows verwijderd.

  • Steevo_S
  • Registratie: September 2010
  • Laatst online: 22-08 10:16
Zet de eerste A+2 eens op +1

Clash of Clans - MISSeR :: #Y0JU9R98 ::


  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Als ik de eerste A+2 op +1 (en de tweede A+1 weg haal) dan eindig ik met alle "Bingo" rijen, maar niet de rij eronder. (stapje in de goede richting dus :))

Eerste op A+1 en tweede A+1 laten staan = zelfde vreemde resultaat als eerder.

  • Steevo_S
  • Registratie: September 2010
  • Laatst online: 22-08 10:16
Probeer dit eens


Sub filter()

Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "bingo" Then
Rows(A+1).Delete
A=A+1
Else
A = A + 1
End If
Loop Until A > 1500

End Sub

Clash of Clans - MISSeR :: #Y0JU9R98 ::


  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Steevo_S schreef op dinsdag 18 maart 2014 @ 08:12:
Probeer dit eens


Sub filter()

Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "bingo" Then
Rows(A+1).Delete
A=A+1
Else
A = A + 1
End If
Loop Until A > 1500

End Sub
Zelfde vreemde resultaat als eerder. Thanks voor het meedenken trouwens :)

  • Steevo_S
  • Registratie: September 2010
  • Laatst online: 22-08 10:16
DrParanoid schreef op maandag 17 maart 2014 @ 13:19:
[...]


Hangt nog op "Rows(A).Delete" :) op jouw methode.

Value uiteraard aangepast aan de daadwerkelijke value. Pakt hij C niet op als standaard row C? (geen idee)

Hieronder maakt het misschien wat duidelijker.

[afbeelding]

A = leeg
B = datum / tijd logging
C = waarde waar het omgaat, laten we zeggen als C1 als waarde "bingo" heeft dan moeten C1 (ROW1)+ C2 (ROW2) bewaard blijven, en de check opnieuw uitgevoerd worden op C3, heeft C3 geen waarde "bingo" dan moet de row verwijderd worden en de check opnieuw uitvoeren op C4, etc. De C column kan overigens doorlopen tot rond de 1000-1500.
D = niet boeiend en altijd hetzelfde
E = niet boeiend en altijd hetzelfde
Neem de code van schreef, en doordat je een rij verwijdert moet je niet naar de volgende springen maar A blijft dan dezelfde waarde dus A=A of A=A+1 verwijderen. Dan moet het werken.

Clash of Clans - MISSeR :: #Y0JU9R98 ::


  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "bingo" Then
A = A+1
Else
Rows(A).Delete
End If
Loop Until A > 1500

End Sub

Dit bedoel je? Dan krijg ik weer een mooie rij met alle row's die bingo bevatten.

Nogmaals, ben echt noobie met code, en al helemaal met VB

[ Voor 12% gewijzigd door DrParanoid op 18-03-2014 08:46 ]


  • Steevo_S
  • Registratie: September 2010
  • Laatst online: 22-08 10:16
DrParanoid schreef op dinsdag 18 maart 2014 @ 08:45:
Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "bingo" Then
A = A+1
Else
Rows(A).Delete
End If
Loop Until A > 1500

End Sub

Dit bedoel je? Dan crashed heel excel :P

Nogmaals, ben echt noobie met code, en al helemaal met VB
Nee want dan blijft hij hangen.

code:
1
2
3
4
5
6
7
8
9
10
Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "Bingo" Then
A = A + 2
Else
Rows(A).Delete
End If
Loop Until A > 1500


Het eerste gedeelte zorgt dat je als rij 1 bingo is de tweede bewaart blijft het tweede gedeelte zorgt ervoor dat wanneer dit niet zo is hij die rij verwijdert en opnieuw de rij controleert of daar bingo staat (A schuift naar boven namelijk).

Probeer een "break point" te zetten op de IF (een rood stoplicht) en er dan met F8 doorheen te lopen, dan kan je stap voor stap kijken of het werkt en iets aanpassen als het niet werkt (als je over A "hovert" kan je de waarde zien van de rij zien).

Clash of Clans - MISSeR :: #Y0JU9R98 ::


  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Als je het eens in de cellen zelf probeert in plaats van een macro.

Je zou het bijvoorbeeld zo kunnen proberen (met Fx bedoel ik cel F1, F2, F3, enz):
Vul Fx met 1 als Cx="bingo" en 0 anders
Vul Gx met 1 als F{x-1} een 1 is en 0 anders.
Vul Hx met 1 als Fx of Gx gelijk is aan 1 en 0 anders (je zou hier max(Fx,Gx) kunnen gebruiken)
Filter op kolom H.

When life gives you lemons, start a battery factory


  • TheFes
  • Registratie: Juni 2001
  • Laatst online: 23:10
Kun je niet gewoon een hulpkolom introduceren, met functie als (deze zet je dan in F2, en kopieer je tot je bij de onderste rij bent)
code:
1
=IF(OR(C1="BINGO",C2="BINGO)."JA","NEE")

En in F1 zet je
code:
1
=IF(C1="BINGO","JA","NEE")


Dan kun je gewoon filteren op JA
Eventueel kun je zelfs het hele JA/NEE stuk weghalen, en kun je filteren op TRUE/FALSE

Ah, terwijl ik mijn post typ, heeft KabouterSuper iets vergelijkbaars voorgesteld :)

[ Voor 10% gewijzigd door TheFes op 18-03-2014 09:00 ]

Home Assistant configuratie


  • DrParanoid
  • Registratie: Oktober 2010
  • Laatst online: 09-01-2022
Steevo_S schreef op dinsdag 18 maart 2014 @ 08:50:
[...]


Nee want dan blijft hij hangen.

code:
1
2
3
4
5
6
7
8
9
10
Dim A As Integer
A = 1

Do
If Range("C" & A).Value = "Bingo" Then
A = A + 2
Else
Rows(A).Delete
End If
Loop Until A > 1500


Het eerste gedeelte zorgt dat je als rij 1 bingo is de tweede bewaart blijft het tweede gedeelte zorgt ervoor dat wanneer dit niet zo is hij die rij verwijdert en opnieuw de rij controleert of daar bingo staat (A schuift naar boven namelijk).

Probeer een "break point" te zetten op de IF (een rood stoplicht) en er dan met F8 doorheen te lopen, dan kan je stap voor stap kijken of het werkt en iets aanpassen als het niet werkt (als je over A "hovert" kan je de waarde zien van de rij zien).
Hij werkt zo perfect :) thanks!

En bedankt de rest ook, reden dat ik het in een macro graag doe is omdat ik veel spreadheets zo wekelijks moet filteren, gaat wat makkelijker door gewoon shortcuts te maken voor macro's ipv verschillende filters te doen op verschillende spreadsheets (in mijn ogen).

Nogmaals, bedankt allemaal!
Pagina: 1