Avatar billede familienriis Nybegynder
11. oktober 2007 - 18:10 Der er 16 kommentarer og
1 løsning

indsætte linie med overskrift og sammentælling

Kan det lade sig gøre at lave en makro der indsætter nogle linier med overskrifter og sammentællinger.

Jeg har idag en masse linier i et ark. I kolonne A står der nogle forskellige tal i intervallet 1000-9999

Disse linier er hentet ind fra et andet ark og varierer fra gang til gang både i antal linier og de tal der står i linierne.

Nu kunne jeg så godt tænke mig at den lavede/indsatte en linie over den første konto der hedder
DRIFT (over den første konto der er større end 999)
og en linie der hedder
DRIFT I ALT (under den sidste konto der er mindre 4999)

og tilsvarende vil jeg gerne have:

Aktiver + aktiver ialt (for intervallet 5000-5999)

Passiver + passiver i alt (for intervallet 6000-6999)

Andet + Andet i alt(for intervallet 7000-9999)

Nedenfor har jeg forsøgt at illustrerer et eksempel:

SOM DET SER UD NU:
kol a  kol b          kol c    kold E
1010    tekst1          100      150
1020    tekst2          2500      4000
5050    tekst3          125000    15000
5800    tekst4          250      250
6100    tekst 5        250000    2500000
6500    tekst 6        2522      2522
7500    tekst 7        1        1



SOM DET ØNSKES:
kol a  kol b          kol c    kold E
DRIFT
1010    tekst1          100      150
1020    tekst2          2500      4000
DRIFT I ALT            2600      4150

AKTIVER
5050    tekst3          125000    15000
5800    tekst4          250      250
AKTIVER IALT            125250    15250

PASSIVER
6100    tekst 5        250000    250000
6500    tekst 6        2522      2522
PASSIVER I ALT          252522    252522

ANDET
7500    tekst 7        1        1
ANDET IALT              1        1


Håber at det giver mening.
Husk at antallet af linier varierer fra gang til gang.
Avatar billede innoteck Nybegynder
12. oktober 2007 - 08:56 #1
Er kolonne A altid sorteret i stigende orden, når de hentes ind fra det andet ark?
Avatar billede innoteck Nybegynder
12. oktober 2007 - 08:58 #2
Er grupperingen af tallene begrænset til hhv. drift, aktiver, passiver, andet, eller kan/skal der være flere overskrifter/sammentællinger?
Avatar billede innoteck Nybegynder
12. oktober 2007 - 11:22 #3
Kan der forekomme kontonumrer på listen i kolonne A som er mindre end 1000 (0 - 999)
- eller vil der altid skulle stå 'DRIFT' i celle A1 ?
Avatar billede familienriis Nybegynder
12. oktober 2007 - 12:19 #4
Hej

Jeg prøver lige at svre på spørgsmålene i den rækkefølge de er kommet.

1. Tallene kommer altid ind i stigende orden.

2. der er følgendeo "grupper" DRIFT, AKTIVER, PASSIVER, ANDET1, ANDET2, ANDET3 og ANDET4

3. Der kommer aldrig numre der er under 1000

4. De øverste linier 5 linier skal helst ikke røres, da der står "EN FAST TEKST"
 
5. Som det er nu, så begynder tallene i linie 6.
Avatar billede familienriis Nybegynder
12. oktober 2007 - 12:20 #5
drift = 1000-4999
aktiver = 5000-5999
passiver = 6000-6999
andet1 = 7000-7999
andet2 = 8000-8999
andet3 = 9000-9499
andet4 = 9500-9999
Avatar billede jlemming Nybegynder
13. oktober 2007 - 23:51 #6
prøv om denne kode duer

Dim tabel(8) As Variant

navne = Array("Drift", "Aktiver", "Passiver", "Andet1", "Andet2", "Andet3", "Andet4")
tabel(0) = 5                ' start offset i tabel
Application.ScreenUpdating = False
lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1) _
  .End(xlUp).Offset(1, 0).Row - 1
For c = 1 To 7
  tabel(c) = 0
Next c


For r = tabel(0) + 1 To lastrow
  If (Range("A" & r).Value < 5000) Then
    driftrow = r
    tabel(1) = r
  Else
    If (Range("A" & r).Value < 6000) Then
      aktiverrow = r
      tabel(2) = r
    Else
      If (Range("A" & r).Value < 7000) Then
        passiverrow = r
        tabel(3) = r
      Else
        If (Range("A" & r).Value < 8000) Then
          andet1row = r
          tabel(4) = r
        Else
          If (Range("A" & r).Value < 9000) Then
            andet2row = r
            tabel(5) = r
          Else
            If (Range("A" & r).Value < 9500) Then
              andet3row = r
              tabel(6) = r
            Else
              If (Range("A" & r).Value < 10000) Then
                andet4row = r
                tabel(7) = r
              End If
            End If
          End If
        End If
      End If
    End If
  End If
Next r

tabeltl = 7

Do
  If (tabel(tabeltl) > 0) Then
    Rows(tabel(tabeltl) + 1 & ":" & tabel(tabeltl) + 1).Select
    Selection.Insert Shift:=xlDown
    Range("A" & tabel(tabeltl) + 1).Value = navne(tabeltl - 1) & " IALT"
    Rows(tabel(tabeltl) + 1 & ":" & tabel(tabeltl) + 1).Select
    With Selection.Font
        .FontStyle = "bold"
    End With
    c = 1                ' find forrige
    If (tabeltl > 1) Then
      Do
        If (tabel(tabeltl - c) > 0) Then
          Exit Do
        End If
        c = c + 1
      Loop Until tabel(tabeltl - c) > 0
    End If
    Range("C" & tabel(tabeltl) + 1).Value = "=SUM(C" & tabel(tabeltl - c) + 1 & ":C" & tabel(tabeltl) & ")"
    Range("D" & tabel(tabeltl) + 1).Value = "=SUM(D" & tabel(tabeltl - c) + 1 & ":D" & tabel(tabeltl) & ")"
     
    Rows(tabel(tabeltl) - 1 & ":" & tabel(tabeltl) - 1).Select
    Selection.Insert Shift:=xlDown
    Range("A" & tabel(tabeltl) - 1).Value = navne(tabeltl - 1)
    Rows(tabel(tabeltl) - 1 & ":" & tabel(tabeltl) - 1).Select
    With Selection.Font
        .FontStyle = "bold"
    End With

  End If
  tabeltl = tabeltl - 1
 
Loop Until tabeltl = 0
Application.ScreenUpdating = True
Avatar billede familienriis Nybegynder
14. oktober 2007 - 00:49 #7
ja, det er faktisk temmelig langt derhen af.
men der er lidt småproblemer.....

1.
Det første og midste problem er at sammen tallene er i kolonne C 0g E.

2.
Når den laver linierne drift ialt, aktiver ialt osv. tæller den korrekt sammen og indsætter en linie, der hvor den skal.
Men overskrifterne DRIFT, AKTIVER, osv. blier ALTID indsat 2 linier over sammentællingen. Det duer ikke. Der er typisk 20 linier i hver grupper og dette kan variere.
Overskriften "Drift" skal derfor indsættes over det første tal der >1000
AKTIVER skal indsættes lige over det første tal der > 5000 osv.

Håber at du forstår hvad jeg mener.
Avatar billede jlemming Nybegynder
14. oktober 2007 - 19:13 #8
ok, vil der altid være nogen af alle posterne?, det vil gøre koden mere simple.
Avatar billede familienriis Nybegynder
14. oktober 2007 - 21:01 #9
nej, det vil der desværre ikke altid være. :-(
Avatar billede jlemming Nybegynder
15. oktober 2007 - 09:11 #10
så prøv denne, jeg havde tilfældigvis kun 2tal i hver af mine grupper, så det så fint ud os mig. :-)

Dim tabel(8) As Variant

navne = Array("Drift", "Aktiver", "Passiver", "Andet1", "Andet2", "Andet3", "Andet4")
tabel(0) = 5                ' start offset i tabel
Application.ScreenUpdating = False
lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1) _
  .End(xlUp).Offset(1, 0).Row - 1        ' find sidste række
For c = 1 To 7
  tabel(c) = 0
Next c


For r = tabel(0) + 1 To lastrow
  If (Range("A" & r).Value < 5000) Then
    tabel(1) = r
  Else
    If (Range("A" & r).Value < 6000) Then
      tabel(2) = r
    Else
      If (Range("A" & r).Value < 7000) Then
        tabel(3) = r
      Else
        If (Range("A" & r).Value < 8000) Then
          tabel(4) = r
        Else
          If (Range("A" & r).Value < 9000) Then
            tabel(5) = r
          Else
            If (Range("A" & r).Value < 9500) Then
              tabel(6) = r
            Else
              If (Range("A" & r).Value < 10000) Then
                tabel(7) = r
              End If
            End If
          End If
        End If
      End If
    End If
  End If
Next r

tabeltl = 7

Do
  If (tabel(tabeltl) > 0) Then
    Rows(tabel(tabeltl) + 1 & ":" & tabel(tabeltl) + 1).Select      ' sæt bundlinie
    Selection.Insert Shift:=xlDown
    With Selection.Font
        .FontStyle = "bold"
    End With
    Range("A" & tabel(tabeltl) + 1).Value = navne(tabeltl - 1) & " IALT"
    c = 1                ' find forrige række
    If (tabeltl > 1) Then
      Do
        If (tabel(tabeltl - c) > 0) Then
          Exit Do
        End If
        c = c + 1
      Loop Until tabel(tabeltl - c) > 0
    End If
    Range("C" & tabel(tabeltl) + 1).Value = "=SUM(C" & tabel(tabeltl - c) + 1 & ":C" & tabel(tabeltl) & ")"
    Range("D" & tabel(tabeltl) + 1).Value = "=SUM(E" & tabel(tabeltl - c) + 1 & ":E" & tabel(tabeltl) & ")"
     
    Rows(tabel(tabeltl - c) + 1 & ":" & tabel(tabeltl - c) + 1).Select ' sæt overskrift
    Selection.Insert Shift:=xlDown
    With Selection.Font
        .FontStyle = "bold"
    End With
    Range("A" & tabel(tabeltl - c) + 1).Value = navne(tabeltl - 1)
    Rows(tabel(tabeltl - c) + 1 & ":" & tabel(tabeltl - c) + 1).Select ' ekstra linie
    Selection.Insert Shift:=xlDown

  End If
  tabeltl = tabeltl - 1
 
Loop Until tabeltl = 0
Application.ScreenUpdating = True
Avatar billede familienriis Nybegynder
15. oktober 2007 - 10:34 #11
Yes, nu virker den.
Mange tak for hjælpen.
Hvis du har et svar, så har jeg points.

Jeg har dog en lille tilrettelse som kunne være rigtig godt at få med.
Nogle gange er der tomme linier (aldrig mere end 1 tom linie) mellem nogle af de linier som er importeret.
Når dette er tilfældet virker den ikke, men jeg kan ikke selv overskue hvor rettelsen skal laves.

Feks.

1010
1020
1030

1045
1050

5000
5001
5002
5003
osv.
Avatar billede jlemming Nybegynder
15. oktober 2007 - 10:39 #12
skal linier slettes eller bibeholdes ?
Avatar billede familienriis Nybegynder
15. oktober 2007 - 10:41 #13
de skal bibeholdes
Avatar billede jlemming Nybegynder
15. oktober 2007 - 11:00 #14
Prøv denne:o)

Dim tabel(8) As Variant

navne = Array("Drift", "Aktiver", "Passiver", "Andet1", "Andet2", "Andet3", "Andet4")
tabel(0) = 5                ' start offset i tabel
Application.ScreenUpdating = False
lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1) _
  .End(xlUp).Offset(1, 0).Row - 1        ' find sidste række
For c = 1 To 7
  tabel(c) = 0
Next c


For r = tabel(0) + 1 To lastrow
  If ((Range("A" & r).Value < 5000) And (Range("A" & r).Value <> Empty)) Then
    tabel(1) = r
  Else
    If ((Range("A" & r).Value < 6000) And (Range("A" & r).Value <> Empty)) Then
      tabel(2) = r
    Else
      If ((Range("A" & r).Value < 7000) And (Range("A" & r).Value <> Empty)) Then
        tabel(3) = r
      Else
        If ((Range("A" & r).Value < 8000) And (Range("A" & r).Value <> Empty)) Then
          tabel(4) = r
        Else
          If ((Range("A" & r).Value < 9000) And (Range("A" & r).Value <> Empty)) Then
            tabel(5) = r
          Else
            If ((Range("A" & r).Value < 9500) And (Range("A" & r).Value <> Empty)) Then
              tabel(6) = r
            Else
              If ((Range("A" & r).Value < 10000) And (Range("A" & r).Value <> Empty)) Then
                tabel(7) = r
              End If
            End If
          End If
        End If
      End If
    End If
  End If
Next r

tabeltl = 7

