Avatar billede allanknudsen Nybegynder
30. december 2008 - 05:29 Der er 13 kommentarer og
1 løsning

Lagring af data i forskellige celler/ark fra indtastningsark

Jeg har
et dataark bestående af:
1. Kolonne: forestillingsnr.
2. kolonne. forestillingsnavne

et regnskabsark bestående af kolonner med forestillingsnr.;forestillingsnavn;antal pladser;Billetpriser A;B;C;Indtægter i alt:forestillingsudgifter:Dækningningsbidrag:
kolonne 1 og 2 er lig med datarket: 'Forestillinger data'!A1 ... osv.

Nu ønsker jeg en formular/ak, som jeg delvist har konstrueret med data i én kolonne:
B1 er lig med: indtastet forestillingsnr.
B2 er lig med: =SLÅ.OP(B1;'Forestillinger data'!A:A;'Forestillinger data'!B:B)
De efterfølgende rækker i formularen/arket er beregnet til indtastning af data jfr. regnskabsarket (antal pladser;Billetpriserne A,B,C; Antal solgte pladser. Herefter beregnes "indtægter i alt" osv.)

Mit problem er, at det, som jeg indtaster i indtastningsformularen, skal lagres i de respektive celler i mit regnskabsark ud for de respektive forestillinger.
Altså
* de data, som jeg indtaster vedr. forestilling nr. 1, skal lagres i regnskabsarket i rækken ud for forestilling nr. 1.
* de data, som jeg indtaster vedr. forestilling nr. 2, skal lagres i regnskabsarket i rækken ud for forestilling nr. 2.
Kan dette klares med en formel, og hvordan ser den ud?
Eller skal dette klares med en makro, og hvordan ser den ud?
Jeg har ikke megen forstand på programmering og makroer.
Jeg håber du eller andre kan hjælpe mig?
Mit udkast kan ses på GratisUpload.dk:
http://www.gratisupload.dk/download/20593/
Avatar billede jkrons Professor
30. december 2008 - 11:41 #1
Detgte er ikke nødvendigvis den mest elegange metode, rent kodningsmæssigt, men det løser opgaven:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c22:c26")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
        For Each c In Sheets("Regnskab").Range("a2:a45").Cells
            If c.Value = Fstnr Then
                Select Case Target.Address
                    Case Is = "$C$22"
                        c.Offset(0, 2).Value = Target.Value
                    Case Is = "$C$23"
                        c.Offset(0, 3).Value = Target.Value
                    Case Is = "$C$24"
                        c.Offset(0, 4).Value = Target.Value
                    Case Is = "$C$25"
                        c.Offset(0, 5).Value = Target.Value
                    Case Is = "$C$26"
                        c.Offset(0, 6).Value = Target.Value
                End Select
            End If
        Next
End If
End Sub

Læg koden på indtastningsarkets kodeark.
Avatar billede jkrons Professor
30. december 2008 - 12:24 #2
Jeg bør for god ordens skyld lige sige, at koden kun "gør noget", hvis forestillingsnummeret fra "Indtastning" findes i "Regnskab"
Avatar billede allanknudsen Nybegynder
31. december 2008 - 05:15 #3
Hej jkrons. Tak for dit svar. Nu er jeg ikke en ørn til VB. Jeg har gjort følgende:
Åbnet VB og indsat ovennævnte makro ud for indtastningsarket (I toppen står der General og Declarations) Jeg håber, at det er den rigtige måde.
I Prisgruppearket har jeg indsat =+Indtastning!$C$7, =+Indtastning!$C$8 osv. i de respektive celler.
Problem: I Prisgruppearket skriver den samme tal, jeg sidst har indtastet i indtastningsarket. Der skiftes ikke data ud fra hvilken forestilling der vælges/indtastes i.
Du kan se mit forsøg på http://www.gratisupload.dk/download/20670/
Jeg håber meget, at du kan hjælpe mig.
Avatar billede jkrons Professor
31. december 2008 - 11:35 #4
Jeg havde ikke -fra din første postc - opfattet, at der også skulle ske noget i prisgruppearket. Men du kan ikke gører det, som du gør, ved hjælp af formler, for så ændres det hele hver gangm, du taster i indtastning. Du er nødt til at gøre det ved hjælp af en makro, på samme måde som jeg har gjort ved Regnskab. Jeg vil geren se på det, men kan ikke lige love at jeg bliver færdig i dag eller i morgen :-)

Forøvrigt når du skal kopiere koden ind, skal du højreklikke på den arkfane, den skal høre til og vælge Vis programkode. Kopier koden hertil.
Avatar billede jkrons Professor
31. december 2008 - 11:59 #5
Det var alligevel ret hurtigt, så her er en løsning. Du skal starte med at slette alle formlerne der er i prisgruppearket. Koden skal stadig være i Indtastningsarket.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c22:c26")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
    For Each c In Sheets("Regnskab").Range("a2:a45").Cells
        If c.Value = Fstnr Then
            Select Case Target.Address
                Case Is = "$C$22"
                    c.Offset(0, 2).Value = Target.Value
                Case Is = "$C$23"
                    c.Offset(0, 3).Value = Target.Value
                Case Is = "$C$24"
                    c.Offset(0, 4).Value = Target.Value
                Case Is = "$C$25"
                    c.Offset(0, 5).Value = Target.Value
                Case Is = "$C$26"
                    c.Offset(0, 6).Value = Target.Value
            End Select
        End If
    Next
End If
If Not Intersect(Target, Range("c7:c19")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
    For Each c In Sheets("Prisgrupper").Range("a2:a47").Cells
        If c.Value = Fstnr Then
            Select Case Target.Address
                Case Is = "$C$7"
                    c.Offset(0, 3).Value = Target.Value
                Case Is = "$C$8"
                    c.Offset(0, 4).Value = Target.Value
                Case Is = "$C$9"
                    c.Offset(0, 5).Value = Target.Value
                Case Is = "$C$10"
                    c.Offset(0, 6).Value = Target.Value
                Case Is = "$C$11"
                    c.Offset(0, 7).Value = Target.Value
                Case Is = "$C$12"
                    c.Offset(0, 8).Value = Target.Value
                Case Is = "$C$13"
                    c.Offset(0, 9).Value = Target.Value
                Case Is = "$C$14"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$C$15"
                    c.Offset(0, 11).Value = Target.Value
                Case Is = "$C$16"
                    c.Offset(0, 12).Value = Target.Value
                Case Is = "$C$17"
                    c.Offset(0, 13).Value = Target.Value
                Case Is = "$C$18"
                    c.Offset(0, 14).Value = Target.Value
                Case Is = "$C$19"
                    c.Offset(0, 15).Value = Target.Value
            End Select
        End If
    Next
End If
End Sub
Avatar billede jkrons Professor
31. december 2008 - 12:02 #6
Man kunne i øvrigt måske med fordel udvide din funktionalitet i arket, så du vlagte forestillingsnummeret, fra en oversigt over forestillinger i stedet for at indtaste det. Desuden kunne man rette, koden, så /indtastning/valg af en ny forestilling sikrede, at alle de oprindelige data i indtastningsarket slettes.
Avatar billede allanknudsen Nybegynder
31. december 2008 - 13:02 #7
Mange tak for den sendte løsning. Nu har jeg noget at arbejde videre på og lære af. Jeg har intet kendskab til VB. Men jeg regner med, at jeg kan kopiere din formel og ændre lidt i teksten og få det til at virke. Jeg skal have data lagert i "Prisgrupper", "Antal solgte pladser" og "Regnskab" samt ganget de respektive celler i "Prisgrupper" med "Antal solgte pladser" til "Billetsalg". Jeg håbet, at jeg har held med dette!!!
Der er blot et lille problem: "Indtastningsark" C7 bliver lagret i "Prisgrupper" D3, men skal være "C3".  Kan du hjælpe med denne rettelse.
Avatar billede jkrons Professor
31. december 2008 - 13:38 #8
Ret alle tal i den sidste omgang c.Offset 1 ned,

c.Offset(0, 3).Value = Target.Value

skal være

c.Offset(0, 2).Value = Target.Value

og så videre. Så skriver den de rigtige steder.
Avatar billede allanknudsen Nybegynder
31. december 2008 - 14:39 #9
Tusind tak for hjælpen. Jeg arbejder videre. Lukker sagen med point til dig.
Avatar billede vejmand Juniormester
31. december 2008 - 14:41 #10
allanknudsen >> En anden gang, husk at sende egne indlæg som "Kommentar" og ikke som "Svar".
"Svar" er tiltænkt løsningen, så der kan tildeles point for den hjælp man modtager.

Godt nytår.
Avatar billede allanknudsen Nybegynder
31. december 2008 - 14:47 #11
Hej vejmand. Tak for din oplysning. Man må lære så længe man lever.
Og til jkrons: Vil du sende et svar. Jeg kan ikke give dig point, sålænge du kun har kommentar.
Allan Knudsen
Avatar billede jkrons Professor
31. december 2008 - 15:52 #12
et svar :-)  og godt nytår.
Avatar billede allanknudsen Nybegynder
31. december 2008 - 16:00 #13
Hej jkrons
Det går ikke helt smertefrit.
Jeg kan ikke lagre tal fra indtastningsarket kolonne D i "Antal solgte pladser"
Kan du se, hvad der er forket i koderne:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c7:c19")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
    For Each c In Sheets("Prisgrupper").Range("a3:a47").Cells
        If c.Value = Fstnr Then
            Select Case Target.Address
                Case Is = "$C$7"
                    c.Offset(0, 2).Value = Target.Value
                Case Is = "$C$8"
                    c.Offset(0, 3).Value = Target.Value
                Case Is = "$C$9"
                    c.Offset(0, 4).Value = Target.Value
                Case Is = "$C$10"
                    c.Offset(0, 5).Value = Target.Value
                Case Is = "$C$11"
                    c.Offset(0, 6).Value = Target.Value
                Case Is = "$C$12"
                    c.Offset(0, 7).Value = Target.Value
                Case Is = "$C$13"
                    c.Offset(0, 8).Value = Target.Value
                Case Is = "$C$14"
                    c.Offset(0, 9).Value = Target.Value
                Case Is = "$C$15"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$C$16"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$C$17"
                    c.Offset(0, 12).Value = Target.Value
                Case Is = "$C$18"
                    c.Offset(0, 13).Value = Target.Value
                Case Is = "$C$19"
                    c.Offset(0, 14).Value = Target.Value
        End Select
        End If
    Next
