Avatar billede passiflora Juniormester
01. februar 2008 - 13:32 Der er 18 kommentarer og
2 løsninger

Skjul linier med hjælp af makro

Hejsa

Jeg har bygget en simpelt makro til at skjule nogle linier (knap 5000)

Her er makroen

Sub skjullinier()

    Application.ScreenUpdating = False
    For r = 7 To 4928
      With Worksheets("artikelliste").Cells(r, 10)
            If .Value = "" Then
                With Worksheets("artikelliste").Rows(r)
                    .EntireRow.Hidden = True
                  End With
            End If
        End With
    Next r
    Application.ScreenUpdating = True
End Sub


Det tager lang tid

Kan jeg mon gøre det bedre ...

Søren
Avatar billede gider_ikke_mere Nybegynder
01. februar 2008 - 13:52 #1
Denne er noget hurtigere:

Sub skjullinier()
    Application.ScreenUpdating = False
    Data = Range("A1:A" & 4928)
    For r = 7 To 4928
        If Data(r, 1) = "" Then
            Rows(r).Hidden = True
        End If
    Next r
    Application.ScreenUpdating = True
End Sub
Avatar billede passiflora Juniormester
01. februar 2008 - 13:59 #2
Lækkert ...

Og når jeg skulle spørge på kolonne 10 ... skriver jeg ...
Avatar billede passiflora Juniormester
01. februar 2008 - 14:05 #3
Mon så ikke bare jeg skal kalde data for

    Data = Range("j1:j" & 4928)
Avatar billede gider_ikke_mere Nybegynder
01. februar 2008 - 14:09 #4
Hvis der er mange huller, kan denne gøre det noget hurtigere:

Sub skjullinier()
    Maks = 4928 + 1
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Data = Range("A1:A" & Maks)
    For R = 7 To 4928
        If Data(R, 1) = "" Then
            For T = R + 1 To Maks
                If Data(T, 1) <> "" Or T = Maks - 1 Then
                    Range("A" & R & ":" & "A" & T - 1).EntireRow.Hidden = True
                    R = T
                    Exit For
                End If
            Next
        End If
    Next R
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
Avatar billede excelent Ekspert
01. februar 2008 - 14:09 #5
Sub Skjul()
Range("J7:J4928").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
Avatar billede gider_ikke_mere Nybegynder
01. februar 2008 - 14:10 #6
01/02-2008 14:05:42: Korrekt.
Avatar billede passiflora Juniormester
01. februar 2008 - 14:18 #7
Tak excelent

Det jo ikke bare lidt hurtigere ...

Sender du et svar.
Avatar billede excelent Ekspert
01. februar 2008 - 14:20 #8
må jeg dele med akyhne :-)
Avatar billede passiflora Juniormester
01. februar 2008 - 14:21 #9
excelent ... hvis jeg nu skulle spørge efter > 5 ... hvad gjorde jeg så ...
Avatar billede excelent Ekspert
01. februar 2008 - 14:22 #10
så skal der anvendes en løkke som i akyhne's eks
Avatar billede passiflora Juniormester
01. februar 2008 - 14:26 #11
Tak ...

... du glemte vel ikke svaret ... :)
Avatar billede gider_ikke_mere Nybegynder
01. februar 2008 - 14:38 #12
På 57000 rækker med ca hver 2. celle tom, er min kode ca 3 gange hurtigere, men excelents kode er selvfølgelig noget mere simpel.
Avatar billede passiflora Juniormester
01. februar 2008 - 14:44 #13
Akyhne ... for den sidste version du sendte, må indrømme at jeg ikke testede den, for excelents var bare kanon hurtig ...

Din kan jeg bedre bruge en anden gang, hvis jeg ikke lige skal teste for ""
Avatar billede passiflora Juniormester
01. februar 2008 - 14:47 #14
Der missede jeg en kommentar ...

Dele vil være kanon med mig ...
Avatar billede gider_ikke_mere Nybegynder
01. februar 2008 - 14:56 #15
Det er helt op til dig hvem der skal have point. Jeg føler mig ikke snydt hvis du giver dem til excelent. Hans kode kan være meget mere overskuelig de fleste tilfælde.

Men her er i hvertfald et svar.
Avatar billede excelent Ekspert
01. februar 2008 - 15:02 #16
ok hjemme igen, her er svar fra mig også

vedr. kommentar 01/02-2008 14:21:03
hvor mange celler er der data i, er det formler eller blot talværdier?
Avatar billede passiflora Juniormester
01. februar 2008 - 15:08 #17
Excelent: I tilfældet her er det kun værdier, måske max 40 linier ...
Avatar billede excelent Ekspert
01. februar 2008 - 15:15 #18
så ville jeg gøre sådan (hvis det stadig er i J7:J4928)

Sub talSkjul()
Range("J7:J4928").SpecialCells(xlCellTypeConstants, 1).Select
  For Each c In Selection
    If c > 5 Then c.EntireRow.Hidden = True
  Next
End Sub
Avatar billede passiflora Juniormester
01. februar 2008 - 15:28 #19
Tak Excelent ... vil have det "i mente" ...
Avatar billede excelent Ekspert
01. februar 2008 - 15:30 #20
Disse SpecialCells funktioner virker kun op til et vist antal rækker
mener det er omkring 7000 stk., men det rækker normalt også i de fleste tilfælde.
velbekom.
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