28. marts 2004 - 13:40Der 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.
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.
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.
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
Synes godt om
Ny brugerNybegynder
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.