Avatar billede tonnym Nybegynder
27. august 2004 - 10:35 Der er 26 kommentarer og
1 løsning

Excel med Lopslag - kan man hente data fra en tabel i Access?

Hej,

Jeg har efterhånden med stor success lavet flere rapporter i excel, der benytter Lopslag som hoved formel.

Jeg er dog stødt på et problem, nemlig datamængden.

1 ting er at jeg har mangle sheets med mange Lopslag felter, noget andet et så når dataen skal hentes fra et andet ark.

Pt. bruger jeg VBA til at importere nogle data til et excel ark der agere som data kilde. (jeg tilpasser dataen så Lopslag funktionen kan bruges via VBA)

Her er excelfilen nu på ca. 60mb, hvilket må siges at være en pæn størrelse. Dette betyder at det tager utrolig lang tid at arbejde med filerne.
Jeg spekulere derfor på om der var en mulighed for i Lopslag funktionen at hente data fra en MS Access database?

Alternativt om der er nogen som har haft et lign. problem men fået det løst via noget formel optimering af en slags.

Giv et bud, alt kan føre til en løsning ;o)
Avatar billede tonnym Nybegynder
27. august 2004 - 10:36 #1
Jeg skulle måske lige tilføje at jeg ikke er den helt store VBA haj, jeg forstår at læse koden, men bruger ofte makro indspilning og tilretter så bagefter koden til mine behov...
Blot så i kender til mit VBA niveau.
Avatar billede mugs Novice
27. august 2004 - 11:47 #2
Du kan ikke benytte LOPSLAG til at hente data fra Access.

Du kna i menuen Data > Hent eksterne data hente data fra Access. Din datakilde kan så begrænse importerede data ved hjælp af en forespørgsel i Access eller i selve MSquery.
Avatar billede tonnym Nybegynder
27. august 2004 - 13:09 #3
Yupper, den metode benytter jeg i andre sammenhæng. Men den betyder så igen stadig at jeg har en stor datamængde i excel, som jeg mistænker for ikke at være speciel god til sådanne datatabeller.
Avatar billede bak Forsker
27. august 2004 - 15:17 #4
hvordan bruger du opslagsfunktionen i vba..
s'føli er det muligt at slå op i access også fra vba.
det vil nok være langsommere, men du vil kunne undså datamængden.
60 MB er en meget stor fil og min erfaring er at jo større fil jo større risico for at den går ned.
Prøv at vise hvad du gør idag.. (kode)
Avatar billede tonnym Nybegynder
27. august 2004 - 17:29 #5
Ah ja det kan misforstås, jeg bruger Lopslag i excel, men via VBA får jeg tilpasset dataen således at jeg i excel kan benytte Lopslag.

Idag benytter jeg VBA til at manipulere rundt med mine kilde data, således at jeg får et key id jeg kan slå op. Tillige benytter jeg VBA til at danne tabellerne således jeg altid har det nøjagtige data område at slå op i.

Noget som måske også er lidt killer for excel er at jeg benytter en Lopslag formel til at addere med en anden Lopslag formel, altså jeg finder et opslag, som så skal plusses med et andet.

Det er sådan lidt kringlet, og der findes nok ikke et 100% svar på det jeg leder efter, men jeg søger en effektiv og gerne acceptabel hurtig måde at hive data ud på.

Jeg har spekuleret lidt på om det måske var bedre at lave rapporten helt i Access, og så lave en "print" version også som kunne exporteres til excel for videre bearbejdning i såtilfælde at det ønskes.

Der må jo unægteligt komme et punkt hvor det bliver helt umuligt for Excel at behandle de data.
Avatar billede bak Forsker
27. august 2004 - 17:51 #6
Jeg er enig i at så mange data bedst hånteres i access, og ville helt klart også smide mine rådata der og lave mine queries der.
Alt rapport og præsentation ville jeg overlade til excel :-)

Jo før, du kommer igang, jo bedre.

Se lige denne side http://www.decisionmodels.com/memlimits.htm

Da jeg ikke ved hvad du gør er det lidt svært at hjælpe, men det er ikke noget problem at hive data ud af access og få dem manipuleret som man ønsker.
Avatar billede kabbak Professor
27. august 2004 - 20:51 #7
Jeg ved ikke om jeg er tosset, men når jeg har en Access database åben, med tabellen i, samtidig med Excel, så fungerer denne lille kode i excel.

Jeg har en tabel 'tb1' med felterne [Medlemsnr]  [Adresse] [Postnr]


I excel har jeg reference til Microsoft Access 9,0 object library

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
' Medlemsnummer i kolonne A

'tbl1
'    Medlemsnr  Adresse Postnr
Dim varX As Variant
varX = DLookup("[Adresse]", "tbl1", "[Medlemsnr] =" & Target.Value)
Cells(Target.Row, 5) = varX
End If
End Sub
Avatar billede bak Forsker
27. august 2004 - 22:41 #8
tror ikke du er så tosset endda, kabbak... :-)
det ser jo ud til at virke, når access er åben.
rigtig godt gået...
Avatar billede tonnym Nybegynder
27. august 2004 - 23:59 #9
Ok der blev det lige en tand for prof. ;o)

1. hvordan sætter man den reference op?
2. hvordan får man den vba kode til at virke? den danner jo ikke nogen makro?

Det er midnat, jeg er forkølet og som sagt ikke en vild vba haj, så bare slå mig hvis jeg er helt tabt :P

Jeg kiggede i help, men kunne ikke finde noget omkring object libary der kunne bruges, kun noget om shared web point?!?
Avatar billede mugs Novice
28. august 2004 - 00:06 #10
referencer:

Du skal ind i VBA-editoren > Tools > References. Her browser du ned igennem dine biblioteker finder Access og sætter et checkmærke i boksen i venstre side.
Avatar billede tonnym Nybegynder
28. august 2004 - 00:11 #11
Det som jeg gør er at sætte en pæn layout op i excel.
Dette layout er så også bestemmende for hvilke data som hentes fra min data excel fil.
F.eks. hvis jeg har en virksomhed A B C på række, og hver virksomhed har produkt 1 2 3 4 ned af, så vil Lopslag finde pris på produkt 1 for virksomhed A osv.
Det er sådan basalt set hvad jeg forsøger og gør. Problemet opstår så når jeg har 10 virksomheder og 200 produkter, på 12 sheets. Og så yderligere når nogle produkter kræver to opslag for at finde prisen.
Det gør to ting:
1. kilde filen skal være åben ellers dør excel når man opdatere
2. datafilen er forbandet stor pga. data kommer fra en anden rapport som jeg ikke umiddelbart kan beskære til kun at indeholde de datalinier jeg har behov for.

Sidste gang jeg skulle rette stien til datafilen erstattede jeg 25800 felter ca. så der er en del at opdatere hver gang man åbner filen.

Datafilen er jeg så begyndt at have problemer med, jeg skal åbne og lukke filerne i en bestemt rækkefølge, ellers dør excel. Går ud fra at det er noget med at den opdatere data inden filen gemmes og lukkes.

Hvis det hele er noget ævl, skal jeg forsøge at forklare det igen imorgen hvor jeg måske er lidt mere frisk.
Avatar billede tonnym Nybegynder
28. august 2004 - 00:13 #12
Tak Mugs, der fandt jeg den.

Har du en let forklaring til kode delen?
Avatar billede tonnym Nybegynder
28. august 2004 - 00:16 #13
Wuhuu jeg tror jeg fandt løsningen.

Så er det bare på jagt efter mere viden omkring den type vba kodning :)
Avatar billede mugs Novice
28. august 2004 - 00:31 #14
Du har tidligere skrevet:

"2. hvordan får man den vba kode til at virke? den danner jo ikke nogen makro?"

Jeg har ikke meget forstand på Excel, men vil dog gerne klomme med flg.:

Når du indspiller en makro, foretager du en række handlinger med musen. Disse handlinger "oversættes" til VBA. Og det er denne VBA-kode der afspilles når du kører en makro.

En simpel makro:

Range("F7").Select
    ActiveCell.FormulaR1C1 = "hej"
    Range("F8").Select

Er lavet ved blot at flytte markøren til celle F7, skrive hej og gå til celle F8. Når du vælger at redigere makroen, kommer du ind i VBA-editoren og kan omskrive din makro.
Avatar billede kabbak Professor
28. august 2004 - 00:39 #15
Den stump kode jeg skrev skal ligge i arkets modul.

Det finder du ved at højreklikke på arkfanen og vælg vis programkode

Det er selfølgelig det ark hvor du taster i og vil have resultatet.

Koden udføres hver gang der sker ændringer i en celle i kolonne A

DLookup("[Feltet der skal retuneres]", "Tabellens navn", "[Feltets navn som skal passe med kriterie] =" & Target.Value)

Target.Value er værdien eller teksten i cellen som skrives i.


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then' Medlemsnummer i kolonne A

'tbl1
'    Medlemsnr  Adresse Postnr
Dim varX As Variant
varX = DLookup("[Adresse]", "tbl1", "[Medlemsnr] =" & Target.Value)
Cells(Target.Row, 5) = varX ' skriver resultatet i samme række i kolonne 5
End If
End Sub
Avatar billede kabbak Professor
28. august 2004 - 00:45 #16
Man kan lave flere under hinanden

Private Sub Worksheet_Change(ByVal Target As Range)
Dim varX As Variant
If Not Intersect(Target, Range("A:A")) Is Nothing Then
varX = DLookup("[Adresse]", "tbl1", "[Medlemsnr] =" & Target.Value)
Cells(Target.Row, 5) = varX ' skriver resultatet i samme række i kolonne 5
varX = DLookup("[Postnr]", "tbl1", "[Medlemsnr] =" & Target.Value)
Cells(Target.Row, 6) = varX ' skriver resultatet i samme række i kolonne 6
End If

If Not Intersect(Target, Range("B:B")) Is Nothing Then' varenummer i Kolonne B
varX = DLookup("[Varetekst]", "tbl2", "[Varenr] =" & Target.Value)
Cells(Target.Row, 3) = varX ' skriver resultatet i samme række i kolonne 3
End If
End Sub
Avatar billede kabbak Professor
28. august 2004 - 01:17 #17
Her er den som Function
Den skal ligge i et modul og ikke i et arkmodul


Public Function HentFraDatabase(SøgeFeltNavn As String, Kriterie As Range, TabelNavn As String, ReturFeltNavn As String) As Variant
Dim varX As Variant
varX = DLookup(ReturFeltNavn, TabelNavn, SøgeFeltNavn & " =" & Kriterie.Value)
HentFraDatabase = varX
End Function

Kaldes med

=HentFraDatabase("Medlemsnr";A1;"tbl1";"adresse")

=HentFraDatabase("Feltet der søges i";Hvad skal findes;"Tabellens navn"; "feltet som skal retuneres")
Avatar billede tonnym Nybegynder
28. august 2004 - 10:16 #18
Jeg sidder og tænker på om det måske var muligt via noget ODBC at kalde tabellen frem, således at man ikke skal have Access åben?

I øvrigt tror jeg det er på tide at få delt lidt points ud ;o)
Avatar billede tonnym Nybegynder
28. august 2004 - 10:16 #19
Jeg kan desværre først rigtigt teste det på mandag, når jeg kommer på arbejde igen. Men jeg skal nok sige om det er noget der kan bruges på en 25000+ felter :o)
Avatar billede kabbak Professor
28. august 2004 - 20:48 #20
jeg har noget her, som du måske kan finde noget i.

http://eksperten.dk/spm/482511
Avatar billede bak Forsker
28. august 2004 - 21:13 #21
hvorfor ikke lægge dine 25000+ records over i access også, køre en query der på begge tabeller og trække resultat over i excel ?
Det må absolut være det hurtigste
Avatar billede tonnym Nybegynder
29. august 2004 - 21:41 #22
Jeg tror at Kabbak's link er det rigtige for mig også.

Det må jo så også være det samme som du foreslår Bak?

Mit problem hidtil var at den eneste måde jeg kunne finde ud af at få data over fra Access til Excel var via en query der dannede en tabel i excel. Det kunne måske minimere mine data lidt, men det ville så kræve 1 opdatering mere og ca. ende med samme opdateringstid som før.

Men derimod at kunne køre en query fra Excel som henter kun de felters data over som behøves, tja forhåbentlig giver det hurtigere opslag da tabellen nu er i en "rigtig" database, og der skal stadig kun opdateres en gang.

Jeg vil forsøge at teste det mandag, og give et feedback på om det var det for mig.

Men i hvert fald er det et svar på det jeg spurgte efter, nemlig et alternativ til Lopslag! Så hvis i vil have nogle points så smid et svar :o)
Avatar billede mugs Novice
29. august 2004 - 21:45 #23
Nu har jeg ikke fulgt med i den seneste forslag, men er du interesseret kan jeg sende dig en testdb i Access der viser, hvordan du kan eksportere data fra Access til Excel. Blot læg din e-mail.

Jeg tror du fokuserer for meget på at have excel åbent og foretage dine "operationer" her. Tænk lidt anderledes og prøv at lav en db i Access og eksporter til Excel.
Avatar billede tonnym Nybegynder
29. august 2004 - 22:31 #24
Jeg ved godt hvordan jeg eksportere data fra access til excel, enten via en query i excel eller en linket tabel f.eks.

Jeg har tidligere programmeret i Access og lavet diverse rapporter mv. der, og tror til syvende to sidst også at det bliver der jeg ender ud på et tidspunkt, og så simpelt hen blot laver en eksport makro til excel hvis folk ønsker at videre behandle de data rapporten giver. Det er sidst nævnte som er grund til at jeg har layout i Excel idag, nå ja og så måske lidt fordi min access viden er lidt rusten efter hånden ;o)
Avatar billede kabbak Professor
29. august 2004 - 22:33 #25
ok, så får du et svar, men jeg vil gerne dele med de andre. ;-))
Avatar billede mugs Novice
29. august 2004 - 22:35 #26
enten via en query i excel eller en linket tabel f.eks

eller som en forespørgsel i Access eller en VBA-procedüre.
Avatar billede kabbak Professor
30. august 2004 - 17:33 #27
Tak for point.

prøv at se her også.

http://www.ozgrid.com/forum/showthread.php?t=23173
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