Gå til innhold

Makro for filter i Excel


Anbefalte innlegg

Hei

 

Jeg holder på med en oppgaveliste i Excel.

I denne listen har jeg flere kolonner med filter på.

Jeg har laget en makro til hvert filter og knapp til hver makro, men synes det blir for mange knapper å holde styr på. Jeg tenker da at jeg kan lage en dialogboks hvor jeg kan huke av de forskjellige kriteriene for sortering.

F.eks kolonne 1: hvor jeg har et felt som heter prioritet med valgene høy, middels, lav

Disse valgene har jeg i en tabell på ark 2.

 

For å dele dette opp litt så spør jeg om følgende:

 

1.Hvordan får jeg det slik at dialogboksen lister opp de kriteriene som ligger i den tabellen som er koblet til kolonne 1?

 

Hilsen Harald

Lenke til kommentar
Videoannonse
Annonse

Hei Harald.

Lag en userform med en liste Listbox1. Så denne koden i initialize-eventet:

 

Private Sub UserForm_Initialize()

 

Dim R As Long

 

With Sheets("Ark2")

 

For R = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row

 

Me.ListBox1.AddItem .Cells(R, 1).Value

 

Next

 

End With

 

End Sub

 

HTH. Beste hilsen Harald

Lenke til kommentar

Takker

 

Dette funker i kolonne 1.

(Jeg har omdøpt ark1 til ref og R til A)

 

Private Sub UserForm_Initialize()

 

Dim A As Long

 

With Sheets("ref")

 

For A = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row

 

Me.ListBox1.AddItem .Cells(A, 1).Value

 

Next

 

End With

 

End Sub

 

 

 

 

 

To spørsmål til:

 

1. Hvordan får jeg den til å starte tellingen i kolonne 1, rad 3?

2. Jeg ønsker å liste opp tre kolonner på denne userformen. Slik at jeg kan velge kriterier ut fra tre kolonner. F.eks. kolonne 1 (A), 2 (B), og 3©. Kan det gjøres enkelt?

 

Takk for hjelp!

Lenke til kommentar

Javist.

1:

 

For A = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row

 

2:

Dersom kolonnene er av forskjellig lengde, må du finne siste celle for hver, slik:

 

.Cells(.Rows.Count, 2).End(xlUp).Row 'b-kolonnen

 

.Cells(.Rows.Count, 3).End(xlUp).Row 'c-kolonnen

 

 

Me.ListBox2.AddItem .Cells(A, 2).Value 'b-kolonnen

 

Me.ListBox3.AddItem .Cells(A, 3).Value 'c-kolonnen

 

HTH. Beste hilsen Harald

Lenke til kommentar

Flott

 

Nå har jeg gjort det slik som dette.

 

 

Private Sub UserForm_Initialize()

 

Dim A As Long

 

With Sheets("ref")

 

For A = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row

 

Me.ListBox1.AddItem .Cells(A, 1).Value 'a-kolonnen

 

Next

 

For B = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row

 

Me.ListBox2.AddItem .Cells(B, 2).Value 'b-kolonnen

 

Next

 

For C = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row

 

Me.ListBox3.AddItem .Cells(C, 3).Value 'c-kolonnen

 

Next

 

End With

 

End Sub

 

For å komme videre nå, så må jeg vel koble de valgene jeg gjør mot en makro som filtrerer

hver kolonne ut fra det valget jeg har gjort i hver listbox.

Denne makroen må vel tilordnes OK - knappen.

 

F.eks noe slikt som dette:

 

 

Private Sub CommandButton1_Click()

 

ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=4, Criteria1:=ListBox1.Value

ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=5, Criteria1:=ListBox2.Value

ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=8, Criteria1:=ListBox3.Value

 

Me.hide

 

End Sub

 

Problemet mitt nå er at den legger på filter på alle tre kolonnene uansett, skulle gjerne hatt en måte å veksle mellom hvilken kolonne jeg legger filter på, slik at de jeg ikke velger noe kriterie for blir stående uten filter.

 

 

Harald

Lenke til kommentar

Takk for hjelpen, nå fungerer den utmerket.

Håper ikke jeg maser for mye her.

 

Et spørsmål til:

 

Jeg har en kolonne på slutten som jeg skriver "ok" i når oppgaven er utført.

Jeg kunne tenkt meg en boks i userformen som gjør at alle cellene i den kolonnen som det står ok i, blir filtrert bort, F.eks noe slikt?:

 

Private Sub CheckBox1_Click()

If CheckBox1 = True Then ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=9, Criteria1:="ok" Else ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=9, Criteria1:="ok"

End Sub

 

Får det ikke til å funke helt som jeg ville.

Noen forslag?

Lenke til kommentar

Hei

 

Nå fikk jeg det til.

Jeg måtte bare legge koden i slutten av koden til userformen og ikke som en handling som skjer når checkboxen markeres.

 

Slik:

 

If CheckBox1 = True Then ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=9, Criteria1:="-" Else ActiveSheet.Range("$B$7:$J$26").AutoFilter Field:=9

 

Det dukket opp et nytt problem nå:

 

Tabellen hvor kriteriene som vises i listbox'ene lastes ikke inn på nytt hver gang jeg åpner userformen.

Hvis jeg legger til et kriterie i tabellen, så kommer det ikke med i listboxen.

Hvordan får jeg til det?

Lenke til kommentar

En annen ting som hører til samme malen.

 

Jeg har en makro som jeg ønsker at skal kopiere rad 4, og lime denne inn over rad 8.

Den må også telle radene fra 8 og nedover som inneholde tall.

Så ønsker jeg at den setter inn dette tallet pluss 1 i celle A8.

Jeg prøvde å få det til via makroregistrering men det fikk ikke helt bra.

så prøvde jeg å legge inn noe av koden fra userformen, men får det ikke helt til.

 

Limte inn makrokoden som jeg har kommet frem til nå:

 

Sub SettInn()

'

' SettInn Makro

'

 

'

 

Dim t As Long

 

With ActiveSheet()

 

For t = 7 To .Cells(.Rows.Count, 1).End(xlUp).Row

Next

End With

 

 

Rows("4:4").Copy

Rows("8:8").Select

Selection.Insert Shift:=xlDown

Rows("8:8").Hidden = False

 

Range(A8).Select

Range(A8).Value = t

 

Range("C8").Select

 

End Sub

 

Kan du hjelpe meg med denne også?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...