Avatar billede kmlp2 Nybegynder
28. marts 2004 - 13:40 Der er 4 kommentarer og
1 løsning

SUM.HVIS på synlige celler i et ark med autofilter

Jeg vil gerne lave en SUM.HVIS på de synlige celler i et ark med autofilter - altså ikke det kendte problem med at bruge SUBTOTAL for kun at summere de synlige, men derimod kun at summere de synlige celler, som opfylder en given betingelse, uden at de celler, som er skjult med autofilter, og som opfylder samme betingelse, tælles med.

Jeg har indtil videre ikke fundet på en bedre løsning end denne:

    Range("A1").Select
    ActiveCell.SpecialCells(xlLastCell).Select
    tal = ActiveCell.Row
    For Each cell In Range("B1:B" & tal)
        cell.Value = 0
        If cell.Rows.Hidden = True Then
            cell.Value = 0
        Else
            cell.Value = 1
        End If
    Next

- hvorefter jeg sætter kolonne C = kolonne A * kolonne B og så laver min SUM.HVIS på kolonne C.

Jeg kan se, at variablen "tal" rent faktisk får den rigtige værdi, altså rækkenummeret på sidste række med data i kolonne A, også selv om rækken er skjult, men for de skjulte rækkers vedkommende virker tricket kun på dem, der kommer før sidste synlige række - de får værdien 0 i kolonne B, mens de skjulte rækker efter sidste synlige række beholder den værdi i kolonne B, som de havde i forvejen.

Hvorfor det, og hvad kan jeg gøre?
Andre/bedre metoder til at løse problemet end ovenstående er også velkomne.
Avatar billede kmlp2 Nybegynder
28. marts 2004 - 13:44 #1
Tilføjelse: Den første forekomst af "cell.Value = 0" i eksemplet skulle egentlig ikke have været med. Jeg satte den ind for at nulstille alle celler i kolonne B, men den har heller ingen virkning efter sidste synlige række.
Avatar billede kmlp2 Nybegynder
28. marts 2004 - 16:01 #2
Endnu en tilføjelse: På et lille testark med kun 20 rækker kan jeg godt få metoden til at virke. I det ark, hvor jeg skal den, er der ca. 3.000 rækker. Noget kunne altså tyde på, at der er en begrænsning på et eller andet niveau. Er det For-Next proceduren, der er for tung? Kan man speede op med en anden procedure?
For en ordens skyld: I hver række er der en del andre celler, dvs. i alt adskillige tusinde, der afhænger af, om der står 0 eller 1 i den kolonne, som jeg har kaldt for kolonne B i eksemplet, men da makroen starter med at slå autoberegning fra (og slutter med at slå den til igen), går jeg ikke ud fra, at det er en del af problemet.
Avatar billede kmlp2 Nybegynder
28. marts 2004 - 16:02 #3
I det ark, hvor jeg skal den = I det ark, hvor jeg skal bruge den...
Avatar billede kmlp2 Nybegynder
28. marts 2004 - 16:30 #4
Se bort fra den seneste kommentar - jeg kan heller ikke få den til at virke i et lille testark.
Avatar billede kmlp2 Nybegynder
28. marts 2004 - 16:57 #5
Nå, jeg har fundet et acceptabelt (brugbart) svar selv:

    Range("A1").Select
    Selection.End(xlDown).Select
    tal1 = ActiveCell.Row
    ActiveCell.SpecialCells(xlLastCell).Select
    tal2 = ActiveCell.Row
    For Each cell In Range("B1:B" & tal1)
        If cell.Rows.Hidden = True Then
            cell.Value = 0
        Else
            cell.Value = 1
        End If
    Next
    Set dennecelle = Range("A" & tal1 + 1)
    Do Until dennecelle = Range("A" & tal2 + 1)
        dennecelle.Offset(0, 1).Value = 0
    Loop
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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