Avatar billede 8718 Juniormester
20. januar 2007 - 16:30 Der er 19 kommentarer og
1 løsning

Hente en variabel i excel

Eks. på data:

GR    Konto    Kontotekst            Beløb
OMS    1    Omsætning Sjælland    100,00
VK    2    Varekøb Sjælland    200,00
OMS    3    Omsætning Jylland    100,00
KO    4    Kørsel Jylland            200,00
OMS    5    Omsætning Tyskland    300,00

Med funktionen SUM.HVIS har jeg summeret omsætningen på den overordnede gruppe ”OMS” til at være 500 kr.

Nu vil jeg så specificere omsætningen på kontoniveau, således at jeg automatisk får følgende resultat:


GR    Konto    Kontotekst            Beløb
OMS    1    Omsætning Sjælland    100,00
OMS    3    Omsætning Jylland    100,00
OMS    5    Omsætning Tyskland    300,00

Kan jeg det, og hvordan? (Hvis det kan lade sig gøre uden en VBA-løsning, så helst det..

(Hvis jeg bare får hjælp til kolonne 2 (konto), så kan jeg resten)
Avatar billede jqrn Mester
20. januar 2007 - 17:10 #1
Som jeg forstår problemet er det nemmeste at oprette et autofilter, der kan du så filtrere på gr=OMS og se de data du viser i det ønskede - du kan også summere de viste data.
Avatar billede 8718 Juniormester
20. januar 2007 - 17:20 #2
Ja - det vil nok være det nemmeste. Men da det er en regnskabsrapport, jeg er ved at lave, så er det ikke lige løsningen.
Avatar billede aidan Nybegynder
20. januar 2007 - 18:14 #3
I VBA kan det gøres med følgende makro, som laver en nye ark foran den nuværende, og indsætter hvad du vil have i øverste venstre del af arken.

Sub test()
    Dim CellCount As Integer
    Dim counter As Integer
    Dim Stamdata As Worksheet
    Dim Omsaet As Worksheet
    Dim CopyCount As Integer
   
    Set Stamdata = ActiveSheet
    CellCount = Range("KolGR").Cells.Count
   
    Set Omsaet = Worksheets.Add
   
    CopyCount = 1
    For counter = 1 To CellCount
        If Stamdata.Range("KolGR").Cells(counter) = "OMS" Or Stamdata.Range("KolGR").Cells(counter) = "GR" Then
            Range("KolGR").Cells(counter).EntireRow.Copy (Omsaet.Rows(CopyCount))
            CopyCount = CopyCount + 1
        End If
    Next
   
End Sub
Avatar billede aidan Nybegynder
20. januar 2007 - 18:17 #4
Man kan evt. lave en kommandoknap i arken til at gøre det. Det kræver at man først har markeret de celler i kolonne A, og givet dem navnet "KolGR".
Avatar billede aidan Nybegynder
20. januar 2007 - 18:53 #5
Jeg kunne forestille mig at ovenstående eksempel var meget simplificeret, og at der kunne være mange rækker der skal overflyttes.

Det kan gøres med følgende:

Sub FlytteOmsaetningTilNyArk()

    Dim CellCount As Integer
    Dim counter As Integer
    Dim Stamdata As Worksheet
    Dim Omsaet As Worksheet
    Dim CopyCount As Integer
    Dim myRange As Range
   
    Set Stamdata = ActiveSheet
 
    CellCount = Cells(1, 1).CurrentRegion.Rows.Count
    Set myRange = Cells(1, 1).CurrentRegion.Columns(1)
    Set Omsaet = Worksheets.Add
   
    CopyCount = 1
   
    For counter = 1 To CellCount
        If myRange.Cells(counter) = "OMS" Or myRange.Cells(counter) = "GR" Then
            myRange.Cells(counter).EntireRow.Copy (Omsaet.Rows(CopyCount))
            CopyCount = CopyCount + 1
        End If
    Next
   
End Sub

Jeg kan forstå at du ikke er så vant til VBA. For at køre en makro uden kommandoknap, skal man i menuen "Tools" (5 menu fra venstre - jeg sidder med en engelsk version af Excel) -> "Makro" -> "Makroer", og så vælge den der hedder FlytteOmsaetningTilNyArk. Og så klik på kør.
Avatar billede b_hansen Novice
20. januar 2007 - 19:56 #6
Som jeg forstår det, efterspørges der egentlig blot en mulighed for SUM.HVIS() med flere kriterier. Er dette tilfældet kan man bruge SUMPRODUKT(), idet denne summerer på baggrund af flere kriterier.
Avatar billede b_hansen Novice
20. januar 2007 - 19:58 #7
noget i stil med:
SUMPRODUKT((A2:A20)="OMS")*(C2:C20)="Omsætning Sjælland")*(D1*D20))
Avatar billede excelent Ekspert
21. januar 2007 - 07:18 #8
returnerer konto numre vedrørende OMS
=HVIS(ER.FJL(MINDSTE(HVIS($A$2:$A$14="OMS";RÆKKE($A$2:$A$14);"");RÆKKE(1:1)));"";INDIREKTE("B"&MINDSTE(HVIS($A$2:$A$14="OMS";RÆKKE($A$2:$A$14);"");RÆKKE(1:1))))
returnerer kontotekst vedr. OMS
=HVIS(ER.FJL(MINDSTE(HVIS($A$2:$A$14="OMS";RÆKKE($A$2:$A$14);"");RÆKKE(1:1)));"";INDIREKTE("C"&MINDSTE(HVIS($A$2:$A$14="OMS";RÆKKE($A$2:$A$14);"");RÆKKE(1:1))))
returnerer beløb vedr. OMS
=HVIS(ER.FJL(MINDSTE(HVIS($A$2:$A$14="OMS";RÆKKE($A$2:$A$14);"");RÆKKE(1:1)));"";INDIREKTE("D"&MINDSTE(HVIS($A$2:$A$14="OMS";RÆKKE($A$2:$A$14);"");RÆKKE(1:1))))

