06. juli 2009 - 22:54Der er
13 kommentarer og 1 løsning
gange tal fra to forskellige tabeller med flere kriterier - hjælp!
Jeg har brug for en formel der ud fra min. 2 kriterier kan finde dem tallene i en tabel og gange med tallene i en anden tabel der opfylde samme kriterier.
Jeg har konstrueret en meget simplificeret udgave af mit problem:
Der er 2 tabeller ved siden af hinanden med fælles y-akse (afdeling 1,2 og 3) hvor tabel 1 repræsenterer salget med x-aksen Jan, Feb og Mar. Tabel 2 repræsenterer produkt splittet og har produkterne på x-aksen aa, bb og cc.
Salget i DKK Produkt split i % afdeling Jan Feb Mar aa bb cc 1 2 3 osv ...
Hvordan skal formlerne se ud i tabellen nedenfor når kriterierne f.eks. er afdeling 1 og 3?. Resultatet viser salget for de enkelte produkt. I skal forestille jer at der i virkeligheden er flere afdelinger og produkter.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Nu er jeg ikke klar over hvilken version af Excel du bruger (sprog og version), her har jeg prøvet at lave formlen som du kan anvende.
Det er lidt svært at beskrive med tekst, men jeg prøver ;0)
Antager vi at du har listet som først beskrevet i spsm, og måneder starter i B1, Produkter starter i E1, og afdelinger starter i A2, data ligger i cellerne B2:G6, og yderligere at afdelingerne du vil hente data til står i cellerne B9 og B10 (en afd i hver): Følgende er en lang formel vist på 4 linier UK: =HLOOKUP(B$12;$B$1:$D$6;MATCH($B$9;$A$1:$A$6;0);FALSE)* HLOOKUP($A13;$E$1:$G$6;MATCH($B$9;$A$1:$A$6;0);FALSE)+ HLOOKUP(B$12;$B$1:$D$6;MATCH($B$10;$A$1:$A$6;0);FALSE)* HLOOKUP($A13;$E$1:$G$6;MATCH($B$10;$A$1:$A$6;0);FALSE)
Det er super smart det du foreslår og det kan jeg helt sikkert bruge. Før jeg så dit svar havde jeg en ide om at vi skulle ud i en matrix formel med tryk på shift+ctrl+enter.
Et lille tillægsspørgsmål; hvis vi forestiller os at kriterierne øges fra 2 to f.eks. 10 eller flere så ville formlen blive meget lang. Findes der en løsning hvor referencen til $B$9 og $B$10 sker via funktionen "søg" eller en anden funktion hvor hele kriterieområdet markeres?
StoreStygge: Jeg har faktisk lige opdaget at når jeg lader en afdeling forekomme mere end 1 gang i kolonnen med afdelinger kan formlen ikke finde ud af at lægge dem sammen :-\ Jeg har selv forsøg at ændre vopslag med sum.hvis men det fungerer ikke.
Det er selvfølgelig min fejl da jeg ikke har forklaret det ordentligt fra starten men det er faktisk ret afgørende i min problemstilling da afdelingerne faktisk kan forekommer mere en end gang.
Håber du stadig har mod på at kigge på det når du får tid.
OK, det har jeg kun gjort meget lidt i, men ville meget gerne lære mer, så hvis du har tid og lyst må du meget gerne skrive nogen koder jeg kan lege med.
Jeg vil kunne spare mange arbejdstimer hvis dette kommer til at virke :o)
Antager vi at du har listet som beskrevet: Måneder starter i B1, Fordeling starter i G1, og Afdelinger starter i A2, Data ligger i cellerne B2:L15, og yderligere at Afdelingerne du vil samle står i cellerne B25:B28(en afd i hver)
Resultatområdet har: Måneder vandret startende i B17 Fordeling lodret startende i A18
Funktionen indsættes i celle B18 således:
=GetProductData($A$1:$L$15;B$17;$A18;$B$25:$B$28)
og efterfølgende kopieres formlen til alle øvrige resultatceller
KODEN:
Function GetProductData(DataKildeMedOverskrifter As Range, _ SalgPeriode As Range, FordelingKode As Range, _ AfdelingKriterier As Range) '************************************************************************* ' Kode udarbejdet på forespørgsel under EKSPERTEN.DK ' af Store Stygge ' DataKildeMedOverskrifter : område med data og række/kolonneoverskrifter ' SalgPeriode : overskrift måned i resultattabellen ' FordelingKode : overskrift Fordelingskode i resultattabellen ' AfdelingKriterier : område indeholdende afdelinger der skal summeres '*************************************************************************
Dim curResult As Currency ' resultat variabel Dim rngItemAfdeling As Range ' cellereference som anvendes til gennemløb af afdelinger Dim colPeriode As Long ' periode kolonnenummer i datakilde Dim colFordeling As Long ' fordelingskolonne i datakilde Dim rowAfdeling As Long ' række for aktuel afdeling ved gennemløb Dim rngCurrent As Range ' cellereference som anvendes til at sammenligne indhold ' fejl håndtering On Error GoTo errHandling
' indstiller startcelle og startværdi Set rngCurrent = DataKildeMedOverskrifter.Cells(1) colPeriode = 1
' find periodekolonne Do Until rngCurrent.Value = SalgPeriode.Value Set rngCurrent = rngCurrent.Offset(0, 1) colPeriode = colPeriode + 1 Loop
' indstiller startcelle og startværdi (kunne fortsættes, men bedre at genstarte) Set rngCurrent = DataKildeMedOverskrifter.Cells(1) colFordeling = 1
' find fordelingskolonne Do Until rngCurrent.Value = FordelingKode.Value Set rngCurrent = rngCurrent.Offset(0, 1) colFordeling = colFordeling + 1 Loop
' gennemløb for hver afdeling der skal samles data for For Each rngItemAfdeling In AfdelingKriterier rowAfdeling = 0 ' checker hver række i datakilde kolonne 1 For Each rngCurrent In DataKildeMedOverskrifter.Columns(1).Cells rowAfdeling = rowAfdeling + 1 ' hvis række afdeling = aktuel afdeling fra listen If rngCurrent.Value = rngItemAfdeling.Value Then ' summer produktet med allerede summerede curResult = curResult + _ DataKildeMedOverskrifter.Cells(rowAfdeling, colPeriode) * _ DataKildeMedOverskrifter.Cells(rowAfdeling, colFordeling) End If Next Next
' returnerer resultatet til cellen GetProductData = curResult
' hvis fejl returneres #I/T til cellen errHandling: If Err.Number <> 0 Then 'MsgBox "Der er desværre opstået en fejl med kode og beskrivelse:" & vbCr & _ Err.Number & vbCr & _ Err.Description & _ "#I/T Returneres til cellen", vbCritical, "Funktions fejl" GetProductData = CVErr(xlErrNA) End If
Det ser godt nok smart ud! Jeg har nu gjort som du siger men felterne i resultattabellen siger "#navn?"
Jeg har højreklikket på arket og klikket på "Vis programkode". Herefter "Insert" og "Module" og kopieret KODEN ind. Hvad har jeg mon gjort galt? Vil du sende mig en kopi af regnearket på lasse@helver.dk
Sidder og eksperimentere lidt med koderne og forsøger at indsætte en kolonne B lige ved siden af afdelingerne som indikerer enten Produktion eller Udvikling for den enkelte afdeling. Kriteriet P eller U vil jeg definere i $C$25.
Din formel vil jeg ændre til: =GetProductData($A$1:$L$15;B$17;$A18;$B$25:$B$28;$C$25) og jeg tilføjer følgende i koden: ProUdv as Range
Kan du fortælle mig hvordan jeg skal udvide dit lille program for at den tager højde denne ekstra kolonne med Produktion eller Udvikling?
Er der andre der evt kan bidrage? Hvis jeg på nogen måde kan betale med point gør jeg gerne det...men hvordan gøres det?
/L
Synes godt om
Ny brugerNybegynder
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.