• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA & Excel: Filteren en ontdubbelen samenvoegen in 1 code

Status
Niet open voor verdere reacties.

Silphya

Gebruiker
Lid geworden
26 mrt 2013
Berichten
18
Goedemiddag,

Geloof dat ik dit in het verkeerde subforum heb geplaatst, excuses. Ik weet niet hoe ik het kan verplaatsen naar het subforum VBA...

Ik ben beginnend beginner met VBA en lees me suf op internet en VBA for dummies. Met codes van internet en voorbeelden ben ik een heel eind gekomen, maar nog niet helemaal waar ik wil zijn.

Tot nu:
In kolom A wordt O groen, P rood en A oranje.
Wanneer in kolom A de melding op groen wordt gezet wordt de regel verwijderd en geplaatst in sheet "closed".

Wanneer in kolom G de fictieve namen David, Sylvia en BB worden gebruikt, worden de rijen gekopieerd naar de respectievelijke tabbladen door op de knop "filter" te drukken.

Nu het probleem: de tabbladen Sylvia, David en BB worden dus onnodig vervuild met dubbele gegevens. Dit heb ik ondervangen door op die tabbladen een knop te plaatsten "ontdubbelen".
Graag zou ik zien dat dat ontdubbelen gelijk bij het filteren al gebeurd, dat scheelt weer een handeling. Maar ik heb geen idee hoe ik dat moet verwerken in/met VBA.

Iemand die hulp kan bieden?

Bekijk bijlage Meldlijst.xlsm
 
Laatst bewerkt:
Gooi alle gevonden code weg en probeer deze onder de knop filter.
Code:
Sub VenA()
  Dim ar, j As Long
  ar = Array("CLOSED", "SYLVIA", "DAVID", "BB")
  With Sheets("MELDLIJST").Cells(1).CurrentRegion.Offset(2)
    For j = 0 To 3
      If j = 0 Then
        .AutoFilter 1, "O"
        .Offset(1).Copy Sheets(ar(j)).Cells(Rows.Count, 1).End(xlUp).Offset(1)
        .Offset(1).EntireRow.Delete
        .AutoFilter
        Else
         .AutoFilter 7, ar(j)
         .Offset(1).Copy Sheets(ar(j)).Cells(Rows.Count, 1).End(xlUp).Offset(1)
         Sheets(ar(j)).Cells(1).CurrentRegion.Offset(2).RemoveDuplicates Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), xlYes
         .AutoFilter
      End If
    Next j
  End With
End Sub

De code is nog wel verder te reduceren, maar dan wordt het denk ik, onbegrijpelijk voor je.
 
Hartelijk dank voor de reactie. Ik kan nu niet bij het document. Maandag ga ik er mee aan de slag. :)
 
Nogmaals dank VenA, maar helaas werkt het niet. Sorry voor mijn onderstaande vragen, maar om het zelf aan te passen moet ik snappen wat jij hebt gedaan / bedoelt.
Dit valt nog niet mee...

j = 0 to 3: wat betekent dit?
De rij met "O" onder status wordt keurig verplaatst. Al zie ik in dat gedeelte niet dat er naar de sheet Closed wordt verwezen.
In het volgende gedeelte (if else) zie ik nergens terugkomen dat assigned to David moet kopiëren naar David, Sylvia naar Sylvia of BB naar BB. Moet ik dat zelf nog toevoegen?
En waarom is dat AutoFilter 7?

Ik hoop dat je me kunt en wilt uitleggen wat dat is allemaal :)
 
Je hebt hiervoor helemaal geen VBA nodig als je in Excel gebruik maakt van een 'intelligente' tabel.

- gebruik nooit samengevoegde cellen.
- vermijd dubbele gegevens in een werkboek
- 1 werkblad is voldoende
- gebruik de ingebouwde filters van Excel
- maak gebruik van validatielijsten om de invoer te standaardiseren.
- voer in het voorbeeldbestand een datum in in kolom B, dan wordt meteen een nieuw 'record' in de tabel aangemaakt. (knop overbodig)
 

Bijlagen

