Gefilterde range selecteren

Status
Niet open voor verdere reacties.

GroenGeeld21

Gebruiker
Lid geworden
13 jan 2016
Berichten
7
Ik probeer een gefilterde range te definiëren, en een andere range hieraan gelijk te stellen.

Het kopiëren van deze range lukt wel, maar gezien het feit deze handeling meerdere keren moet gebeuren (en kopiëren vertraagt), wil ik het graag op een andere manier proberen.

Mijn code:

LastRowKlacht = Cells(Rows.Count, "A").End(xlUp).Row
ActiveSheet.Range("$A$1:$AJ" & LastRowKlacht).AutoFilter Field:=1, Criteria1:=Sleutel
AantalKlachtenRegels = Range("A2:A" & LastRowKlacht).SpecialCells(xlCellTypeVisible).Count
Klachten = Range("C2:F" & LastRowKlacht).SpecialCells(xlCellTypeVisible)


Range("D19:G21") = Klachten (dit is in een andere sheet)

Wat er echter gebeurt is dat ik in Range("D19:G21") 3 keer dezelfde regel krijg, terwijl dit 3 verschillende regels zouden moeten zijn. (Er zijn ongeveer 3000 regels, waar er door op de sleutel te filteren 3 van over blijven).

Kan iemand mij hier alsjeblieft mee helpen????
 
Is dit voor de de helderzienden onder ons of ga je ook nog een voorbeeldbestandje bijvoegen?
 
Zoiets?

Code:
Sub VenA()
With Sheets("Klachten").Cells(1).CurrentRegion
    .AutoFilter 1, [D4]
    [d11].Resize(3, 3) = .Offset(1, 2).Resize(3, 3).Value
    .AutoFilter
End With
End Sub
 
Werkt helaas niet..
Hij plak nu altijd de eerste 3 klachten uit het klachten tabblad, ongeacht de sleutel die wordt ingevoerd...
 
Zo misschien

Code:
Sub test()
With Sheets("Retail gegevens")
    lr = .Range("F" & Rows.Count).End(xlUp).Row
    .Range("D11", "F" & lr).ClearContents
End With
With Sheets("Klachten").Cells(1).CurrentRegion
    .AutoFilter 1, [D4]
    .Offset(1, 2).Copy Sheets("Retail gegevens").Range("D11")
    .AutoFilter
End With
End Sub

mvg
Leo
 
Nog een alternatief

Code:
Sub VenA()
Dim ar1(2, 2)
ar = Sheets("Klachten").Cells(1).CurrentRegion
For j = 2 To UBound(ar)
    If ar(j, 1) = [d4] Then
        ar1(t, 0) = ar(j, 3)
        ar1(t, 1) = ar(j, 4)
        ar1(t, 2) = ar(j, 5)
        t = t + 1
        If t > 2 Then Exit For
    End If
Next j
[d11].Resize(3, 3) = ar1
End Sub
 
Mag ik een aanvullende vraag stellen?
Ik probeer namelijk nu de code te begrijpen..
Wat is de functie/reden van een punt voor een code?

Leo, zou je wellicht je code kunnen toelichten? Dan begrijp ik wat er gebeurt :)
Ik wil namelijk maar 3 kolommen uit de 'klachten sheet' kopiëren, en dat gebeurt nu, omdat er maar 3 gevulde cellen naast elkaar staan. Maar als dit er meer zijn, kopieert ie alle kolommen. Hoe kan ik aangeven dat er maar een x aantal kolommen moeten worden gekopieerd?
 
Laatst bewerkt:
voor steeds maar de 3 kolommen (D-E-F) te kopieren
Deze regel aanpassen
Code:
.Offset(1, 2).Copy Sheets("Retail gegevens").Range("D11")

naar
Code:
.Offset(1, 2).Resize(, 3).Copy Sheets("Retail gegevens").Range("D11")

uitleggen is niet mijn beste eigenschap maar toch een poging,

verschil met of zonder punt
Code:
With Sheets("Retail gegevens")
.Range("A1") is Range A1 van Sheets Retail gegevens
Range("A1") is Range A1 van Active Sheet  dus van het werkblad dat aktief is tijdens het aanroepen van code
End With

mvg
Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan