Avatar billede tobler Nybegynder
12. juni 2003 - 17:26 Der er 9 kommentarer og
1 løsning

Macro til at indsætte tom række (med formler)

Her en opgave for de langhårede...

Jeg har f.eks. følgende oplysninger:

Række  Kol.A    Kol.B    Kol.C
    1  Kunde-nr Vare-gr. Omsætning
    2  1234    555      12.500,00
    3  1234    666      1.500,00
    4  1234    667      12.500,00
    5  2345    555      5.500,00

Jeg ønsker nu at indsætte en række efter kunde 1234 (idet at værdien i celle A5 er et nyt kunde-nr), i den nye celle A5 (efter indsættelse af en tom række) vil jeg lave et lookup (=VLOOKUP(A5;Deb!A$1:B$1500;2;) for at indsætte navnet for kunden fra listen i Deb. Derefter ønsker jeg at regne omsætningen fra kollonne C ("rangen" må makroen finde fra skiftet mellem de skiftende kunde-numre).

Alt data er sorteret i kunde-nr orden.
Avatar billede bitphil Nybegynder
12. juni 2003 - 18:28 #1
Det er jo sådan noget Access er god til ;-)
Avatar billede tobler Nybegynder
12. juni 2003 - 23:26 #2
---> bitphil

Checkede lige Access spørgsmålene uden at lede efter en løsning, men så næsten lutter gule flag!

Men måske har du ret! Jeg har bare ingen erfaring i at danne en fornuftig liste/udskrift i Access.
Avatar billede jkrons Professor
13. juni 2003 - 00:33 #3
Jeg er ikke helt sikker på om dette er hvad du leder efter, men prøv det i en kopi af din fil. Funktionen benytter sig af subtotaler:

Sub SubTot()

    Range("a2").Select
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Cells.Replace What:="* Total", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False
    For Each c In ActiveSheet.UsedRange.Cells
    If c.Column = 1 Then
    If c.Row > 1 Then
        c.Offset(-1, 0).Activate
        a = ActiveCell.Address
        If c = "" Then
            c.Formula = "=VLOOKUP(" & a & ",deb!a1:b10,2)"
        End If
    End If
    End If
    Next c
    ActiveWindow.DisplayOutline = False
End Sub
Avatar billede jkrons Professor
13. juni 2003 - 00:34 #4
VLOOKUP skal naturligvis rettes til A1:B1500, men jeg orkede ikke at indsætte så mange data :-)
Avatar billede bitphil Nybegynder
13. juni 2003 - 07:45 #5
Jeg mente også mere generelt, at Access eller en anden database, er god til sådan nogle ting som at have kunder, varer, bestillinger, totaler og nye oprettelser af disse. Og så så det også ud som om at du var ved at nå 'grænsen' af hvad der er lettest at håndtere i Excel.
Og Access er ikke så farlig at komme i gang med - og så har de jo faktisk at det der firmasjov med kunder, varer og bestillinger liggende i deres eksempeldatabase Northwind. Men det hjælper selvføli' ikke noget lige nu hvor man står og har behov for det i Excel.
Avatar billede jkrons Professor
14. juni 2003 - 16:23 #6
Har du prøvet om makroen løser dit problem?
Avatar billede tobler Nybegynder
16. juni 2003 - 15:08 #7
Makroen virker fint.

Har udbygget den lidt ved tilføje ",4,5" i argumentet "TotalList:=Array(3,4,5)".

"5" er summering af dækningsbidraget, nu ville det være KANON, hvis jeg i kollonne 6/F kunne beregne dækningsbidragsprocenten med =F/C (=6/3).

Jeg har bladret/søgt i hjælpeteksten for at forstå makroen, men kan ikke finde: xlsum, SummaryBelowData etc. Hvor kommer de kommandoer fra?
Avatar billede martin_moth Mester
16. juni 2003 - 16:56 #8
tobler: Det er faktisk mere simpelt end du tror. Optag en macro, og gør præcis det du ønsker. Herefter kan du rette en smule i macroen, og du har hvad du ønsker :o)
Avatar billede jkrons Professor
16. juni 2003 - 22:33 #9
De to kommandoer du søger kommer fra den indbyggede funktion Subtotal.
Avatar billede jkrons Professor
16. juni 2003 - 22:57 #10
Prøv at se på denne kode om ikke det er noget i den retning du søger:

Sub Subtot()
    Range("a2").Select
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3, 4, 5), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Cells.Replace What:="* Total", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False
    For Each c In ActiveSheet.UsedRange.Cells
    If c.Column = 1 Then
    If c.Row > 1 Then
        c.Offset(-1, 0).Activate
        a = ActiveCell.Address
        If c = "" Then
            c.Formula = "=VLOOKUP(" & a & ",deb!a1:b10,2)"
            ro = ActiveCell.Row
            ActiveCell.Offset(1, 5).Formula = "=E" & ro + 1 & "/C" & ro + 1 & "*100"
        End If
       
    End If
    End If
   
    Next c
    ActiveWindow.DisplayOutline = False

End Sub
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