Fælles for alle 3 formler (array): indsæt og afslut med CTRL+SHIFT+ENTER
herefter kan de kopieres ned med fyldhåndtag så langt det er nødvendigt.
Formlerne tester i række 2-14, du har sikkert flere rækker, så ret 14 til aktuel
Avatar billede 8718 Juniormester
21. januar 2007 - 16:16 #9
Puh-ha. I har sat mig på lidt af en opgave!
Aidan – Det er virkelig lykkedes for mig, at få din makro ind i mit regneark. (Det sværeste var nu ikke at finde ud af at køre makroen, men at få den ind...).
Løsningen er sikkert rigtig smart – men den duer ligesom ikke rigtig til det, jeg er ved at lave. Se nedenfor.
For en uøvet, som mig, ville jeg have løst det ved at lave et filter, og så kopiere dataene til et nyt ark. Lidt mere besværligt end en makro, men samme effekt..

b hansen – Jeg kan ikke finde ud af din formel. Synes ikke rigtig, at den kan fungere.

excelent – I mit eksempel har jeg data fra A1:D6. Hvis jeg nu kopierer din formler ind i cellerne B20, C20 og D20 – så burde det da virke, ikk? Formlerne står ganske pænt i cellerne, men resultatet er blankt. Hvis jeg i dine formler udskifter ”” til ”x” bliver resultat x. Jeg må gøre noget forkert. Ved ikke lige, hvad du mener med, at jeg skal afslutte med CTRL+SHIFT+ENTER. Jeg har gjort det, men formlerne kommer jo pænt ind, når jeg trykker ”sæt-ind”

Som aidan ganske rigtig skriver, så er mit eksempel meget simplificeret. Eksemplet er et lille udsnit af en kontoplan/råbalance, som i forbindelse med afstemninger etc. tilføjes nye konti.
Grupperingen – f.eks. ”OMS” osv. bruges til en overordnet opstilling af regnskabet. Hver enkelt af grupperne skal således yderligere specificeres i noter, afstemninger o.lign. Og her vil det være relevant, hvis jeg i en celle f.eks. A1 - skriver ”OMS”, hvorefter jeg i rækkerne nedenfor fik listet alle de konti der hører til gruppen OMS. Eller for den sags skyld hvilken gruppe, jeg nu ønskede specificeret yderligere. Håber I forstår, hvad jeg mener.

Med Aidan’s makroløsning vil jeg ikke, som jeg ser det, få tilføjet nye konti efterhånden som de oprettes.
Avatar billede excelent Ekspert
21. januar 2007 - 16:31 #10
prøv at markere celle B20 - så skal formlen være omsluttet af 2 krøllede
parenteser = { formel }
hvis den ikke er det, så tast F2  herefter hold CTRL og SHIFT nede samtidig med du trykker ENTER
Avatar billede 8718 Juniormester
21. januar 2007 - 16:59 #11
Det var lige det, der manglende... Da jeg ikke helt ved, hvad der sker i din formel, har jeg valgt at lave formlen i C20 om til =LOPSLAG(B20;$B$2:$C$8;2;FALSK) og samme måde i D20. Det giver vel det samme? (men mere forståeligt for mig..)
Men jeg har stadig et problem: Jeg vil gerne have ændret din formel, så jeg kan skrive variablen "oms" i f.eks. celle B19 - på den måde vil jeg kunne bruge formlen til de andre grupperinger.
Og så lige et lille tillægsspørgsmål: Kan du på lidt pædagogisk vis fortælle - bare lidt om - hvad er det egentlig din formel gør. Hvis det er alt for kompliceret, så tager jeg til takke med svaret som det er.
Avatar billede excelent Ekspert
21. januar 2007 - 17:14 #12
ja når først du har kontonumrene, kan du godt bruge LOPSLAG til resten

her er formlen tilrettet værdi i celle B19 ( "OMS" udskiftet med B19 )

=HVIS(ER.FJL(MINDSTE(HVIS($A$2:$A$14=B19;RÆKKE($A$2:$A$14);"");RÆKKE(1:1)));"";INDIREKTE("B"&MINDSTE(HVIS($A$2:$A$14=B19;RÆKKE($A$2:$A$14);"");RÆKKE(1:1))))

Ja det er en kompliceret formel, som gav en del hovedbrud at få til at virke

den søger efter det mindste tal i kolonne B, hvor der samtidig står OMS i kolonne A
når du så kopierer formlen nedad, ændres RÆKKE(1:1) til RÆKKE(2:2) som indikerer at den nu skal finde den næstmindste tal i kolonne B osv.osv.
endelig er indsat en ER.FJL funktion som sikrer at når der ikke er flere tal med OMS i kolonne A, så vises en blank celle i stedet for ern #NUM fejl.
Avatar billede 8718 Juniormester
21. januar 2007 - 18:15 #13
Glæder mig, at mit spørgsmål kunne give hovedbrud for en ekspert :-) Men jeg kan love dig for, at resultatet kan spare meget tid, når jeg laver afstemninger/noter til en årsrapport. Det er faktisk en formidabel hjælp.

Men når "sandheden" skal frem, så arbejder jeg i ark: B-0. Min råbalance er i ark: B-1 og dataene i række 3:300. Gruppen er i kolonne A og kontonumrene i kolonne D. I ark B-0, celle A43 har jeg tastet det variable gruppenavn (OMS).

Jeg kan simpelthen ikke finde ud af, at rette din formel til, så den passer til mit regneark (fungerer fint i eksemplet). Kan du se, hvor fejlen ligger.

=HVIS(ER.FJL(MINDSTE(HVIS('B-1'!$A$3:$A$300='B-0'!$A$43;RÆKKE('B-1'!$A$3:$A$300);"");RÆKKE(1:1)));"";INDIREKTE("+'B-1'!D"&MINDSTE(HVIS('B-1'!$A$3:$A$300='B-0'!$A$43;RÆKKE('B-1'!$A$3:$A$300);"");RÆKKE(1:1))))
Avatar billede 8718 Juniormester
21. januar 2007 - 18:18 #14
PS. Det var en god og forståelig forklaring på hvordan formlen fungerer.
Avatar billede excelent Ekspert
21. januar 2007 - 18:54 #15
tror du skal ændre dine arknavne til B.0 og B.1
det ser ud til at formlen ikke accepterer B-0 og B-1

herefter skulle denne virke

=HVIS(ER.FJL(MINDSTE(HVIS(B.1!$A$3:$A$300=$A$43;RÆKKE(B.1!$A$3:$A$300);"");RÆKKE(1:1)));"";INDIREKTE("B.1!D"&MINDSTE(HVIS(B.1!$A$3:$A$300=$A$43;RÆKKE(B.1!$A$3:$A$300);"");RÆKKE(1:1))))
Avatar billede excelent Ekspert
21. januar 2007 - 19:44 #16
hvordan går det :-)
Avatar billede 8718 Juniormester
21. januar 2007 - 19:52 #17
Det går helt strålende :-) Kun mine hyperlink i regnearket gik i stykker ved omdøbningen af arkene. Men det er til at leve med.
Mht. formlen så fungerer den perfekt. Jeg har ændret formlen mht. $A$43, så den istedet refererer til kolonne a i den række hvor formlerne ellers står. Når der ikke er flere kontonumre i en gruppe, kan jeg lave respektive summer osv. Men når jeg så fortsætter til næste gruppe af kontonumre og kopierer formlen, så fortsætter den rækkenumrene (også selvom jeg kopierer fra den oprindelige første række med formler). Det betyder, at jeg lige skal huske at ændre formlen, så den starter med at tælle fra RÆKKE(1:1). Men det er bestemt til at leve med. Formlen er bare super super lækkert. Tildeler point nu, men fortæl mig lige hvordan jeg kan tildele flere point end jeg oprindelig gjorde i mit spørgsmål. (Det viste sig jo, at det ikke var et så enkelt spørgsmål!)
Avatar billede excelent Ekspert
21. januar 2007 - 19:58 #18
ok godt du fik det til at virke

jeg ved ærlig talt ikke hvordan man forhøjer point ud over at man kan
eller er det ok med de 30
Avatar billede 8718 Juniormester
21. januar 2007 - 20:05 #19
Se:

http://www.eksperten.dk/spm/757534

og TUSINDE tak for hjælpen
Avatar billede excelent Ekspert
21. januar 2007 - 21:04 #20
velbekom
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Kryptokustode til opbygning af Forsvarets nye IT-platform

Rambøll Management Consulting

Senior Software Engineer

Politiets Efterretningstjeneste

GenAI Specialist i PET