Laatst bewerkt:
Goedemiddag snb. Dank voor het meedenken, maar dat is niet wat ik wil.
De bedoeling is toch echt dat nieuwe invoer bovenaan komt, dat assigned to wordt gefilterd en naar nieuwe tabbladen gaat. Waarbij opgelost van de eerste sheet verdwijnt.
Zoals ik het nu heb werkt het, maar het zou handiger zijn als ik de ontdubbelknop kon combineren met de filterknop. Nu moet ik per sheet nog ontdubbelen omdat, iedere keer als ik de filterknop gebruik, alles weer wordt gekopieerd.
En helaas krijg ik dit dus niet voor elkaar.
 
op zich was die macro van VenA goed, alleen liep hij tegen die eerste lege regel in je meldblad aan en analoog aan snb haat hij samengevoegde cellen
Code:
Sub VenA2()
    Dim ar, j  As Long
    ar = Array("CLOSED", "SYLVIA", "DAVID", "BB")                    'array met 4 elementen, genummerd van 0 tot 3
    With Sheets("MELDLIJST")
        With .Range("A3:A" & .Range("A" & Rows.Count).End(xlUp).Row).Resize(, 10)    'al je gegevens, 10 kolommen breed
             For j = 0 To 3                                           'in een loopje die array aflopen
                If j = 0 Then                                        'geval "Closed"
                    .AutoFilter 1, "O"                               'filter op de "O" in de A-kolom
                    .Offset(1).Copy Sheets(ar(j)).Cells(Rows.Count, 1).End(xlUp).Offset(1)    'doorkopieren naar tabblad "Closed"
                    .Offset(1).EntireRow.Delete                      'rijen wissen
                    .AutoFilter                                      'filter uitzetten
                Else
                    .AutoFilter 7, ar(j)                             'filter G-kolom op 1 van die andere namen
                    .Offset(1).Copy Sheets(ar(j)).Cells(Rows.Count, 1).End(xlUp).Offset(1)    'doorkopieren naar dat tabblad
                    Sheets(ar(j)).Cells(1).CurrentRegion.Offset(2).RemoveDuplicates Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), xlYes    'duplicaten verwijderen, die dekselse samengevoegde cellen in rij 1 en 2 !!!!!
                    .AutoFilter                                      'filter uitzetten
                End If
            Next j
        End With
    End With
End Sub
 
Ooit van sorteren gehoord ?

Heb je mijn bestand al goed bestudeerd ?
 
eigenlijk ben ik akkoord met SNB, ik zou ook alles in 1 blad houden etc
 
@snb: het zal vast niet zo bedoeld zijn, maar dat klinkt niet erg vriendelijk... ja ik heb zeker gehoord van sorteren en ja die functies ken ik wel en ja validation ken ik ook. Maar nee, dat is niet wat ik wil. Sorry daarvoor.
@Cow18: hartelijk dank voor de uitleg in de comments achter de code, ik ga er nogmaals naar kijken. Gekeken en het werkt! Mag ik je heel hartelijk danken Cow18!? :thumb:
 
Laatst bewerkt:
@Cow18
Ik heb de code de hele middag bestudeerd gisteren, maar 1 ding snap ik absoluut niet niet.
Voor het filter closed wordt specifiek aangegeven dat er gekeken moet worden naar de "O". Logisch.
Maar ik zie voor het andere filter nergens de namen terugkomen.
Zou je me dat nog willen uitleggen?
 
daar zorgt ar(j) voor, die bv. in het geval van j=1 de waarde "Silvia" aanneemt
Code:
 .AutoFilter 7, ar(j)                             'filter G-kolom op 1 van die andere namen
betekent dus in dat geval, filter de 7e kolom op "Silvia"
Iets verder wordt er dan naar de sheets(ar(j)) gekopieerd, dus naar tabblad "Silvia"zet anders eens een msgbox achter die else
Code:
 Else 
                    [COLOR="#FF0000"] msgbox ar(j)[/COLOR]
                    .AutoFilter 7, ar(j)                             'filter G-kolom op 1 van die andere namen
 
Laatst bewerkt:
Briljant! Dank, dit is heel leerzaam. Hopelijk blijft alles ook een beetje hangen bij me :)
Dan rest mij niets anders dan een ieder te danken en kan dit topic gesloten worden, het is opgelost :thumb:

msgbox toegevoegd en nu nog duidelijker zichtbaar! Hier word ik heel blij van.

Er is veel te vinden op internet en hier op het forum, maar zonder uitleg/toelichting kom ik echt niet verder, dus dit soort toelichtingen zijn meer dan welkom bij n00bs zoals ik :) .
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan