Avatar billede ehrhorn Nybegynder
24. oktober 2013 - 14:29 Der er 5 kommentarer og
1 løsning

Min / Max af kolonner der ikke er "hidden"

Hej

Jeg har brug for hjælp til at finde minimum og maksimum af en mængde data. JEg skal kun inkludere de kolonner der ikke er skjulte. Ved almindelig =min( inkluderes også de skjulte.

Jeg har rodet lidt med =subtotal( , men den virker øjensynligt kun til unhidden rækker (underligt nok)

Nu har jeg så fremstillet følgende vba funktion (for minimum), men heller ikke den virker:
Værdien af minimum burde skifte alt efter hvilke kolonner der er synlige.

Function Min_Visible_Cells(range)
    Application.Volatile
    For Each cell In range
        If cell.Rows.Hidden = False Then
            If cell.Columns.Hidden = False Then
                Min = Application.WorksheetFunction.Min(range)
            End If
        End If
    Next
    Min_Visible_Cells = Min
End Function


Jeg har hentet MEGET inspiration fra denne kode:
http://support.microsoft.com/kb/150363

Function Sum_Visible_Cells(Cells_To_Sum As Object)
      Application.Volatile
      For Each cell In Cells_To_Sum
          If cell.Rows.Hidden = False Then
              If cell.Columns.Hidden = False Then
                  Total = Total + cell.Value
              End If
          End If
      Next
      Sum_Visible_Cells = Total
End Function

På forhånd tak
Jonas
Avatar billede jens48 Ekspert
24. oktober 2013 - 23:16 #1
Funktionen skal ligge i et modul for at fungere og jeg har fået det til at virke med nedenstående:

Function Min_Visible_Cells(Cells_to_Check_for_Min As Object)
      Application.Volatile
      Min = 10 ^ 99
      For Each cell In Cells_to_Check_for_Min
          If cell.Rows.Hidden = False Then
              If cell.Columns.Hidden = False Then
              If cell.Value < Min Then
                  Min = cell.Value
              End If
          End If
          End If
      Next
      Min_Visible_Cells = Min
  End Function
Avatar billede store-morten Ekspert
26. oktober 2013 - 01:30 #2
Måske:
=SUBTOTAL(105;A1:A10)
Avatar billede ehrhorn Nybegynder
30. oktober 2013 - 08:51 #3
@store-morten.
Subtotal virker så vidt jeg kan forstå kun i tilfælde af at problemstillingen havde omhandlet skjulte rækker. Aner ikke hvorfor det ikke kan lade sig gøre med kolonner - men nej :(

@jens48
Tusind tak. Det ser også ud til at virke for mig.

Når blot man lige trykker F9 eller andet der gennemtvinger en opdatering af cellerne. Kan man undgå dette? Troede egentlig det var hvad application.volatile gjorde...

Hvis du har mulighed for det gider du så knytte en kommentar til hvorfor din kode virker, og min ikke virker (så kan jeg måske lære noget :) )

Smid i hvert fald et svar så sender jeg point din vej

Mvh Jonas
Avatar billede ehrhorn Nybegynder
30. oktober 2013 - 09:12 #4
@jens48

Bonus spørgsmål her på falderebet:

Jeg skal benytte denne funktion med et range der også indeholder #N/A'er. Normalt vil =min( ikke virke hvis man inkluderer en fejl i sit range.
Det kom jeg ud over ved følgende formel: (CTRL+SHIFT+Enter)
=IFERROR(MIN(IF(ISNA(U8:AR11);999999;IF(U8:AR11=0;9999999;U8:AR11)));0)

Så troede jeg jo at jeg blot kunne erstatte min med min_visible_Cells men nej :(

Det giver mig bare et 0.

Det hele hænger på at jeg skal have defineret minimun og maksimum for et range og derefter kan jeg fitte 2.aksen i min graf bedst muligt.

Mvh Jonas
Avatar billede jens48 Ekspert
30. oktober 2013 - 18:51 #5
Jeg har nedenunder indsat kommentarer, så du kan se hvad de enkelte linier laver. Desuden er der insat et ekstra check, så #NA'ere og #DIV/0 ikke medregnes.

Function Min_Visible_Cells(Cells_to_Check_for_Min As Object)
      Application.Volatile
      Min = 10 ^ 99 ' valg af meget stort tal som foreløbig minimumsværdi
      For Each cell In Cells_to_Check_for_Min ' hver celle i valgt område checkes
          If cell.Rows.Hidden = False Then ' checker at rækken ikke er skjult
              If cell.Columns.Hidden = False Then ' checker at kolonne ikke er skjult
              If IsNumeric(cell.Value) Then ' checker om cellen indeholder et tal
                  If cell.Value < Min Then ' checker om den testede celle er mindre end foreløbig minimumsværdi
                  Min = cell.Value ' hvis ja, så sæt foreløbig minimumsværdi = aktuel celle
              End If
              End If
          End If
          End If
      Next ' loop til næste celle
      Min_Visible_Cells = Min 'endelig minimumsværdi
  End Function
Avatar billede ehrhorn Nybegynder
31. oktober 2013 - 13:17 #6
Tusind tak! Det var en stor hjælp!
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

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