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

Rijen kopieeren met voorwaarde

Status
Niet open voor verdere reacties.

gl3nn1987

Gebruiker
Lid geworden
24 sep 2010
Berichten
120
Dag, ik heb een vraag. Ik wil graag dat in tablad 1 de hele rij wordt weergeven uit tabblad 2 met de voorwaarde dat de gegevens uit tablad 2 tussen 2 aangegeven datums ligt. Dit kunnen dus meerdere rijen betreffen.

Hier mijn begin om het te verduidelijken.

=SOMPRODUCT(--('tabblad 2'!$B$2:$B$20000>=$B$1);--('tabblad 2'!$B$2:$B$20000<=$D$1))

Waarbij De ontvangstdatum in tabblad 2 in kolom B staat en in B1 en D1 de datums voor de cirteria.

1 rij in blad 2 bevat ongeveer 10 ingevulde kollommen.

Nu wil ik in tabblad 1 de rijen weergeven. Dus als ik de datum verander moeten deze rijen dus meeveranderen.

Ik heb al rondgekeken op het forum maar daarkwam er nog niet uit. Volgens mij is de oplossing niet moeilijk....
 
Beste gl3nn1987 ;)

Kan je een voorbeeldbestandje hier toevoegen zonder vertrouwelijke informatie.

Je kan altijd een filter plaatsen, dan op het driehoekje kiezen voor aangepast voor Excel 2003 of getalfilters bij Excel 2007.


Groetjes Danny. :thumb:
 
Hierbij een excel bestand.

Ik wil dan zeg vanaf bv rij 10 op blad 1 de resultaten weergeven van alle rijen die tussen de 2 datums liggen (inclusief datum zelf)

begrijpelijk nu?
 

Bijlagen

  • vb.xls
    13,5 KB · Weergaven: 65
Beste gl3nn1987 ;)

Zie bestandje.

Ga naar ALT + F8 en klik op uitvoeren.

Groetjes Danny. :thumb:
 

Bijlagen

  • vb (Danny 147).xls
    35 KB · Weergaven: 92
Of zonder Copy (altijd ietsje snellere verwerking)
Code:
Sub KOPIEEREN()
    Dim c      As Range
    y = 3
    [A3].CurrentRegion.ClearContents
    For Each c In Sheets("Blad2").Range("B1:B20")
        If c >= [Blad1!B1] And c <= [Blad1!D1] Then
            Blad1.Range("A" & y).Offset(1, 0) _
                .Resize(, 7) = Blad2.Cells(c.Row, 1).Resize(, 7).Value
            y = y + 1
       End If
       Next
End Sub
 
Top dit jongens werkt goed. Ik merk weinig verschil nog iig op dit bestand welke van de 2 ik gebruik. Maar gezien de grote van het echte bestnad zal ik optie 2 doen. Eerste keer dat ik met macro's werk dus zal dankzij deze formule vanzelf wel wegwijs ermee worden.
Miss stomme vraag maar zou je achter elke regel even kunnen uitleggen wat hij precies doet. T zou mij iig kunnen helpen t te leren. Ik snap namelijk niet alles wat in de code staat
 
Laatst bewerkt:
Beste gl3nn1987 ;)

Mijn code wat aangepast zodat ze over een groter bereik kan beschikken.

Code:
Sub KOPIEEREN()
    Dim c      As Range
    y = 3
       [A4].CurrentRegion.ClearContents
    For Each c In Sheets("Blad2").Range("B1:B200")
        If c >= [B1] And c <= [D1] Then
            c.Rows.EntireRow.Copy Sheets("Blad1").Range("A" & y).Offset(1, 0)
            y = y + 1
       End If
       Next
End Sub

Uitleg over de code:

Sub KOPIEEREN() Begin van de code met als naam KOPIEEREN
Dim c As Range = c geldt voor alle cellen wat c betekend.
y is 3 = cellen na de cel waar er iets staat, in dit geval wordt dit A4 om te beginnen.
[A4].CurrentRegion.ClearContents = alle cellen die aangrenzend zijn met elkaar vanaf A4 worden gewist.
For Each c In Sheets("Blad2").Range("B1:B200") = Voor alle cellen in het bereik van B1:B200 in Blad2.
If c >= [B1] And c <= [D1] Then = ALS c groter of gelijk aan is dan B1 EN dat c kleiner of gelijk aan is dan D1.
c.Rows.EntireRow.Copy Sheets("Blad1").Range("A" & y).Offset(1, 0) = Alle rijen waar c met deze voorwaarde voldoet moet worden gekopiëerd en geplaatst worden op Blad1 beginnen in A4.
y = y + 1 = Telkens een cel optellen A5 voor de volgende.
End If =Achter elke Als-functie (If) moet er een einde zijn (End If)
Next = Volgende regel nakijken op de voorwaarde.
End Sub = Einde van de code.

Groetjes Danny. :thumb:
 
Eentje met dynamisch bereik
Code:
Sub KOPIEEREN()
    Dim c      As Range
    y = 3
    [A3].CurrentRegion.ClearContents
    With Blad2
    For Each c In .Range("B1:B" & .Cells(Rows.Count, 2).End(xlUp).Row) ' het dynamisch bereik past zich automatisch aan
        If c >= [Blad1!B1] And c <= [Blad1!D1] Then                    ' aan de lengte van de gegevens
            Blad1.Range("A" & y).Offset(1, 0) _
                .Resize(, 7) = .Cells(c.Row, 1).Resize(, 7).Value ' hiermee bepaal je het aantal kolommen dat overgenomen
            y = y + 1                                             ' moet worden, wijzig 7 in het aantal gewenste kolommen
       End If
       Next
    End With
End Sub
 
Nog een klein vraagje want ik heb hem nu perfect werkend. Maar als ik nou alleen kolom 1;3;5 wil weergeven ipv 1 t/m 5?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan