14. september 2008 - 22:00Der er
11 kommentarer og 1 løsning
indsætte tomme linjer når der er ændring i tal i kol C
jeg har et ark med en masse linier. I kol C er der nogle nr. De samme numre kan optræde fra 1 til 10 gange.
Kan det lade sig gøre at få indsat 2 linjer hver gang der er ændring i tallet der står i kol C, så man får lavet en gruppe.
Herefter ville jeg meget gerne have lavet en sammentælling i kol E, som indeholder nogle beløb, lige under den sidste linje for hvert nr i kol C, så hvert talgruppe har en sammentælling.
Jeg har desværre ikke flere point end dem jeg har udlovet. Beklager.
Prøv denne,men numrene i kolonne C skal så stå i grupper.
Public Sub SupTotal() Dim RW As Long, intI As Long ' ***********************************laver de 2 linjer RW = Range("C65536").End(xlUp).Row For intI = RW To 5 Step -1 If Cells(intI, 3) <> Cells(intI - 1, 3) Then Rows(intI & ":" & intI + 1).Insert Shift:=xlDown End If Next
' *************************** laver sum på alle - den sidste RW = Range("C5").Row On Error GoTo Slut Do Until RW > Range("C65536").End(xlUp).Offset(2, 0).Row intI = Range("E" & RW).End(xlDown).Row If Range("E" & intI).Offset(2, 0) = "" Then Range("E" & intI).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" Else intI = RW Range("E" & intI).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" End If RW = Range("E" & RW).End(xlDown).Offset(2, 0).Row Loop Slut: ' ********** Denne finder den sidste, der skal have sum på intI = Range("E65536").End(xlUp).Row Range("E65536").End(xlUp).Select RW = Selection.End(xlUp).Row If Range("E" & RW).Offset(1, 0) = "" Then RW = Selection.Row End If Range("E65536").End(xlUp).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" End Sub
Public Sub SupTotal() Dim RW As Long, intI As Long ' ***********************************laver de 2 linjer RW = Range("C65536").End(xlUp).Row For intI = RW To 6 Step -1 If Cells(intI, 3) <> Cells(intI - 1, 3) Then Rows(intI & ":" & intI + 1).Insert Shift:=xlDown End If Next
' *************************** laver sum på alle - den sidste RW = Range("C5").Row On Error GoTo Slut Do Until RW > Range("C65536").End(xlUp).Offset(2, 0).Row intI = Range("E" & RW).End(xlDown).Row If Range("E" & intI).Offset(2, 0) = "" Then Range("E" & intI).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" Else intI = RW Range("E" & intI).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" End If Range("E" & intI).Offset(1, -4) = "NR. " & Range("E" & intI).Offset(0, -2) Call Streg_Fed(Range(Range("A" & intI), Range("E" & intI)).Offset(1, 0)) RW = Range("E" & RW).End(xlDown).Offset(2, 0).Row Loop Exit Sub Slut: ' ********** Denne finder den sidste, der skal have sum på intI = Range("E65536").End(xlUp).Row Range("E65536").End(xlUp).Select RW = Selection.End(xlUp).Row If Range("E" & RW).Offset(1, 0) = "" Then RW = Selection.Row End If Range("E65536").End(xlUp).Offset(1, -4) = "NR. " & Range("E65536").End(xlUp).Offset(0, -2) Call Streg_Fed(Range(Range("A" & intI), Range("E" & intI)).Offset(1, 0)) Range("E65536").End(xlUp).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)"
End Sub Sub Streg_Fed(rng As Range) With rng .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone .Borders(xlEdgeLeft).LineStyle = xlNone With .Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With .Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With .Borders(xlEdgeRight).LineStyle = xlNone .Font.Bold = True End With End Sub
Ved nærmere studering af koden laver den desværre fejl. Hvis der er mere end 1 linje i hver gruppe så sletter den beløbet i kolonne e i den nederste linje og indsætter sammentællingen istedet.
Den skal helst lave sammentællingen på linjen lige nedenunder den sidste linje i hver gruppe.
Jeg ved godt at det er ekstra jeg spørger efter, men jeg prøver alligevel :-)
Kan nr. fra kolonne C komme til at stå lige over den øverste linje i hver gruppe, så det bliver en slags overskrift i kolonne A. ("nr" + tal) Lige nu sætter den det i samme linje som sammentællingen.
Jeg kan ikke få den til at slette nederste linje, jeg har tjekket. Det med overskrift, skulle være der nu.
Public Sub SupTotal() Dim RW As Long, intI As Long ' ***********************************laver de 2 linjer RW = Range("C65536").End(xlUp).Row For intI = RW To 6 Step -1 If Cells(intI, 3) <> Cells(intI - 1, 3) Then Rows(intI & ":" & intI + 1).Insert Shift:=xlDown End If Next
' *************************** laver sum på alle - den sidste RW = Range("C5").Row On Error GoTo Slut Do Until RW > Range("C65536").End(xlUp).Offset(2, 0).Row intI = Range("E" & RW).End(xlDown).Row If Range("E" & intI).Offset(2, 0) = "" Then Range("E" & intI).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" Else intI = RW Range("E" & intI).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)" End If Range("E" & RW).Offset(-1, -4) = "NR. " & Range("E" & intI).Offset(0, -2) Range("E" & RW).Offset(-1, -4).Font.Bold = True Call Streg_Fed(Range(Range("A" & intI), Range("E" & intI)).Offset(1, 0)) RW = Range("E" & RW).End(xlDown).Offset(2, 0).Row Loop Exit Sub Slut: ' ********** Denne finder den sidste, der skal have sum på intI = Range("E65536").End(xlUp).Row Range("E65536").End(xlUp).Select RW = Selection.End(xlUp).Row If Range("E" & RW).Offset(1, 0) = "" Then RW = Selection.Row End If Range("E" & RW).Offset(-1, -4) = "NR. " & Range("E" & RW).Offset(0, -2) Range("E" & RW).Offset(-1, -4).Font.Bold = True Call Streg_Fed(Range(Range("A" & intI), Range("E" & intI)).Offset(1, 0)) Range("E65536").End(xlUp).Offset(1, 0).FormulaR1C1 = "=SUM(R[-" & (intI - RW) + 1 & "]C:R[-1]C)"
End Sub Sub Streg_Fed(rng As Range) With rng .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone .Borders(xlEdgeLeft).LineStyle = xlNone With .Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With .Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With .Borders(xlEdgeRight).LineStyle = xlNone .Font.Bold = True End With End Sub
Den har problemer hvis alle grupperne kun har 1 eller 2 linjer. Kan ikke lige se hvorfor.
Overskriften i kolonne A skal stå i en linje helt for sig selv. Sammentælling i kolonne E skal stå i en linje for sig selv
Pt indsætter den 2 tomme linjer imellem hver gruppe. det skulle måske udviddes til 3 linjer for overskuelighedens skyld. Men det er jo det mindste af det.
Jeg har rettet lidt i understregning, så den kun laver understregning i kol E
Kabbak, kan du godt få den til at lave en korrekt sammentælling på alle grupper. Både grupper med 1 og 2 og 3 uden at den laver sammentælling i en af "ikke tomme" linjer?
Jeg prøver lige opremse hvordan mit ark ser ud. ** Jeg starter med at have noget i linje 5 ** Der står noget i kolonne a+b+c+d+e+f i alle disse linjer. ** jeg har 14 linjer i mit testark ** grupperne/tallene i kol c i de 14 linjer ser således ud 13590, 13591,13592,13593,13594,13595,13596,13597,13597,13598,13598,13599,13599,13600
Public Sub SupTotal2() Dim RW As Long, intI As Long, I As Long, X As Long ' ***********************************laver de 2 linjer RW = Range("C65536").End(xlUp).Row For intI = RW To 6 Step -1 If Cells(intI, 3) <> Cells(intI - 1, 3) Then Rows(intI & ":" & intI + 1).Insert Shift:=xlDown End If Next
' *************************** laver sum på alle - den sidste RW = Range("C5").Row intI = Range("C65536").End(xlUp).Row + 2 X = RW For I = RW To intI If Range("E" & I) = "" Then Range("E" & I).FormulaR1C1 = "=SUM(R[-" & (I - X) & "]C:R[-1]C)" Call Streg_Fed(Range("E" & I)) Range("E" & X).Offset(-1, -4) = "NR. " & Range("E" & I).Offset(-1, -2) Range("E" & X).Offset(-1, -4).Font.Bold = True RW = Range("E" & I).Offset(2, 0).Row X = RW I = I + 2 End If Next
Så var den der. Fuldstændig som ønsket. Mange tak for hjælpen incl. de ekstra ønsker :-)
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.