Avatar billede familienriis Nybegynder
21. januar 2008 - 19:44 Der er 28 kommentarer og
1 løsning

Spørgsmål til Kabbak

Jeg har problemer med at få sorteret nogle konti i en kode du har hjulpet mig med tidligere.

Det drejer om arket spec1 når man slår nogle konti sammen. I kolonne N og O.

Har du tid og lyst til at løse probelemet?

(koden er så speciel og programmeret at kabbak at jeg spørger ham direkte.)
Avatar billede gider_ikke_mere Nybegynder
21. januar 2008 - 20:01 #1
Det er i princippet ikke lovligt kun at spørge en bestemt bruger om hjælp.
Avatar billede familienriis Nybegynder
21. januar 2008 - 21:01 #2
Ja, det er jo nok lidt forkert at spørge på den måde.
Men den kode der skal rettes i er blevet temmelig lang.
Jeg tror ikke at rettelsen er speciel svær, men koden i sig selv kan jo godt gøre det hle uoverskuelig.





Public Sub DAN_SPECIFIKATIONER_til_Udskrift()
    Dim Data As Variant, I As Integer, X As Integer, SumPoster As Variant, ErDerSumposter As Boolean, RK As Integer
    Dim NR As Integer, Antal() As Variant, T As Integer, N As Integer, RækkeStart As Integer, OV As Variant, Tid As Date
    Dim MinRækker As Integer

    Tid = Now
    ErDerSumposter = False
    RK = 0
    Application.Calculation = xlCalculationManual    ' stopper automatisk udregning af formler
    Application.ScreenUpdating = False
    With Worksheets("Konto")
        MinRækker = .Range("G1")    ' Minimum rækker incl overskrift og total
        ' Tjekker om der valgt overskrifter, det skal være det samme i N og O kolonnen
        Data = .Range("A5:P" & .Range("B65536").End(xlUp).Row + 50)  ' indlæser kontoplan i variablen Data + 50 tomme rækker

        Tjek = .Range("N5:O" & .Range("B65536").End(xlUp).Row)
        .Range("C200").End(xlUp).Value = WorksheetFunction.Sum(.Range("C1:C200")) * -1
        .Range("E200").End(xlUp).Value = WorksheetFunction.Sum(.Range("E1:E200")) * -1
        With Worksheets("overskrift")    'tilrettes til ark med overskrifter
            Overskrifter = .Range("A2:C" & .Range("B200").End(xlUp).Row)
        End With
        SidsteData = UBound(Data)
        For I = 1 To UBound(Tjek)
            OK = False
            For Y = 1 To UBound(Tjek)
                If Not IsEmpty(Tjek(I, 1)) Then
                    If Tjek(I, 1) = Tjek(Y, 2) Then
                        OK = True
                        Exit For
                    End If
                Else
                    OK = True
                End If
            Next
            If Not OK Then
                Application.ScreenUpdating = True
                Application.Calculation = xlCalculationManual    ' starter automatisk udregning af formler
                MsgBox "Du har glemt at angive nr i kolonne O i linien(" & .Range("O" & I + 4).Offset(0, -14) & " " & .Range("O" & I + 4).Offset(0, -13) & ")"

                Exit Sub
            End If
        Next


    End With
    ' kolonner i variablen Data
    ' Tekst, importeret fra regnskabssystem '  i år  '  x '  sidste år '  x  ' specnr. I år  '  Overskrift ' * '  specnr. sidste år
    '  1                  2                  3        4        5      6        7              8        9          10
    '  Overskrift ' * '  x ' Liner som skal samles'  Hvilken TEKST / NAVN skal vises' Alt:Titel
    '    11      12  13          14                      15                            16
    With Worksheets("overskrift")    'tilrettes til ark med overskrifter
        Overskrifter = .Range("A2:C" & .Range("B200").End(xlUp).Row)
    End With

    K1 = 0    ' nulstiller antal samledata
    For I = 1 To UBound(Data)
        If IsEmpty(Data(I, 7)) And IsEmpty(Data(I, 10)) Then
            If RK = 0 Then RK = I    ' første række der er ledig i Variablen Data
            For X = 1 To UBound(Data, 2)
                Data(I, X) = Empty    ' sletter data der ikke har et specnr
            Next
        Else
            Data(I, 3) = Data(I, 3) * Data(I, 9)    ' ganger beløbet

            If IsEmpty(Data(I, 10)) Then    ' hvis faktor for sidste år er tom, bruges dette år
                Data(I, 5) = Data(I, 5) * Data(I, 9)    ' ganger beløbet Sidste år med faktor i år
            Else
                Data(I, 5) = Data(I, 5) * Data(I, 12)    ' ganger beløbet Sidste år med faktor Sidste år
            End If
        End If
    Next

    '**************************************************** slut med at tælle sumposter og gange med faktor ***********************

    '******************************************************* Begynder at dele konti på specnr per år ***********************************

    SidsteData = RK - 1
    NR = RK
    For I = 1 To SidsteData
        If Not IsEmpty(Data(I, 7)) And Not IsEmpty(Data(I, 10)) Then
            For X = 1 To UBound(Data, 2)
                Data(NR, X) = Data(I, X)
            Next
            Data(NR, 3) = 0
            Data(I, 5) = 0
            Data(NR, 7) = Data(I, 10) * 100
            If Not IsEmpty(Data(I, 15)) Then Data(NR, 15) = Data(I, 15) * 100    '  specnr* 100, på dem der skal adskilles, for sidste år

            Data(NR, 14) = Data(I, 14) * 100    '  specnr* 100, på dem der skal adskilles, for sidste år

            NR = NR + 1
        End If
        If Not IsEmpty(Data(I, 16)) Then Data(I, 2) = Data(I, 16)
    Next
    Sheets.Add
    ActiveSheet.Name = "TEMP"    ' bruger et midlertidig ark til sortering
    Range("A1").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Key2:=Range("A1") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                  False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
                                                                              :=xlSortNormal
    Data = Range("A1").Resize(NR + 50, UBound(Data, 2))
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    SidsteData = NR
    '******************************************************* Færdig med at dele konti på specnr per år ***********************************

    '******************************************************* Begynder at summere, dem der skal ***********************************
    For I = 1 To SidsteData

        If Not IsEmpty(Data(I, 15)) Then
            K1 = K1 + 1    ' tæller antal samledata
            ReDim Preserve Antal(K1)
            Antal(K1) = Data(I, 15)
            ErDerSumposter = True
        End If
    Next
    ' kolonner i variablen Data
    ' Tekst, importeret fra regnskabssystem '  i år  '  x '  sidste år '  x  ' specnr. I år  '  Overskrift ' * '  specnr. sidste år
    '  1                  2                  3        4        5      6        7              8        9          10
    '  Overskrift ' * '  x ' Liner som skal samles'  Hvilken TEKST / NAVN skal vises' Alt:Titel
    '    11      12  13          14                      15                            16
    If ErDerSumposter Then
        For X = 1 To UBound(Antal)
            For I = 1 To SidsteData
                If Antal(X) = Data(I, 14) Then    ' passer sammentællingskoden, så fortsæt
                    If Not IsEmpty(Data(I, 16)) Then    ' er der special overskrift
                        Data(NR + X, 2) = Data(I, 16)    ' special Overskrift
                    ElseIf Not IsEmpty(Data(I, 15)) Then    ' eller er der et tal ud for en anden
                        Data(NR + X, 2) = Data(I, 2)      ' normal Overskrift
                    End If
                    Data(NR + X, 1) = Data(I, 1)
                    Data(NR + X, 3) = Data(NR + X, 3) + Data(I, 3)    ' summere dette år
                    Data(NR + X, 5) = Data(NR + X, 5) + Data(I, 5)    ' summere sidste år
                    Data(NR + X, 7) = Data(I, 7)    ' specnr
                    For T = 1 To UBound(Data, 2)
                        Data(I, T) = Empty    ' sletter data efter summering
                    Next
                End If
            Next
        Next
    End If

    For X = 1 To UBound(Data)
        If Data(X, 7) > 100 Then Data(X, 7) = Data(X, 7) / 100        ' Retter specnr, på dem der skal adskilles, for sidste år
    Next
    Sheets.Add    ' bruger et midlertidig ark til sortering
    ActiveSheet.Name = "TEMP1"
    Range("A1").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Key2:=Range("A1") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                  False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
                                                                              :=xlSortNormal
    Application.DisplayAlerts = False
    Data = Range("A1:G" & Range("B65536").End(xlUp).Row)
    ActiveSheet.Delete
    Application.DisplayAlerts = True

    '******************************************************* summerering slut ***********************************

    Worksheets("spec1").Activate
    With Worksheets("spec1")
        Cells.Rows.Hidden = False
        ActiveSheet.DisplayPageBreaks = False
        ' *********************************************Rettet gammel kode ********************************


        SidsteData = UBound(Data)
        RækkeStart = 4
        Application.ScreenUpdating = False

        For I = 1 To UBound(Overskrifter)    'Overskrifter løbes igennem

            For J = 1 To SidsteData    'antal poster = kriterier tælles op

                If Data(J, 7) = Overskrifter(I, 1) Then

                    If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
                        K = K + 1
                    End If
                End If
                '
                '                If Data(J, 7) > Overskrifter(I, 1) Then Exit For
            Next J

            If K > 0 Then
                ReDim Poster(K - 1, 7)
                K = 0

                For J = 1 To SidsteData    'Kontoplan løbes igennem
                    If Data(J, 7) > Overskrifter(I, 1) Then Exit For
                    If Data(J, 7) = Overskrifter(I, 1) Then

                        If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
                            Poster(K, 1) = Data(J, 2)    'tekst/kontonavn
                            Poster(K, 3) = Data(J, 3)    'beløb i år
                            Poster(K, 5) = Data(J, 5)    'beløb sidste år
                            Poster(K, 7) = Data(J, 1)    'kontonr.
                            K = K + 1
                            totaliår = totaliår + Data(J, 3)
                            totalsidsteår = totalsidsteår + Data(J, 5)

                        End If
                    End If
                Next J
                '**************************************** KABBAK *************************************************
            End If
            OV = Worksheets("spec1").Range("B6:B" & Worksheets("spec1").Range("B1000").End(xlUp).Row)
            For Y = UBound(OV) To 1 Step -1
                If OV(Y, 1) = Overskrifter(I, 2) And .Cells(Y + 5, "I") = Overskrifter(I, 1) Then
                    RækkeStart = Y + 5    '<<<< Finder rækkenr. for overskrift >>>>
                    Exit For
                End If
                If OV(Y, 1) = Overskrifter(I, 2) & " i alt " And .Cells(Y + 5, "I") = Overskrifter(I, 1) Then Rækkeslut = Y + 5  '<<<< Finder rækkenr. for overskrift i alt >>>>
            Next

            If Rækkeslut - RækkeStart > 1 Then
                .Rows(RækkeStart + 1 & ":" & Rækkeslut - 1).Delete
            End If

            '<<<< indsætter rækker og data og totaler mellem overskrift og i alt >>>>
            If K > 0 Then

                .Rows(RækkeStart + 1 & ":" & RækkeStart + K).Insert Shift:=xlShiftDown
                .Range("A" & RækkeStart + 1).Resize(K, 6) = Poster
                .Range("A" & RækkeStart + 1).Resize(K, 6).Font.Bold = False
                With Range("B" & RækkeStart + 1).Resize(K + 1, 1)
                    .NumberFormat = "@*."
                    .HorizontalAlignment = xlDistributed
                End With
                .Cells(RækkeStart + 1 + K, 4) = totaliår
                .Cells(RækkeStart + 1 + K, 6) = totalsidsteår
                If UCase(Overskrifter(I, 3)) = "NEJ" Then
                    .Rows(RækkeStart - 1 & ":" & RækkeStart + K + 2).Hidden = True

                End If
                If K + 3 <= MinRækker Then
                    .Rows(RækkeStart - 1 & ":" & RækkeStart + K + 1).Hidden = True

                End If

            Else
                .Cells(RækkeStart + 1 + K, 4) = 0
                .Cells(RækkeStart + 1 + K, 6) = 0
                .Rows(RækkeStart - 1 & ":" & RækkeStart + 2).Hidden = True
            End If

            '<<<< Nulstiller totaler og tæller inden næste overskrift hentes ind >>>>
            K = 0: totaliår = 0: totalsidsteår = 0
            Application.StatusBar = "Danner SPECIFIKATION  " & I & " af " & UBound(Overskrifter)

        Next I

        '    ************************************************sideskift ********************************************
        Application.StatusBar = "Danner udskrifter"

        Call Sideskift

        Application.StatusBar = ""
        ActiveSheet.DisplayPageBreaks = True
        Application.Calculation = xlCalculationAutomatic    ' Slår automatiske beregninger til igen
        Application.ScreenUpdating = True    ' slår opdatering af skærmen til igen
        .Range("F7").Select
    End With
    MsgBox Format(Now() - Tid, "nn:ss")    ' bare kommenter den ud, den viser tiden som koden tager for at køre.
End Sub
Avatar billede gider_ikke_mere Nybegynder
21. januar 2008 - 21:34 #3
Du skal nok også lige angive hvad det er du skal have rettet ;-)
Avatar billede familienriis Nybegynder
21. januar 2008 - 21:38 #4
Det er i det her område der skal rettes. (tror jeg nok) :-)
Men det er vist umiligt at forklare. Man skal have arket foran sig, for at forstå mit problem :-)


  For I = 1 To SidsteData

        If Not IsEmpty(Data(I, 15)) Then
            K1 = K1 + 1    ' tæller antal samledata
            ReDim Preserve Antal(K1)
            Antal(K1) = Data(I, 15)
            ErDerSumposter = True
        End If
    Next
    ' kolonner i variablen Data
    ' Tekst, importeret fra regnskabssystem '  i år  '  x '  sidste år '  x  ' specnr. I år  '  Overskrift ' * '  specnr. sidste år
    '  1                  2                  3        4        5      6        7              8        9          10
    '  Overskrift ' * '  x ' Liner som skal samles'  Hvilken TEKST / NAVN skal vises' Alt:Titel
    '    11      12  13          14                      15                            16
    If ErDerSumposter Then
        For X = 1 To UBound(Antal)
            For I = 1 To SidsteData
                If Antal(X) = Data(I, 14) Then    ' passer sammentællingskoden, så fortsæt
                    If Not IsEmpty(Data(I, 16)) Then    ' er der special overskrift
                        Data(NR + X, 2) = Data(I, 16)    ' special Overskrift
                    ElseIf Not IsEmpty(Data(I, 15)) Then    ' eller er der et tal ud for en anden
                        Data(NR + X, 2) = Data(I, 2)      ' normal Overskrift
                    End If
                    Data(NR + X, 1) = Data(I, 1)
                    Data(NR + X, 3) = Data(NR + X, 3) + Data(I, 3)    ' summere dette år
                    Data(NR + X, 5) = Data(NR + X, 5) + Data(I, 5)    ' summere sidste år
                    Data(NR + X, 7) = Data(I, 7)    ' specnr
                    For T = 1 To UBound(Data, 2)
                        Data(I, T) = Empty    ' sletter data efter summering
                    Next
                End If
            Next
        Next
    End If
Avatar billede gider_ikke_mere Nybegynder
21. januar 2008 - 21:57 #5
Hvis du ikke kan forklare problemet, er det ikke nemt at hjælpe.
Avatar billede familienriis Nybegynder
21. januar 2008 - 22:06 #6
koden lægger tal fra kolonne 5 i alle de linier der har samme kode (1 eller 2 eller 3) i kolonne 14 og 15.
Det samme gælder for kolonne 7.

Men hvis de 2 linier ikke ligger lige op af hinanden går det galt. (hvis der er f.eks. er 2 linier som ikke har samme koden mellen de linier som skal lægges sammen)
Avatar billede gider_ikke_mere Nybegynder
21. januar 2008 - 22:15 #7
Hvilke linier??
Avatar billede familienriis Nybegynder
21. januar 2008 - 22:17 #8
ja, det er lidt svært at forklare.
Men hvis jeg kan sende et ark, kan du se det med egne øjne
Avatar billede gider_ikke_mere Nybegynder
21. januar 2008 - 22:23 #9
Det burde kunne forklares.

gt4 snabel racingcar punkt dk
Avatar billede familienriis Nybegynder
21. januar 2008 - 23:03 #10
mail sendt
Avatar billede gider_ikke_mere Nybegynder
21. januar 2008 - 23:11 #11
..og modtaget. Din forklaring passer ikke helt!
Avatar billede familienriis Nybegynder
22. januar 2008 - 11:45 #12
Passer min forklaring ikke? Det beklager jeg.
Så er det vist fordi jeg ikke helt forstår koden. Den er jo også blevet kompliseret.
Avatar billede familienriis Nybegynder
22. januar 2008 - 20:15 #13
Tror du at det er noget du kan hjælpe mig med, eller er koden for uoverskuelig / min forklaring ikke beskivende nok?
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 21:21 #14
Prøv at læse din forklaring igennem, og sammenlign den med dit ark. Den passer ikke.
Avatar billede familienriis Nybegynder
22. januar 2008 - 21:28 #15
har læst den beskrivelse jeg har givet igennem.
Jeg kan ikke se at jeg beskriver fejlen forkert. :-(
Det er lidt kringlet, men jeg kan ikke se at det er forkert.
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 21:35 #16
Det er ikke fejlen, men beskrivelsen af arket der ikke passer.
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 21:41 #17
Er det sorteringen i arket temp der er problemet, og kun det?
Avatar billede familienriis Nybegynder
22. januar 2008 - 21:46 #18
Nu, kan jeg godt se at jeg fik skrevet SPEC1 istedet for KONTO, sorry :-)

ja, så vidt jeg kan se, så er det der det går galt
Hvis du kigger i arket TEMP1 så er den galt med den linie som kommer frem med konto 1917. Den skulle have heddet 1010, da det er den linie som bestemmer teksten (Den der har "1" i kolonne O i arket KONTO)

Hvis det kommer på plads i arket TEMP1, så skulle den automatisk komme korrekt over i SPEC1, men jeg kan simpelthen ikke gennemskue hvor i koden det skal rettes.
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 21:52 #19
Så skal 1080, 1376 og 1915 vel det samme?
Avatar billede familienriis Nybegynder
22. januar 2008 - 21:58 #20
jep.
Som det er nu bliver de lagt sammen i konto 1917.
De skal blot lægges sammen i en linie med konto 1010. (i kolonne A)

Det er umiddelbart den eneste korrektion der skal laves, men den er ret vigtig.

Det nr. de skal lægges sammen under er det nr. som har en kode i kolonne O i KONTO. Den gør det allerede korrekt med NAVNET i KOLONNE B, men det går galt i kolonne A
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 22:09 #21
Så linierne skal slettes?
Avatar billede familienriis Nybegynder
22. januar 2008 - 22:14 #22
ja, det kan man godt sige.
Den skal lægge tallene sammen i kolonne 5 og 7 og "slette" de andre linier, men selvfølgelig kun i arkene "TEMP1" og "SPEC1"

Den gør det allerede, det er blot det tal der kommer i kolonne A der er forkert.
Hvis der kommer 1010 i stedet for 1917, tror jeg den er i vinkel.
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 22:20 #23
Sådan virker det ikke hos mig!

