Rijen copieren onder bepaalde condities

Status
Niet open voor verdere reacties.

dannieshelp

Gebruiker
Lid geworden
29 jun 2008
Berichten
16
Goedenavond,

Ik heb het volgende probleem:
Ik wil graag een macro hebben die het volgende moet doen:
Hij moet de eerste 4 kolommen in de sheet "Formulations" doorzoeken, wanneer de rijen aan bepaalde voorwaarden voldoen, moeten deze rijen (bereik A6 t/m F???) gecopieerd worden naar de sheet "Results".

De voorwaarden zijn:
In kolom 1 moet de waarde overeenkomen met de waarde in cel "L7" en
In kolom 2 moet de waarde overeenkomen met de waarde in cel "L8" en
In kolom 3 moet de waarde overeenkomen met de waarde in cel "L9" en
In kolom 4 moet de waarde overeenkomen met de waarde in cel "L10"

In een later stadium wil ik de macro aan een knop op een formulier hangen, zodat ik op dat formulier zoekcriteria kan invullen en vervolgens met een druk op de knop het resultaat op de "Results" sheet zie.

Ik heb een uitgekleed voorbeeld bij dit bericht gedaan.

Alvast bedankt,

Danny
 

Bijlagen

Kijk in de hulpfunktie van Excel onder geavanceerd filter.
 
Advanced filter werkt gedeeltelijk

Ha snb,

Ik heb daarmee zitten stoeien en heb de volgende macro geschreven:

PHP:
Sub macroFilter()

Blad4.Unprotect
Range("A6:F50").ClearContents
Worksheets("Formulations").Select
Range("A6:F50").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Range("L7:L10"), _
    CopyToRange:=Worksheets("Search").Range("A6:F50"), _
    Unique:=True

        
End Sub

Deze werkt wanneer L7 t/m L10 is ingevuld.
Wanneer ik niet alle cellen(L7 t/m L10) heb ingevuld, dan geeft hij een runtime error 1004 ("The extract range has a missing or illegal field name).
Ik wil dat hij de criteria gebruikt die ingevuld is, dat ik dus alleen op bv. product naam kan zoeken, maar ook op meerdere criteria wanneer ik die weet.

Hoe moet ik dat herschrijven? Ik ben namelijk niet zo handig in excel (zoals je misschien al gemerkt heb :-))

Danny
 
Code:
Sub macroFilter() 
  With sheets("Search")
     .Unprotect 
     .Range("A6:F50").ClearContents 
     sheets("Formulations").Range("A6:F50").AdvancedFilter _ 
    Action:=xlFilterCopy, _ 
    CriteriaRange:= sheets("formulations").Range("L7:L10"), _ 
    CopyToRange:=.Range("A6:F50"), _ 
    Unique:=True 
End Sub
Vermijd select en activate.
Geef bij een range altijd aan in welk werkblad die range zich bevindt.
Gebruik bij advancedfilter een criteriumgebied dat evenveel kolommen heeft als het te filteren gebied (A6:f50): ergo 6 kolommen.
Gebruik de 1e regel van het criteriumgebied voor de 'veldnamen': dezelfde teksten dus als in de eerste regel van het te filteren gebied.
Het criteriumgebied kan (inclusief de veldnamen) maximaal 3 rijen bevatten.
Het enkelvoud van criterium is criterium, het meervoud criteria: ergo het criterium is, de criteria zijn.
 
Ok, weer wat geleerd.
Nu heb ik het criteriumgebied aangepast zoals je voorstelde, maar het enige wat de macro doet is telkens alleen de eerste regel (U-503,P-60, etc) kopiëren.

De macro ziet er nu als volgt uit:

PHP:
Sub macroFilter()
  With Sheets("Search")
     .Unprotect
     .Range("A6:F50").ClearContents
     Sheets("Formulations").Range("A6:F50").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Sheets("Formulations").Range("AA5:AF6"), _
    CopyToRange:=.Range("A6:F50"), _
    Unique:=True
End With
End Sub

Hij hoeft alleen in de eerste 4 kolommen te zoeken, maar moet wel de waarden die in alle 6 de kolommen staan kopiëren.
Moet in het criteriumgebied de cellen voorzien zijn van een waarde of negeert hij deze wanneer deze leeg zijn? Er zal namelijk niet altijd data in elke cel staan, afhankelijk van wat de gebruiker weet.

Danny
 
Wat U en P ermee te maken hebben snap ik niet
Zorg dat in A6:F6 dezelfde veldnamen staan als in AA6:AF6
Maak van het criteriumgebied AA6:AF7
Zet het eerste selectiecriterium in rij 7 van gebied AA6:AF7
Probeer het eens met:
Code:
Sub macroFilter() 
  With Sheets("Search") 
     .Unprotect 
     .Range("A6:F50").ClearContents 
     Sheets("Formulations").Range("A6:F50").AdvancedFilter xlFilterCopy,Sheets("Formulations").Range("AA6:AF7"),.Range("A6:F50")
  End With 
End Sub
 
Advanced filter werkt nog steeds niet

Ha snb,

De U en P slaan op de data die in de tabel staan zoals je in het voorbeeldbestand kan zien. Ik zal het bestandje nog een keer uploaden, maar nu met jouw code daarin.

Wanneer ik nu de macro activeer kopiëert hij alle rijen i.p.v. alleen de rijen waarmee de data in het criteriumgebied overeenkomt. Is er ook een andere manier om dit voor elkaar te krijgen of denk je dat het met advanced filter gewoon zou moeten lukken?

Groeten,

Danny
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan