Avatar billede mile Juniormester
04. september 2003 - 11:32 Der er 1 kommentar og
1 løsning

Hjælp til VBA filtrering

Hej

Jeg har denne kode:


Dim rng As Range
Dim rng2 As Range
Dim c As Range
Const filter = "3300"
Set rng = Range("A:A")
Set rng2 = Range("A1:K1")
For Each c In rng
  If c.Value = "" Then Exit For 'spinger ud af løkke ved tom celle
  If Left(c, Len(filter)) = filter Then Set rng2 = Union(Range(c, c.Offset(0, 10)), rng2)
Next
rng2.Select
rng2.Copy
Workbooks.Add
ActiveSheet.Paste
Selection.Columns.AutoFit



til at filtrere de tal der starter med 3300

Men skal egentligt bruge et filter mere eks. 3301, har prøvet at indsætte en const mere, men den giver fejl i Len(filter)

Er der nogen der kan fortælle hvordan man filterer på flere, eksempelvis 2 (3300 og 3301) og også gerne et interval (33010 --> 33015) ??

Jeg vil helst have at der tages udgangspunkt i den eksisterende kode, da det er en del at noget større..
Avatar billede tfa_dk Nybegynder
04. september 2003 - 21:33 #1
Her kommer en grim og ikke særlig fleksibel løsning, men den burde være nem at forstå og dermed men at rette i.
Jeg ville have brugt et ark med et navngivet område til at gemme disse filterværdier i med det krævede jeg sendte hele regnearken og ikke kun koden.

Bemærk: I Excel 2000 findes et 'objekt' at typen filter. 

Sub t1()
Dim rng As Range
Dim rng2 As Range
Dim c As Range

Const filterMax As Integer = 2 ' Antal filterværdier
Dim filterFrom(1 To filterMax) As String ' Nedre grænseværdi for filter
Dim filterTo(1 To filterMax) As String  ' Øvre grænseværdi for filter
Dim i As Integer

Dim wkb As Workbook

filterFrom(1) = "3300"
filterTo(1) = "3300"
filterFrom(2) = "3400"
filterTo(2) = "3499"

Set rng = Range("A:A")
Set rng2 = Range("A1:K1")
For Each c In rng
  If c.Value = "" Then Exit For 'spinger ud af løkke ved tom celle
  For i = 1 To filterMax  ' i = LBound(filterFrom) To UBound(filterFrom)
    If Left(c, Len(filterFrom(i))) >= filterFrom(i) And _
      Left(c, Len(filterTo(i))) <= filterTo(i) Then
      Set rng2 = Union(Range(c, c.Offset(0, 10)), rng2)
    End If
  Next i
Next
Set wkb = Workbooks.Add
rng2.Copy (wkb.Sheets(1).Range("A1"))
wkb.Sheets(1).Columns.AutoFit

End Sub
Avatar billede mile Juniormester
17. september 2003 - 11:01 #2
Nå ham der skal bruge det, har ikke haft tid til at teste endnu, men derfor skal du ikke gå glip af points. Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB