Avatar billede nemlig Professor
27. august 2008 - 08:32 Der er 10 kommentarer og
1 løsning

VBA - Skjul rækker i et område uden indhold

Hej.
Jeg har en graf med 10 forskellige serier og dermed også 10 "forklaringer". Men det er sjældent at alle serier har værdi, hvorfor jeg gerne vil undgå, at der vises forklaringer på disse tomme serier (giver et bedre overblik).
Jeg kan forstå, at løsningen kan være, at skjule de pågældende rækker.
Nogen der kan bidrage med noget VBA kode, som løber et område igennem og skjuler de rækker, som er uden indhold eller bare har værdien 0.
Området kunne være: a10:k20
Avatar billede sager Nybegynder
27. august 2008 - 11:11 #1
Lidt afhængig af hvor dine overskrifter på tidsserierne er (række 10 eller 11).. Men prøv det her..

Sub SkjulTommeKolonner()
Dim skjul As Boolean
Dim i As Integer

For i = 1 To 10
   
    If Range("A11").Offset(0, i).Value = 0 Then
        skjul = True
        For j = 1 To 9
            If Range("A11").Offset(j, i).Value <> 0 Then
                skjul = False
                Exit For
            End If
        Next j
        If skjul = True Then Range("A11").Offset(j, i).ColumnWidth = 0
    End If

Next i

End Sub
Avatar billede nemlig Professor
27. august 2008 - 17:29 #2
Hej sager - det ser spændende ud.
Men, jeg er usikker på nogle ting.

1. Det er rækker, som skal skjules og ikke kolonner
2. Værdierne i rækkerne starter først i kolonne C. (kolonne A er tom og kolonne B = række-overskriften"
3. Der er i alt 10 rækker, hvor værdien i første række starter i celle C82:AA82
Næste række er C83:AA83

Kan du omskrive, så det er rækker, der skjules?
Avatar billede nemlig Professor
27. august 2008 - 17:33 #3
Jeg prøvede at omskrive den til denne kode herunder:
Men den skjuler også nogle rækker, hvor de første celler er tomme, men ikke alle.

Sub SkjulTommeKolonner()
Dim skjul As Boolean
Dim i As Integer

For i = 1 To 10
   
    If Range("C83").Offset(i, 0).Value = 0 Then
        skjul = True
        For j = 1 To 9
            If Range("C83").Offset(i, j).Value <> 0 Then
                skjul = False
                Exit For
            End If
        Next j
        If skjul = True Then Range("C83").Offset(i, j).RowHeight = 0
    End If

Next i

End Sub
Avatar billede nemlig Professor
27. august 2008 - 17:36 #4
Det ser faktisk ud til, at sidst nævnte kode virker, lige bortset fra, at den skjuler en række, hvor de første 10 celler = 0, men derefter er der værdier.
Denne række skal jo ikke skjules.
Kan ikke helt gennemskue koden.
Avatar billede nemlig Professor
27. august 2008 - 18:18 #5
Har næsten løst det. Jeg har bare ændret

  For j = 1 To 9
til
  For j = 1 To 25

Men den tjekker kun om der står 0 i alle celler i den pågældende række.
Rækken kan også indeholde tomme værdier "", og hvis det er tilfældet, skal den også skjules. Altså rækker med kun 0 eller "" eller begge dele, skal skjules.
Avatar billede sager Nybegynder
27. august 2008 - 21:42 #6
hej.. så er jeg tilbage
Jeg misforstod det med rækker/kolonner.. Men du har jo løst det selv  :o)

mht dit sidste spørgsmål, så skulle det gerne være sådan at når man spørger på .Value af en celle, så bliver en tom celle vurderet som et nul. Det virkede på min pc. Hvis det er sådan at der står en formel i feltet (som returnerer en tom streng), så kan det måske være noget andet.

Måske du så kan bruge noget a'la

If Range("C83").Offset(i, 0).Value = 0 OR Range("C83").Offset(i, 0) = "" Then

...og tilsvarende i den næste If-linje.

Håber  det hjælper..
Avatar billede nemlig Professor
27. august 2008 - 22:44 #7
hmmm- det driller.
Koden ser nu sådan her ud, men den skjuler ingen rækker, selvom nogle af rækkerne ingen værdier har (der står kun 0 eller helt tom med "") Men alle cellerne har formler.
I de 20 første celler, er der 0 og de sidste 5 er der "".
Og hvis jeg ændrer "For j = 1 To 25" til "For j = 1 To 19", så den ikke tæller ud i cellerne med "", så virker det fint. Problemet er altså cellerne med "", som den ikke forstår.

Sub SkjulTommeKolonner()
Dim skjul As Boolean
Dim i As Integer

For i = 1 To 9
   
    If Range("C83").Offset(i, 0).Value = 0 Or Range("C83").Offset(i, 0).Value = "" Then
        skjul = True
        For j = 1 To 25
            If Range("C83").Offset(i, j).Value <> 0 Or Range("C83").Offset(i, j).Value <> "" Then
                skjul = False
                Exit For
            End If
        Next j
        If skjul = True Then Range("C83").Offset(i, j).RowHeight = 0
    End If

Next i

End Sub
Avatar billede nemlig Professor
27. august 2008 - 22:47 #8
Vrøvl ovenfor. Det virker heller ikke, når jeg ændrer "25" til "19".
Avatar billede nemlig Professor
27. august 2008 - 22:51 #9
Men hvis jeg fjerner dit forslag kl. 21:42 OG jeg ændrer cellerne med værdien "" til 0, så virker koden fint.
Men så vises min graf forkert, da den så medtager de kolonner, som har 0 i værdi, og det ser lidt dumt ud, at det fylder i grafen.
Jeg anvender nemlig "forskydning" og tæller med "tæl", hvor den altså tager værdier med 0, men ikke med " - hvis du forstår.
Avatar billede nemlig Professor
27. august 2008 - 23:25 #10
Nu har jeg det til at virke.
If-sætning nr. 2 skal have AND istedet for Or.
Avatar billede nemlig Professor
27. august 2008 - 23:29 #11
Mange tak for hjælpen.
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



IT-JOB

Center Denmark Fonden

Cloud Engineer

MAN Energy Solutions

Full Stack Developer

Cognizant Technology Solutions Denmark ApS

Sr. Test Analyst