Avatar billede sjssjdk Mester
31. maj 2017 - 13:21 Der er 7 kommentarer

Macro til at auto skjule rækker hvor i en celle ikke er lig med en værdi.

Hej.

Jeg skal  bruge en macro til at automatisk skjule rækker basseret på en værdi.

fx.
A1=1
B1=2
C1=3

Kontrol værdi: D1 = 2
Rækker der ikke er lig med D1 skal skjules automatisk og opdateres automatisk hvis D1 opdateres.

Er der nogen der kan hjælpe med sådan en macro?

mvh
Søren.
Avatar billede kim1a Ekspert
31. maj 2017 - 14:02 #1
Ikke fuldt testet, (inspireret af http://kronsell.net/Smaamakroer.htm#Autoskjul) men:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim intRaekke As Integer
Dim intSidsteRaekke As Integer
Dim strVaerdi As String

strVaerdi = Range("D1").Value
intSidsteRaekke = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row

    For intRaekke = 2 To intSidsteRaekke
    If Range(4, intRaekke) = strVaerdi Then
        Rows(intRaekke).EntireRow.Hidden = False
    Else
        Rows(intRaekke).EntireRow.Hidden = True
End If

End Sub

Jeg bliver dog en smule forvirret over at du skriver først at du kigger A1, B1 etc. og så beder om rækker.

Jeg har lavet så den kigger i D1 og hvis værdien i D ikke er lig D1 så skjules den. Sig til hvis jeg har misforstået.
Avatar billede sjssjdk Mester
01. juni 2017 - 08:58 #2
Hej.

Jeg det løser det desværre ikke helt.
Jeg har et ark der indeholder alle uger i året (1-52) Jeg skal bruge macroen til at skjule de kolonder der ikke er denne uge.
Jeg vil have uge dagen til at stå i en celle og så uger 1-52 i A1 og frem.

Jeg har blot simplifiseret det her blot simplifiseret det i dette ekesmple, derfor A1, B1, C1 og "uge nr." i D1.

Jeg har følgende macro:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1").Value = "A" Then
        Columns("B").EntireColumn.Hidden = True
    ElseIf Range("A1").Value = "B" Then
        Columns("B").EntireColumn.Hidden = False

    End If
End Sub

Den nøser problement, men skal kopires 51 gange for at tjekke alle celler, jeg var derfor ude efter en mere forsimplet version af denne.
Avatar billede kim1a Ekspert
01. juni 2017 - 09:44 #3
Det er altid en god ide at give så meget info som muligt, i stedet for f.eks. at undlade at nævne hvad man i forvejen har lavet :-)

Nu nævner du også kolonner fremfor rækker.

Du skal blot bruge den del her:
For intRaekke = 2 To intSidsteRaekke
    If Range(intKolonne, 1) = strVaerdi Then
        Rows(intRaekke).EntireRow.Hidden = False
    Else
        Rows(intRaekke).EntireRow.Hidden = True
End If

Dog lave det til kolonne i stedet for række - noget a la:
Dim intSidsteKolonne as integer
intSidsteKolonne = 52 (husk på der indimellem er 53 uger på året alt efter hvordan du laver det)
Avatar billede kim1a Ekspert
01. juni 2017 - 09:45 #4
I praksis kunne det måske være nemmere at din makro bare skjuler hele området, og derefter "afskjuler" den ene kolonne du skal bruge.
Avatar billede Jan Hansen Ekspert
01. juni 2017 - 10:49 #5
Hvad med:

Private Sub Worksheet_Change(ByVal Target As Range)
dim lUge as long
For lUge=2 to 53
    If Range("A1").Value = lUge Then
        Columns(lUge).EntireColumn.Hidden = False
    Else
        Columns(lUge).EntireColumn.Hidden = False

    End If
next
End Sub


ej testet

Jan
Avatar billede Jan Hansen Ekspert
01. juni 2017 - 10:50 #6
Ups

Columns(lUge).EntireColumn.Hidden = False

skal være
Columns(lUge).EntireColumn.Hidden = True
Avatar billede Jan Hansen Ekspert
01. juni 2017 - 10:52 #7
Ups ups det er den efter else
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