Do
  If (tabel(tabeltl) > 0) Then
    Rows(tabel(tabeltl) + 1 & ":" & tabel(tabeltl) + 1).Select      ' sæt bundlinie
    Selection.Insert Shift:=xlDown
    With Selection.Font
        .FontStyle = "bold"
    End With
    Range("A" & tabel(tabeltl) + 1).Value = navne(tabeltl - 1) & " IALT"
    c = 1                ' find forrige række
    If (tabeltl > 1) Then
      Do
        If (tabel(tabeltl - c) > 0) Then
          Exit Do
        End If
        c = c + 1
      Loop Until tabel(tabeltl - c) > 0
    End If
    Range("C" & tabel(tabeltl) + 1).Value = "=SUM(C" & tabel(tabeltl - c) + 1 & ":C" & tabel(tabeltl) & ")"
    Range("D" & tabel(tabeltl) + 1).Value = "=SUM(E" & tabel(tabeltl - c) + 1 & ":E" & tabel(tabeltl) & ")"
     
    Rows(tabel(tabeltl - c) + 1 & ":" & tabel(tabeltl - c) + 1).Select ' sæt overskrift
    Selection.Insert Shift:=xlDown
    With Selection.Font
        .FontStyle = "bold"
    End With
    Range("A" & tabel(tabeltl - c) + 1).Value = navne(tabeltl - 1)
    Rows(tabel(tabeltl - c) + 1 & ":" & tabel(tabeltl - c) + 1).Select ' ekstra linie
    Selection.Insert Shift:=xlDown

  End If
  tabeltl = tabeltl - 1
 
Loop Until tabeltl = 0
Application.ScreenUpdating = True
Avatar billede jlemming Nybegynder
15. oktober 2007 - 12:17 #15
Du får lige en ny, den forrige sætter en tom linie ind i starten,

Dim tabel(8) As Variant
Const start_linie = 6


navne = Array("Drift", "Aktiver", "Passiver", "Andet1", "Andet2", "Andet3", "Andet4")
Application.ScreenUpdating = False
lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1) _
  .End(xlUp).Offset(1, 0).Row - 1        ' find sidste række
tabel(0) = start_linie - 1              ' start offset i tabel
For c = 1 To 7                          ' clear tabel
  tabel(c) = 0
Next c


For r = tabel(0) + 1 To lastrow
  If ((Range("A" & r).Value < 5000) And (Range("A" & r).Value <> Empty)) Then
    tabel(1) = r
  Else
    If ((Range("A" & r).Value < 6000) And (Range("A" & r).Value <> Empty)) Then
      tabel(2) = r
    Else
      If ((Range("A" & r).Value < 7000) And (Range("A" & r).Value <> Empty)) Then
        tabel(3) = r
      Else
        If ((Range("A" & r).Value < 8000) And (Range("A" & r).Value <> Empty)) Then
          tabel(4) = r
        Else
          If ((Range("A" & r).Value < 9000) And (Range("A" & r).Value <> Empty)) Then
            tabel(5) = r
          Else
            If ((Range("A" & r).Value < 9500) And (Range("A" & r).Value <> Empty)) Then
              tabel(6) = r
            Else
              If ((Range("A" & r).Value < 10000) And (Range("A" & r).Value <> Empty)) Then
                tabel(7) = r
              End If
            End If
          End If
        End If
      End If
    End If
  End If
Next r

tabeltl = 7

Do
  If (tabel(tabeltl) > 0) Then
    Rows(tabel(tabeltl) + 1 & ":" & tabel(tabeltl) + 1).Select      ' sæt bundlinie
    Selection.Insert Shift:=xlDown
    With Selection.Font
        .FontStyle = "bold"
    End With
    Range("A" & tabel(tabeltl) + 1).Value = navne(tabeltl - 1) & " IALT"
    Rows(tabel(tabeltl) + 2 & ":" & tabel(tabeltl) + 2).Select ' ekstra linie
    Selection.Insert Shift:=xlDown
    c = 1                                                          ' find forrige række
    If (tabeltl > 1) Then
      Do
        If (tabel(tabeltl - c) > 0) Then
          Exit Do
        End If
        c = c + 1
      Loop Until tabel(tabeltl - c) > 0
    End If
    Range("C" & tabel(tabeltl) + 1).Value = "=SUM(C" & tabel(tabeltl - c) + 1 & ":C" & tabel(tabeltl) & ")"
    Range("D" & tabel(tabeltl) + 1).Value = "=SUM(E" & tabel(tabeltl - c) + 1 & ":E" & tabel(tabeltl) & ")"
     
    Rows(tabel(tabeltl - c) + 1 & ":" & tabel(tabeltl - c) + 1).Select ' sæt overskrift
    Selection.Insert Shift:=xlDown
    With Selection.Font
        .FontStyle = "bold"
    End With
    Range("A" & tabel(tabeltl - c) + 1).Value = navne(tabeltl - 1)

  End If
  tabeltl = tabeltl - 1
 
Loop Until tabeltl = 0
Application.ScreenUpdating = True
Avatar billede familienriis Nybegynder
15. oktober 2007 - 12:30 #16
jeg takker mange gange. :-)
Avatar billede jlemming Nybegynder
15. oktober 2007 - 12:44 #17
Velbekomme, og tak for point :o)
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