End If
If Not Intersect(Target, Range("d7:d19")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
    For Each d In Sheets("Antal solgte pladser").Range("a3:a47").Cells
        If d.Value = Fstnr Then
            Select Case Target.Address
                Case Is = "$d$7"
                    c.Offset(0, 2).Value = Target.Value
                Case Is = "$d$8"
                    c.Offset(0, 3).Value = Target.Value
                Case Is = "$d$9"
                    c.Offset(0, 4).Value = Target.Value
                Case Is = "$d$10"
                    c.Offset(0, 5).Value = Target.Value
                Case Is = "$d$11"
                    c.Offset(0, 6).Value = Target.Value
                Case Is = "$d$12"
                    c.Offset(0, 7).Value = Target.Value
                Case Is = "$d$13"
                    c.Offset(0, 8).Value = Target.Value
                Case Is = "$d$14"
                    c.Offset(0, 9).Value = Target.Value
                Case Is = "$d$15"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$d$16"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$d$17"
                    c.Offset(0, 12).Value = Target.Value
                Case Is = "$d$18"
                    c.Offset(0, 13).Value = Target.Value
                Case Is = "$d$19"
                    c.Offset(0, 14).Value = Target.Value
            End Select
        End If
    Next
End If

End Sub

Tak, også et godt nytår
Avatar billede jkrons Professor
01. januar 2009 - 01:18 #14
Du skal ikke rette For Each c til For Each d, som du har gjort. C er ikke kolonnen, men en objektvariabel, som indeholder celleinformation. Desuden skal alle dine "d"referencer i den sidste del skrives med stort. VBA skelner mellem store og små bogstaver:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c7:c19")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
    For Each c In Sheets("Prisgrupper").Range("a3:a47").Cells
        If c.Value = Fstnr Then
            Select Case Target.Address
                Case Is = "$C$7"
                    c.Offset(0, 2).Value = Target.Value
                Case Is = "$C$8"
                    c.Offset(0, 3).Value = Target.Value
                Case Is = "$C$9"
                    c.Offset(0, 4).Value = Target.Value
                Case Is = "$C$10"
                    c.Offset(0, 5).Value = Target.Value
                Case Is = "$C$11"
                    c.Offset(0, 6).Value = Target.Value
                Case Is = "$C$12"
                    c.Offset(0, 7).Value = Target.Value
                Case Is = "$C$13"
                    c.Offset(0, 8).Value = Target.Value
                Case Is = "$C$14"
                    c.Offset(0, 9).Value = Target.Value
                Case Is = "$C$15"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$C$16"
                    c.Offset(0, 11).Value = Target.Value
                Case Is = "$C$17"
                    c.Offset(0, 12).Value = Target.Value
                Case Is = "$C$18"
                    c.Offset(0, 13).Value = Target.Value
                Case Is = "$C$19"
                    c.Offset(0, 14).Value = Target.Value
        End Select
        End If
    Next
End If
If Not Intersect(Target, Range("d7:d19")) Is Nothing Then
    Fstnr = ActiveSheet.Range("c1").Value
    For Each c In Sheets("Antal solgte pladser").Range("a3:a47").Cells
        If c.Value = Fstnr Then
            Select Case Target.Address
                Case Is = "$D$7"
                    c.Offset(0, 2).Value = Target.Value
                Case Is = "$D$8"
                    c.Offset(0, 3).Value = Target.Value
                Case Is = "$D$9"
                    c.Offset(0, 4).Value = Target.Value
                Case Is = "$D$10"
                    c.Offset(0, 5).Value = Target.Value
                Case Is = "$D$11"
                    c.Offset(0, 6).Value = Target.Value
                Case Is = "$D$12"
                    c.Offset(0, 7).Value = Target.Value
                Case Is = "$d$13"
                    c.Offset(0, 8).Value = Target.Value
                Case Is = "$D$14"
                    c.Offset(0, 9).Value = Target.Value
                Case Is = "$D$15"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$D$16"
                    c.Offset(0, 10).Value = Target.Value
                Case Is = "$D$17"
                    c.Offset(0, 12).Value = Target.Value
                Case Is = "$D$18"
                    c.Offset(0, 13).Value = Target.Value
                Case Is = "$D$19"
                    c.Offset(0, 14).Value = Target.Value
            End Select
        End If
    Next
End If

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