28. juni 2016 - 20:32Der er
27 kommentarer og 1 løsning
Skjul kolonner i VBA
Hej Jeg er ved at lave et skema i excel, hvori man indtaster et tal i en celle fx "E5" = 2 derefter skal alle kolonner udover to kolonner som går fra "F14:Y14" skjules, så der ikke er unødvendige celler i skemaet.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E5")) Is Nothing Then Columns("F:Y").Hidden = True For x =5 To 5 + Cells(5, 5) Columns(x).Hidden = False Next End If End Sub
Når du skriver "for x = 5 to 5 + cells (5, 5)" - hvad indikere så i denne at de skal gå ud fra hvad der skrives i cellen C4? Og hvad betyder det at der står 5 + cells (5, 5) ??
Hvis det stadig er kolonnerne F til Y det drejer sig om vil makroen se således ud:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C4")) Is Nothing Then Columns("F:Y").Hidden = True For x = 5 To 5 + Cells(4, 3) Columns(x).Hidden = False Next End If End Sub
Jeg har rettet koden lidt til og nu virker dem optimalt - mange tak for hjælpen..
Ved du evt. hvordan man summerer en sum med kun de viste celler?? Fx. en formel som kun summerer de celler der vises og ikke medregner de skjulte celler??
Der findes en funkion der hedder =SUBTOTAL(109;F4:F23), men den virke kun når området er lodret. Hvis du vælger for en række tæller den alt med. Men med en makro vil det kunne lade sig gøre. Jeg har sat den ind i den oprindelige makro, og summen skrives i E5.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C4")) Is Nothing Then Columns("F:Y").Hidden = True For x = 5 To 5 + Cells(4, 3) Columns(x).Hidden = False Next
Range("E5") = 0 For x = 6 To 25 If Columns(x).Hidden = False Then Range("E5") = Range("E5") + Cells(4, x) 'række 4 testes End If Next
Du kender ikke til en kode der tager højde for begge dele, altså hvis jeg har skjult nogle rækker og har skjult nogle kolonner skal den ikke medregne værdierne i de skjulte kolonner og rækker??
Tak! Det er sådan at alt efter hvor mange rækker og kolonner der er viste så skal den udregne som at hvis der fx er 3 rækker vist og 5 kolonner så udgøre de til sammen 100% uden at medregne de resterende 7 skjulte rækker og de resterende kolonner.
Når alle rækker er vist drejer det sig om række 15 til og med 24, og alle kolonner er fra G til og med Z.
Og værdierne skal regnes for hver af rækkerne og til sidst summeres de i en celle som udgøre de 100% Så får række 15, skal resultatet stå i celle F15, og for række 16 i F16 osv.
Hvis jeg har forstået dig korrekt kan du bruge denne makro:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C4")) Is Nothing Then Columns("F:Y").Hidden = True For x = 5 To 5 + Cells(4, 3) Columns(x).Hidden = False Next
Range("F15:F24").ClearContents For r = 15 To 24 For k = 7 To 25 If Columns(k).Hidden = False Then Cells(r, 6) = Cells(r, 6) + Cells(r, k) End If Next Next
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C4")) Is Nothing Then
If Range("C4") <> "" Then Application.ScreenUpdating = False
n = Range("C4")
Range("14:25").Rows.Hidden = False Range(15 + n & ":25").Rows.Hidden = True
Application.ScreenUpdating = True
End If
End If
If Not Intersect(Target, Range("C5")) Is Nothing Then Columns("G:Z").Hidden = True For x = 5 To 6 + Cells(5, 3) Columns(x).Hidden = False Next End If
End Sub
Hvis jeg sætter den kode ind som du har lavet ovenfor så kan jeg umiddelbart ikke få det til at virke. Cellen som angiver antal rækker er C? og koden som angiver antal kolonner der skal vises er C5.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C4:C5")) Is Nothing Then If Target.Row = 4 And Range("C4") <> "" Then Application.ScreenUpdating = False Range("F15:F24").EntireRow.Hidden = True For x = 14 To 14 + Cells(4, 3) Rows(x).Hidden = False Next End If If Target.Row = 5 And Range("C5") <> "" Then Columns("G:Z").Hidden = True For x = 6 To 6 + Cells(5, 3) Columns(x).Hidden = False Next End If
Range("F15:F24").ClearContents For r = 15 To 24 For k = 7 To 25 If Columns(k).Hidden = False Then Cells(r, 6) = Cells(r, 6) + Cells(r, k) End If Next Next
Jeg kan umiddelbart ikke få koden til at virke - når jeg efter at have indsat koden i arket prøver at skjule nogle kolonner og rækker så tæller den stadig de skjulte rækker med og siger at den er 500% i første rækker, hvor den skal tælle hvor mange celler der er udfyldt med et 1-tal ud af de viste kolonner i rækken...
Makroen kører kun, hvis du skriver noget i cellerne C4 eller C5. Hvis du bruger andre metoder til at skjule rækker eller kolonner, sker der ingen genberegning
Det er instruktionen Cells(r, 6) = Cells(r, 6) + Cells(r, k) Altså i kolonne F for den givne række
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.