1000    tekst1    1000000        1500000        1    Omsætning    -1
1082    tekst4    394000        366506        1    Omsætning    -1
1300    tekst5    500000        600000        1    Vareforbrug    1
1374    tekst6    173197        159483        1    Vareforbrug    1
1917    denne linie skule være nr 2 pga  kontonr 1010    -471394        -365669        1       
1918    tekst10    0        0        1    Vareforbrug    1
2200    tekst11    900000        800000        1    Lønninger     1
2202    tekst13    0        0        5    Lønninger     1
2207    tekst14    1007        1214        5    Lønninger     1
2220    tekst15    98120        81071        5    Lønninger     1
2222    tekst16    7660        5103        5    Lønninger     1
2223    tekst17    18018        14285        5    Lønninger     1
2226    tekst18    4240        3894        5    Lønninger     1
2232    tekst19    9086        12640        5    Lønninger     1
2234    tekst20    1845        1770        5    Lønninger     1
2241    tekst21    43327        23257        5    Lønninger     1
2242    tekst22    0        4911        5    Lønninger     1
2244    tekst23    4936        11082        5    Lønninger     1
2281    tekst25    18088        32063        5    Lønninger     1
2282    tekst26    -11594        -16435        5    Lønninger     1
2283    tekst27    20382        11594        5    Lønninger     1
2290    tekst29    -128641        -100063        5    Lønninger     1
2280    tekst24    -32063        0        6    Lønninger     1
2285    tekst28    -19849        0        6    Lønninger     1
2756    tekst30    -741806        -5277        8    Salgsomkostninger     1
2201    tekst12    300000        100000        13    Øvrige administrationsomkostninger     1
0    MÅ IKKE SLETTES    0        0        75    OVERSKRIFTER    -1



Skal det være således (check grundigt!)

1000    tekst1    1000000        1500000        1    Omsætning    -1
1917    denne linie skule være nr 2 pga  kontonr 1010    -471394        -365669        1       
1300    tekst5    500000        600000        1    Vareforbrug    1
1374    tekst6    173197        159483        1    Vareforbrug    1
                               
1918    tekst10    0        0        1    Vareforbrug    1
2200    tekst11    900000        800000        1    Lønninger     1
2202    tekst13    0        0        5    Lønninger     1
2207    tekst14    1007        1214        5    Lønninger     1
2220    tekst15    98120        81071        5    Lønninger     1
2222    tekst16    7660        5103        5    Lønninger     1
2223    tekst17    18018        14285        5    Lønninger     1
2226    tekst18    4240        3894        5    Lønninger     1
2232    tekst19    9086        12640        5    Lønninger     1
2234    tekst20    1845        1770        5    Lønninger     1
2241    tekst21    43327        23257        5    Lønninger     1
2242    tekst22    0        4911        5    Lønninger     1
2244    tekst23    4936        11082        5    Lønninger     1
2281    tekst25    18088        32063        5    Lønninger     1
2282    tekst26    -11594        -16435        5    Lønninger     1
2283    tekst27    20382        11594        5    Lønninger     1
2290    tekst29    -128641        -100063        5    Lønninger     1
2280    tekst24    -32063        0        6    Lønninger     1
2285    tekst28    -19849        0        6    Lønninger     1
2756    tekst30    -741806        -5277        8    Salgsomkostninger     1
2201    tekst12    300000        100000        13    Øvrige administrationsomkostninger     1
0    MÅ IKKE SLETTES    0        0        75    OVERSKRIFTER    -1
Avatar billede familienriis Nybegynder
22. januar 2008 - 22:30 #24
Den skal gøre det som nedenfor.
Bemærk at linie 1917 blot er blevet ændret til 1010.
Dt er den eneste ændring

Det er tallene fra linie 1010, 1080, 1376, 1915 og 1917

1000    tekst1    1000000        1500000        1    Omsætning    -1

1010    denne linie skule være nr 2 pga  kontonr 1010    -471394        -365669        1       

1082    tekst4    394000        366506        1    Omsætning    -1
1300    tekst5    500000        600000        1    Vareforbrug    1
1374    tekst6    173197        159483        1    Vareforbrug    1
1917    denne linie skule være nr 2 pga  kontonr 1010    -471394        -365669        1       
1918    tekst10    0        0        1    Vareforbrug    1
2200    tekst11    900000        800000        1    Lønninger    1
2202    tekst13    0        0        5    Lønninger    1
2207    tekst14    1007        1214        5    Lønninger    1
2220    tekst15    98120        81071        5    Lønninger    1
2222    tekst16    7660        5103        5    Lønninger    1
2223    tekst17    18018        14285        5    Lønninger    1
2226    tekst18    4240        3894        5    Lønninger    1
2232    tekst19    9086        12640        5    Lønninger    1
2234    tekst20    1845        1770        5    Lønninger    1
2241    tekst21    43327        23257        5    Lønninger    1
2242    tekst22    0        4911        5    Lønninger    1
2244    tekst23    4936        11082        5    Lønninger    1
2281    tekst25    18088        32063        5    Lønninger    1
2282    tekst26    -11594        -16435        5    Lønninger    1
2283    tekst27    20382        11594        5    Lønninger    1
2290    tekst29    -128641        -100063        5    Lønninger    1
2280    tekst24    -32063        0        6    Lønninger    1
2285    tekst28    -19849        0        6    Lønninger    1
2756    tekst30    -741806        -5277        8    Salgsomkostninger    1
2201    tekst12    300000        100000        13    Øvrige administrationsomkostninger    1
0    MÅ IKKE SLETTES    0        0        75    OVERSKRIFTER    -1
Avatar billede familienriis Nybegynder
22. januar 2008 - 22:32 #25
koden sætter automatisk det kontonr ind der står nederst af de linier som skal lægges sammen.
Den skal i stedet bruge dne linie der har "1" i kolonne O i arket KONTO
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 23:05 #26
Prøv denne:






