SUM.HVIS funktion som ignorerer skjulte celler
På denne side viser jeg, hvordan man kan lave en regnearksfunktion som Excels SUM.HVIS, men en som ser bort fra skjulte celler.
I Excel kan du ikke få regnearksfunktionen SUM.HVIS til at ignorere skjulte celler. Der er en kringlet omvej, hvor man bruger SUMPRODUKT, SUBTOTAL og FORSKYDNING, men formlen bliver temmelig langhåret, og for brugeren er det meget nemmere at bruge en regnearksfunktion skrevet i VBA.
Herunder følger funktionen, som blev til efter et læserønske. Den er ikke lynhurtig, hvis den skal summere rigtig mange celler, men den virker og er nem at bruge.
For at kopiere koden, markerer du den bare med musen, trykker CTRL+C og indsætter den i et VBA-modul med CTRL+V.
Når du har indsat koden, vil dialogboksen se sådan ud ( i Excel 2003), når du vælger funktionen SUMHVISSKJULT under "Indsæt funktion" og kategorien "Brugerdefineret".
- Kriterieområde er cellerne, vi holder op mod kriteriet
- Sumområde er det område (inklusive skjulte celler), som summeres
- Operator er =, >, <, >=, =< eller <>
- Kriterium er enten et tal eller et ord (tekst)
Hvis Operator lades tom, vil funktionen bruge "=". Selvfølgelig kan funktionen også indtastes i en celle.
Selvom der er skjulte celler i sumområdet, ignoreres de. Skjulte celler i kriterieområdet ignoreres ikke, men det kan nemt laves.
I Excels SUM.HVIS-funktion skrives operator og kriterium i ét felt, men for nemheds skyld og for ikke at sløve funktionen, har jeg skilt dem ad.
Som med andre regnearksfunktioner kan man også indsætte formlen direkte i en celle, men så skal man selv have styr på parametrenes rækkefølge.
Bemærk, at parameteren "Kriterium" er deklareret som datatypen String. Et kriterium kan være et tal eller tekst, og ved at deklarere inputtet som String, undgår man fejl, hvis brugeren indtaster et ord (tekst) og undlader at sætte det i citationstegn som fx "Ord".
Havde man defineret Kriterium som datatypen Variant, ville Ord uden citationstegn udløse en Type mismatch-fejl.
Derfor indlæser vi kriteriet i en variabel, vTjek, af datatypen Variant, og er kriteriet numerisk, konverterer vi det til et tal med VBA-funktionen CDbl(Kriterium).
Lad os komme i gang!
Function SUMHVISSKJULT(Kriterieområde As Range, Sumområde As Range, _
Operator As String, Kriterium As String) As Double
Dim bSkjult As Boolean
Dim bEjOpfyldt As Boolean
Dim lCount As Long
Dim dSum As Double
Dim rCell As Range
Dim vTjek As Variant
On Error GoTo ErrorHandle
Operator = Trim$(Operator)
If InStr(1, Operator, " ") Then
MsgBox "Mellemrum ikke tilladt i operator."
Exit Function
End If
If Len(Operator) = 0 Then Operator = "="
If IsNumeric(Kriterium) Then
vTjek = CDbl(Kriterium)
Else
vTjek = Kriterium
End If
For Each rCell In Sumområde
bSkjult = False
bEjOpfyldt = False
lCount = lCount + 1
With rCell
If Rows(.Row).Hidden = True Or _
Columns(.Column).Hidden = True Then bSkjult = True
End With
If bSkjult = False Then
If lCount <= Kriterieområde.Count Then
With Kriterieområde.Item(lCount)
Select Case Operator
Case "="
If .Value <> vTjek Then bEjOpfyldt = True
Case ">"
If .Value <= vTjek Then bEjOpfyldt = True
Case "<"
If .Value >= vTjek Then bEjOpfyldt = True
Case ">=", "=>"
If .Value < vTjek Then bEjOpfyldt = True
Case "=<", "<="
If .Value > vTjek Then bEjOpfyldt = True
Case "<>"
If .Value = vTjek Then bEjOpfyldt = True
End Select
End With
End If
End If
If bEjOpfyldt = False And bSkjult = False Then dSum = dSum + rCell.Value
Next
SUMHVISSKJULT = dSum
BeforeExit:
Set rCell = Nothing
Exit Function
ErrorHandle:
MsgBox Err.Description
Resume BeforeExit
End Function
Du kan tilføje en kort beskrivelse, som vises i indsæt funktion-dialogboksen. På billedet højere oppe skrev jeg: "Som Excels SUM.HVIS, men skjulte celler ignoreres."
Det gør du ved at vælge "Makroer" (eller tryk ALT+F8), og en liste med makroer vil komme frem (hvis der er nogle makroer). Men funktioner vises ikke! Skriv eller indkopier funktionens navn og klik "Indstillinger". Så får du mulighed for at skrive lidt.
Husk, at regnearksfunktioner kun kan returnere en værdi, når de kaldes fra en celleformel. De kan ikke ændre noget som helst andet som fx cellens farve.
Relateret:
|