Avatar billede maui Nybegynder
26. februar 2003 - 14:07 Der er 12 kommentarer og
1 løsning

Array

Hej!

Jeg har via ODBC hentet flg salgsdata fra indeværende år:
Varenr, Antal, pris og dato.

Disse data, bliver ved hjælp af Array-formel sorteret efter dato.
        Januar      Februar
Varenr  Antal  Pris  Antal  Pris
a       
b
c
d

Problemet med denne løsning er, at det tager en halv dag at opdatere, fordi den opdaterer samtlige måneder hver gang.

Kan man med VBA, lave en array-formel som kun opdaterer en måned? evt ved at skrive den ønskede måned i et felt.
Avatar billede janvogt Praktikant
26. februar 2003 - 14:23 #1
Du kan evt. lave en ny kolonne og beregne måneden v.h.a.
=MÅNED()
På baggrund af månedsværdien kan du så lave et avanceret filter for at få den måned du ønsker.
Avatar billede ciuspan Nybegynder
26. februar 2003 - 14:24 #2
Du kan i VBA lave en periode som string, se nedenfor.
Du laver er felt i excel hvor du indtaster start (B4) og slut dato (B6).
I mit eksempel på worksheet SETUP B4 og B6.

Inden selve makroen laver du disse dim linier.

Dim Start_Date As String
Dim End_Date As String
Dim ACCStartDate As String
Dim ACCEndDate As String

Sub Start()
'*******Henter dato fra "setup" sheet
ACCStartDate = Worksheets("Setup").Range("B4")
ACCEndDate = Worksheets("Setup").Range("B6")

'*******Formatere cellerne
ACCStartDate = "{d'" & Format(ACCStartDate, "yyyy-mm-dd") & "'}"
ACCEndDate = "{d'" & Format(ACCEndDate, "yyyy-mm-dd") & "'}"
Sub End

Sørg for at disse 2 linier er de før din makro
Sub Opdater()
Start_Date = ACCStartDate
End_Date = ACCEndDate
***SÅ MAKROEN HER
End Sub
***For at du får din afgrænsning til at virke skal du indsætte Start_Date og End_Date som range vist forneden. FX hvis jeg vil hente data fra Job Ledger Entry og Posting Date i perioden Start_Date og End_Date gør som vist nedenfor.

...& "WHERE (""Job Ledger Entry"".""Posting Date"" between " & Start_Date & " and " & End_Date & ")")

Dette vil tage date indefor den defineret periode.

Håber det hjælper...
Avatar billede bak Seniormester
26. februar 2003 - 15:08 #3
Gør som Jan skriver (indsæt måned) og lav det til en pivottabel.
Så kan du få det til at se ud nøjagtig som du beskriver.
Avatar billede bak Seniormester
26. februar 2003 - 15:26 #4
Avatar billede bak Seniormester
27. februar 2003 - 19:57 #5
Maui-> vis lige din nuværnde array-formel.
Måske skal den bare optimeres....
Avatar billede maui Nybegynder
03. marts 2003 - 09:52 #6
janvogt/bak, Jeg har prøvet jeres forslag og det kan bruges, men når jeg opdaterer fra ODBC, skal jeg manuelt opdatere kolonnen med måned.
min formel ser således ud:
SUM((GIT!$B$3:$B$610=$A5)*(GIT!$D$3:$D$610>=P$2)*(GIT!$D$3:$D$610<=P$3)*-GIT!$C$3:$C$610)
A5 = Varenr.
P2 = 1/1
P3 = 31/1
GIT!$C$3:$C$610 = Antal
Avatar billede janvogt Praktikant
03. marts 2003 - 09:58 #7
Ok, det ligner en opsumering af antal solgte stk. i januar på et bestemt varenummer. Var det egentlig det, du skulle have frem?

Hvis du bare markerer alle dine data, og laver en pivottabel, vil du også kunne få ovenstående oplysning frem, helt uden at lave nogle formler.
Avatar billede maui Nybegynder
03. marts 2003 - 10:08 #8
Jeg skal have salget fordelt på måneder. nu er vi i marts og jeg kan derfor opdatere februar. Jeg har ikke brug for at beregne januar igen, og heller ikke de kommende måneder.
Salget og prisen skal jeg regne videre på, og lave en graf.
Datamængden bliver større for hver måned, og den ekstra måneds kolonne skal derfor rettes hver gang, hvordan undgår jeg det?
Avatar billede janvogt Praktikant
03. marts 2003 - 10:37 #9
Du kan evt. bare kopiere månedsformlen ned i et antal rækker, der dækker hele året, hvis det altså ikke konflikter med din ODBC-opdatering.

Som sagt tror jeg, at det vil være nemmest, derefter at bruge en pivottabel, hvor du har mulighed for at vende og dreje dine data som du ønsker.
Avatar billede janvogt Praktikant
03. marts 2003 - 10:38 #10
.... som bak også foreslår.
Avatar billede bak Seniormester
03. marts 2003 - 11:41 #11
Nej maui, du skal ikke kopiere formlen måned ned.
Den skal bare eksistere i første linie af dine data.
Højreklik på dataområdet og vælg "egenskaber for dataområde"
Nederst i den form kan du sætte flueben i "Fyld formler nedad i tilgrænsende kolonner"
Avatar billede bak Seniormester
03. marts 2003 - 11:44 #12
Prøv iøvrigt med sumprodukt istedet.
Den er muligvis hurtigere.
SUMPRODUKT((GIT!$B$3:$B$610=$A5)*(GIT!$D$3:$D$610>=P$2)*(GIT!$D$3:$D$610<=P$3)*-GIT!$C$3:$C$610)
indtastes IKKE som arrayformel.
Avatar billede maui Nybegynder
03. marts 2003 - 19:36 #13
Jeg har arbejde lidt videre med pivot, men er løbet ind i et problem.
Jeg prøved at lave en makro, der viste den relevante måned i pivot, men den ændrede bare navnet på måneden i pivot-tabellen.

Sub Macro3()
  Sheets("Sheet5").Select
  ActiveSheet.PivotTables("PivotTable5").PivotFields("Måned").CurrentPage = _
  (Sheet5.Range("e1"))
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