Avatar billede Rasmus_ep Nybegynder
18. juli 2013 - 14:33 Der er 9 kommentarer og
1 løsning

Makro til dynamisk visning/skjulning af rækker

Hej

Jeg er ved at sætte nogle skemaer op i Ecxel der indeholder spørgsmål der relaterer sig til forskellige områder, hvorfor ikke alle spørgsmål er relevante for en given respondent.

Jeg har et indelende spørgsmål hvor respondenten skal indikere om vedkommende tilhører gruppe A eller B, hvilket jeg vil bruge som bestemmelse for hvilke spørgsmål der skal besvares.

Jeg har derfor brug for en dynamisk makro der tjekker hvorvidt der i  en bestemt celle står A eller B (jævnfør ovenfor), og derefter viser (eller skjuler, alt efter hvad der er nemmest) de rækker der indeholder spørgsmål der henholder sig til gruppe som respondenten tilhører.

F.eks. hvis alle rækker vises som udgangspunkt, og en repsondent skriver A i cellen, så skal en bestemt mængde rækker skjules (f.eks. række 1-6, 10-17 etc), idet disse rækker indeholder spørgsmål der henholder sig til respondenter i gruppen B.

Jeg har fundet en guide her: http://excel.tips.net/T003283_Hiding_Columns_Based_on_a_Cell_Value.html

Men jeg kan ikke få det til at virke når jeg kopierer det ind som programkode og ændrer det til Rows istedet for Columns, det er som om If/And funktionerne ikke fungerer.
18. juli 2013 - 15:01 #1
Hvis du sætter din kode ind her, kan vi se, hvad der er galt.
Avatar billede store-morten Ekspert
18. juli 2013 - 16:05 #2
Prøv:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("A1").Value = "a" Or Range("A1").Value = "A" Then
        Rows("2:6").EntireRow.Hidden = True
        Rows("10:17").EntireRow.Hidden = True
    Else
        Rows("2:6").EntireRow.Hidden = False
        Rows("10:17").EntireRow.Hidden = False
    End If
End Sub


Skriv A i celle A1
Avatar billede Rasmus_ep Nybegynder
18. juli 2013 - 16:05 #3
Hej Erik

Jeg har arbejdet lidt videre med Makroen, og den ser ud til at virke nogenlunde nu. Den er kodet således:

Private Sub Worksheet_Change(ByVal Target As Range)
   
    If Target.Address = "$B$12" Then
        If IsNumeric(Target) Then
            Rows("16:17").EntireRow.Hidden = (Target.Value = 1)
        End If
    End If
   
    If Target.Address = "$B$12" Then
        If IsNumeric(Target) Then
            Rows("14:15").EntireRow.Hidden = (Target.Value = 2)
        End If
    End If
   
    If Target.Address = "$B$22" Then
        If IsNumeric(Target) Then
            Rows("25:26").EntireRow.Hidden = (Target.Value < 13)
        End If
    End If
   
End Sub

De to øverste har jeg ikke fundet et problem med endnu, men den sidste hvor rækker skjules for værdier under 13, der hgar jeg det problem at Excel også skjuler rækkerne når cellen er tom (går ud fra den antager værdien til 0 når cellen er tom). Er der en And/if kommando der kan indsættes som gør at rækkerne vises hvis cellen er tom?
Avatar billede store-morten Ekspert
18. juli 2013 - 16:49 #4
Private Sub Worksheet_Change(ByVal Target As Range)
   
    If Target.Address = "$B$12" Then
        If IsNumeric(Target) And Target.Value = 1 Then
            Rows("16:17").EntireRow.Hidden = True
        End If
    End If
   
    If Target.Address = "$B$12" Then
        If IsNumeric(Target) And Target.Value = 2 Then
            Rows("14:15").EntireRow.Hidden = True
        End If
    End If
   
    If Target.Address = "$B$22" Then
        If Not IsEmpty(Target) Then
            If IsNumeric(Target) And Target.Value < 13 Then
                Rows("25:26").EntireRow.Hidden = True
            End If
        End If
    End If
End Sub
Avatar billede Rasmus_ep Nybegynder
18. juli 2013 - 16:55 #5
Hej Morten,

Din omskrivning af den sidste kommando syntes ikke at virke, når jeg prøver den af sker der ikke noget for nogen værdier.
Avatar billede store-morten Ekspert
18. juli 2013 - 17:00 #6
Skal rækkerne vises hvis kriterierne ikk opfyldes?
Avatar billede Rasmus_ep Nybegynder
18. juli 2013 - 17:47 #7
Rækkerne skal vises hvis 1) der ikke står noget i cellerne og 2) når kriteriet for en værdi over 12 i celllen er opfyldt. Når dette ikke er gældende skal rækkerne gerne være skjult.

Da njeg kopierede den kode du skrev ind blev rækkerne ikke vist for nogen værdi, hverken over 12 eller under, eller når cellen er tom.
Avatar billede store-morten Ekspert
18. juli 2013 - 17:55 #8
Prøv:
Private Sub Worksheet_Change(ByVal Target As Range)
   
    If Target.Address = "$B$12" Then
        If IsNumeric(Target) And Target.Value = 1 Then
            Rows("16:17").EntireRow.Hidden = True
        Else
            Rows("16:17").EntireRow.Hidden = False
        End If
    End If
   
    If Target.Address = "$B$12" Then
        If IsNumeric(Target) And Target.Value = 2 Then
            Rows("14:15").EntireRow.Hidden = True
        Else
            Rows("14:15").EntireRow.Hidden = False
        End If
    End If
   
    If Target.Address = "$B$22" Then
        If Not IsEmpty(Target) Then
            If IsNumeric(Target) And Target.Value < 13 Then
                Rows("25:26").EntireRow.Hidden = True
            Else
                Rows("25:26").EntireRow.Hidden = False
            End If
                Exit Sub
        End If
        Rows("25:26").EntireRow.Hidden = False
    End If
End Sub
Avatar billede Rasmus_ep Nybegynder
18. juli 2013 - 18:24 #9
Fantastisk Morten, det ser ud til at virke :D

Mange tak. Hvordan lukker jeg mit spørgsmål?
Avatar billede store-morten Ekspert
18. juli 2013 - 18:35 #10
Velbekomme.

Jeg lægge denne kommentar som et 'Svar' (til løsninger og pointgivning)

Og se her: Hvordan man accepterer svar på eksperten.dk
http://www.youtube.com/watch?v=s26DGiuvXBo
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