Public Sub DAN_SPECIFIKATIONER_til_Udskrift()
    Dim Data As Variant, I As Integer, X As Integer, SumPoster As Variant, ErDerSumposter As Boolean, RK As Integer
    Dim NR As Integer, Antal() As Variant, T As Integer, N As Integer, RækkeStart As Integer, OV As Variant, Tid As Date
    Dim MinRækker As Integer

Sheets("TEMP1").Select
ActiveSheet.Delete
    Tid = Now
    ErDerSumposter = False
    RK = 0
    Application.Calculation = xlCalculationManual    ' stopper automatisk udregning af formler
    Application.ScreenUpdating = False
    With Worksheets("Konto")
        MinRækker = .Range("G1")    ' Minimum rækker incl overskrift og total
        ' Tjekker om der valgt overskrifter, det skal være det samme i N og O kolonnen
        Data = .Range("A5:P" & .Range("B65536").End(xlUp).Row + 50)  ' indlæser kontoplan i variablen Data + 50 tomme rækker

        Tjek = .Range("N5:O" & .Range("B65536").End(xlUp).Row)
        .Range("C200").End(xlUp).Value = WorksheetFunction.Sum(.Range("C1:C200")) * -1
        .Range("E200").End(xlUp).Value = WorksheetFunction.Sum(.Range("E1:E200")) * -1
        With Worksheets("overskrift")    'tilrettes til ark med overskrifter
            Overskrifter = .Range("A2:C" & .Range("B200").End(xlUp).Row)
        End With
        SidsteData = UBound(Data)
        For I = 1 To UBound(Tjek)
            OK = False
            For Y = 1 To UBound(Tjek)
                If Not IsEmpty(Tjek(I, 1)) Then
                    If Tjek(I, 1) = Tjek(Y, 2) Then
                        OK = True
                        If Tjek(I, 2) = 1 Then
                            Kontonr = Data(I, 1)
                        End If
                        Exit For
                    End If
                Else
                    OK = True
                End If
            Next
            If Not OK Then
                Application.ScreenUpdating = True
                Application.Calculation = xlCalculationManual    ' starter automatisk udregning af formler
                MsgBox "Du har glemt at angive nr i kolonne O i linien(" & .Range("O" & I + 4).Offset(0, -14) & " " & .Range("O" & I + 4).Offset(0, -13) & ")"

                Exit Sub
            End If
        Next


    End With
    ' kolonner i variablen Data
    ' Tekst, importeret fra regnskabssystem '  i år  '  x '  sidste år '  x  ' specnr. I år  '  Overskrift ' * '  specnr. sidste år
    '  1                  2                  3        4        5      6        7              8        9          10
    '  Overskrift ' * '  x ' Liner som skal samles'  Hvilken TEKST / NAVN skal vises' Alt:Titel
    '    11      12  13          14                      15                            16
    With Worksheets("overskrift")    'tilrettes til ark med overskrifter
        Overskrifter = .Range("A2:C" & .Range("B200").End(xlUp).Row)
    End With

    K1 = 0    ' nulstiller antal samledata
    For I = 1 To UBound(Data)
        If IsEmpty(Data(I, 7)) And IsEmpty(Data(I, 10)) Then
            If RK = 0 Then RK = I    ' første række der er ledig i Variablen Data
            For X = 1 To UBound(Data, 2)
                Data(I, X) = Empty    ' sletter data der ikke har et specnr
            Next
        Else
            Data(I, 3) = Data(I, 3) * Data(I, 9)    ' ganger beløbet

            If IsEmpty(Data(I, 10)) Then    ' hvis faktor for sidste år er tom, bruges dette år
                Data(I, 5) = Data(I, 5) * Data(I, 9)    ' ganger beløbet Sidste år med faktor i år
            Else
                Data(I, 5) = Data(I, 5) * Data(I, 12)    ' ganger beløbet Sidste år med faktor Sidste år
            End If
        End If
    Next

    '**************************************************** slut med at tælle sumposter og gange med faktor ***********************

    '******************************************************* Begynder at dele konti på specnr per år ***********************************

    SidsteData = RK - 1
    NR = RK
    For I = 1 To SidsteData
        If Not IsEmpty(Data(I, 7)) And Not IsEmpty(Data(I, 10)) Then
            For X = 1 To UBound(Data, 2)
                Data(NR, X) = Data(I, X)
            Next
            Data(NR, 3) = 0
            Data(I, 5) = 0
            Data(NR, 7) = Data(I, 10) * 100
            If Not IsEmpty(Data(I, 15)) Then Data(NR, 15) = Data(I, 15) * 100    '  specnr* 100, på dem der skal adskilles, for sidste år

            Data(NR, 14) = Data(I, 14) * 100    '  specnr* 100, på dem der skal adskilles, for sidste år

            NR = NR + 1
        End If
        If Not IsEmpty(Data(I, 16)) Then Data(I, 2) = Data(I, 16)
    Next
    Sheets.Add
    ActiveSheet.Name = "TEMP"    ' bruger et midlertidig ark til sortering
    Range("A1").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Key2:=Range("A1") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                  False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
                                                                              :=xlSortNormal
    Data = Range("A1").Resize(NR + 50, UBound(Data, 2))
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    SidsteData = NR
    '******************************************************* Færdig med at dele konti på specnr per år ***********************************

    '******************************************************* Begynder at summere, dem der skal ***********************************
    For I = 1 To SidsteData

        If Not IsEmpty(Data(I, 15)) Then
            K1 = K1 + 1    ' tæller antal samledata
            ReDim Preserve Antal(K1)
            Antal(K1) = Data(I, 15)
            ErDerSumposter = True
        End If
    Next
    ' kolonner i variablen Data
    ' Tekst, importeret fra regnskabssystem '  i år  '  x '  sidste år '  x  ' specnr. I år  '  Overskrift ' * '  specnr. sidste år
    '  1                  2                  3        4        5      6        7              8        9          10
    '  Overskrift ' * '  x ' Liner som skal samles'  Hvilken TEKST / NAVN skal vises' Alt:Titel
    '    11      12  13          14                      15                            16
    If ErDerSumposter Then
        For X = 1 To UBound(Antal)
            For I = 1 To SidsteData
                If Antal(X) = Data(I, 14) Then    ' passer sammentællingskoden, så fortsæt
                    If Not IsEmpty(Data(I, 16)) Then    ' er der special overskrift
                        Data(NR + X, 2) = Data(I, 16)    ' special Overskrift
                    ElseIf Not IsEmpty(Data(I, 15)) Then    ' eller er der et tal ud for en anden
                        Data(NR + X, 2) = Data(I, 2)      ' normal Overskrift
                       
                    End If
                    Data(NR + X, 1) = Kontonr '"1010" 'Data(I, 1)
                    Data(NR + X, 3) = Data(NR + X, 3) + Data(I, 3)    ' summere dette år
                    Data(NR + X, 5) = Data(NR + X, 5) + Data(I, 5)    ' summere sidste år
                    Data(NR + X, 7) = Data(I, 7)    ' specnr
                    For T = 1 To UBound(Data, 2)
                        Data(I, T) = Empty    ' sletter data efter summering
                    Next
                End If
            Next
        Next
    End If
   
    For X = 1 To UBound(Data)
        If Data(X, 7) > 100 Then Data(X, 7) = Data(X, 7) / 100        ' Retter specnr, på dem der skal adskilles, for sidste år
    Next
    Sheets.Add    ' bruger et midlertidig ark til sortering
    ActiveSheet.Name = "TEMP1"
    Range("A1").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Key2:=Range("A1") _
                , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                  False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
                                                                              :=xlSortNormal
    Application.DisplayAlerts = False
    Data = Range("A1:G" & Range("B65536").End(xlUp).Row)
    'ActiveSheet.Delete
    Application.DisplayAlerts = True

    '******************************************************* summerering slut ***********************************

    Worksheets("spec1").Activate
    With Worksheets("spec1")
        Cells.Rows.Hidden = False
        ActiveSheet.DisplayPageBreaks = True
        For I = 2 To .Range("B1000").End(xlUp).Row
        Rows(I).PageBreak = xlPageBreakNone    ' fjerner sideskift
            Rows(I).PageBreak = xlNone
          Next
        ActiveSheet.DisplayPageBreaks = False
        ' *********************************************Rettet gammel kode ********************************


        SidsteData = UBound(Data)
        RækkeStart = 4
        Application.ScreenUpdating = False

        For I = 1 To UBound(Overskrifter)    'Overskrifter løbes igennem

            For J = 1 To SidsteData    'antal poster = kriterier tælles op

                If Data(J, 7) = Overskrifter(I, 1) Then

                    If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
                        K = K + 1
                    End If
                End If
                '
                '                If Data(J, 7) > Overskrifter(I, 1) Then Exit For
            Next J

            If K > 0 Then
                ReDim Poster(K - 1, 7)
                K = 0

                For J = 1 To SidsteData    'Kontoplan løbes igennem
                    If Data(J, 7) > Overskrifter(I, 1) Then Exit For
                    If Data(J, 7) = Overskrifter(I, 1) Then

                        If Data(J, 3) <> 0 Or Data(J, 5) <> 0 Then
                            Poster(K, 1) = Data(J, 2)    'tekst/kontonavn
                            Poster(K, 3) = Data(J, 3)    'beløb i år
                            Poster(K, 5) = Data(J, 5)    'beløb sidste år
                            Poster(K, 7) = Data(J, 1)    'kontonr.
                            K = K + 1
                            totaliår = totaliår + Data(J, 3)
                            totalsidsteår = totalsidsteår + Data(J, 5)

                        End If
                    End If
                Next J
                '**************************************** KABBAK *************************************************
            End If
            OV = Worksheets("spec1").Range("B6:B" & Worksheets("spec1").Range("B1000").End(xlUp).Row)
            For Y = UBound(OV) To 1 Step -1
                If OV(Y, 1) = Overskrifter(I, 2) And .Cells(Y + 5, "I") = Overskrifter(I, 1) Then
                    RækkeStart = Y + 5    '<<<< Finder rækkenr. for overskrift >>>>
                    Exit For
                End If
                If OV(Y, 1) = Overskrifter(I, 2) & " i alt " And .Cells(Y + 5, "I") = Overskrifter(I, 1) Then Rækkeslut = Y + 5  '<<<< Finder rækkenr. for overskrift i alt >>>>
            Next

            If Rækkeslut - RækkeStart > 1 Then
                .Rows(RækkeStart + 1 & ":" & Rækkeslut - 1).Delete
            End If

            '<<<< indsætter rækker og data og totaler mellem overskrift og i alt >>>>
            If K > 0 Then

                .Rows(RækkeStart + 1 & ":" & RækkeStart + K).Insert Shift:=xlShiftDown
                .Range("A" & RækkeStart + 1).Resize(K, 6) = Poster
                .Range("A" & RækkeStart + 1).Resize(K, 6).Font.Bold = False
                With Range("B" & RækkeStart + 1).Resize(K + 1, 1)
                    .NumberFormat = "@*."
                    .HorizontalAlignment = xlDistributed
                End With
                .Cells(RækkeStart + 1 + K, 4) = totaliår
                .Cells(RækkeStart + 1 + K, 6) = totalsidsteår
                If UCase(Overskrifter(I, 3)) = "NEJ" Then
                    .Rows(RækkeStart - 1 & ":" & RækkeStart + K + 2).Hidden = True

                End If
                'Den må altså ikke skjule grupperne 1-13 og 69-74, da
                Select Case Overskrifter(I, 1)
                Case 1 To 13, 69 To 74
                Case Else
                    If K + 2 <= MinRækker + 2 Then
                        .Rows(RækkeStart - 1 & ":" & RækkeStart + K + 2).Hidden = True
                    End If
                End Select

            Else
                .Cells(RækkeStart + 1 + K, 4) = 0
                .Cells(RækkeStart + 1 + K, 6) = 0
                .Rows(RækkeStart - 1 & ":" & RækkeStart + 2).Hidden = True
            End If

            '<<<< Nulstiller totaler og tæller inden næste overskrift hentes ind >>>>
            K = 0: totaliår = 0: totalsidsteår = 0
            Application.StatusBar = "Danner SPECIFIKATION  " & I & " af " & UBound(Overskrifter)

        Next I

        '    ************************************************sideskift ********************************************

        Application.StatusBar = ""
        ActiveSheet.DisplayPageBreaks = True
        Application.Calculation = xlCalculationAutomatic    ' Slår automatiske beregninger til igen
        Application.ScreenUpdating = True    ' slår opdatering af skærmen til igen
        .Range("F7").Select
    End With
    MsgBox Format(Now() - Tid, "nn:ss")    ' bare kommenter den ud, den viser tiden som koden tager for at køre.
End Sub
Avatar billede familienriis Nybegynder
22. januar 2008 - 23:18 #27
YES, det er lige som det skal være.
Så vidt jeg kan se så har du kun rettet 1 linie
Simpelt?
Overhovedet ikke for mig.

Jeg takker mange gange.

Har du et svar?
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 23:30 #28
Jeg rettede to steder:

If Tjek(I, 2) = 1 Then
Kontonr = Data(I, 1)
End If

..og

Data(NR + X, 1) = Kontonr '"1010" 'Data(I, 1)

'"1010" 'Data(I, 1) kan du bare slette. Koden krøæver at du bliver ved med at bruge 1-tal til mærkning af kont1, ellers ret

If Tjek(I, 2) = 1 Then

..til

If Tjek(I, 2) <> "" Then
Avatar billede gider_ikke_mere Nybegynder
22. januar 2008 - 23:31 #29
Jeg er ved at gå lidt kold i det VBA. Bruger det for lidt..
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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