Avatar billede qln Juniormester
20. april 2005 - 13:13 Der er 21 kommentarer og
1 løsning

Læsning af forskellige filer og overførsel af data

Jeg har en række ark bygget op efter den samme template.
Fx.
Ark 1
Antal Type Produkt
2    A    XXX
3    B    YYY
2    A    YYY

Ark 2
Antal Type Produkt
2    A    ZZZ
3    B    YYY
2    A    YYY

Herudover har jeg et ark, som skal regne det samlede antal for alle typer og produkter.
Ark 3
    A B C D E ...
XXX
YYY
ZZZ
...

Jeg skal altså evt. vha. en makro kunne aflæse Ark1 og Ark2 og indsætte antallet for hver type og produkt i den rigtige celle i Ark3. Da den samme kombination af produkt og type indgår i mange forskellige ark(fx Produkt:YYY og Type:B) skal antallet af hvert ark lægges til hinanden, så jeg får resultatet i alt.
Avatar billede tobler Nybegynder
20. april 2005 - 13:53 #1
Prøv med denne i Ark3 celle B2, idet jeg går ud fra at ZZZ/YYY/ZZZ står i kolonne A2 til A4 ..., samt at A B C D E..., står i B1 til F1...:
=SUMPRODUKT((Ark1!$C$2:C$10=$A2)*(Ark1!$B$2:$B$10=B$1)*(Ark1!$A$2:$A$10))+SUMPRODUKT((Ark2!$C$2:C$10=$A2)*(Ark2!$B$2:$B$10=B$1)*(Ark2!$A$2:$A$10))
Avatar billede qln Juniormester
20. april 2005 - 14:01 #2
Den har jeg også selv tænkt på. Problemet er bare, at jeg ca har 100 ark og der kommer løbende flere til. Derfor bliver formlen alt for lang. Jeg skal altså være i stand til at aflæse alle arkene/filerne i en folder, og indsætte det samlede resultat i Ark3.
Avatar billede sjap Praktikant
20. april 2005 - 14:52 #3
Det lyder som en oplagt opgave for en database. Det kan (formodentligt) godt håndteres i Excel, men det vil være noget lettere i f.eks. Access.
Avatar billede tobler Nybegynder
20. april 2005 - 14:56 #4
---> sjap, Hvordan er hastigheden, hvis man lader Access gøre arbejdet, og præsenterer det i Excel? Hvad med referencer, lookups etc.?
Avatar billede sjap Praktikant
20. april 2005 - 14:58 #5
Uuuuh, det ved jeg ikke lige. Har ikke prøvet det. Men det drejer sig vel blot om at få importeret arkene i en (eller flere) tabeller, og så få lavet den forespørgsel, der laver summerne. Når data først er importeret går det ret hurtigt. Eksport tilbage til Excel er heller ikke noget problem.
Avatar billede sjap Praktikant
20. april 2005 - 15:13 #6
qln > Er det muligt for dig at placere en sumproduktberegning (som tobler foreslog, men i en ret forenklet udgave) på hver enkelt ark - så kan den samlede sum laves meget simpelt efterfølgende. Nærmere forklaring/beskrivelse følger, hvis det har din interesse.
Avatar billede qln Juniormester
20. april 2005 - 15:53 #7
Det tror jeg nok , der er mulighed for.
Jeg har selv tænkt på Access, men ville høre om det kunne lade sig gøre i Excel.
Avatar billede tobler Nybegynder
20. april 2005 - 15:58 #8
Så kunne du lave sumprodukt i de enkelte ark f.eks. i et område udenfor input (f.eks. U2), og derefter summe resultaterne sammen, i dit totalark.
Prøv med denne sum: =sum('Ark1:Ark100'!U2) som summer alle U2'er i arkene Ark1 til Ark100!
Avatar billede sjap Praktikant
20. april 2005 - 15:59 #9
Hvis du nu skriver følgende:

G1: A
H1: B
F2: XXX
F3: YYY
F4: ZZZ

G2: =SUMPRODUKT(($C$2:$C$500=$F2)*($B$2:$B$500=G$1)*($A$2:$A$500))

Formlen i G2 skal selvfølgelig tilpasses, så den passer til dine rækker (hvis du har mere end 500). Derefter kan du kopiere den til de øvrige celler. Du kan også lave flere overskrifter, og stadig bruge den samme formel.

Når du har gjort det, skal du så blot summe disse værdier i dit "total"-ark

=SUM(Ark1:Ark50!G2)
Avatar billede tobler Nybegynder
20. april 2005 - 16:07 #10
Dog kræver det regnekraft! Jeg sidder med et lignende projekt med en masse ark og indhold, ved seneste copy/replace stoppe tælleren ved 76206 celler, og derefter regnes der efter i ca. 3-4 min.
Derfor min interesse for en access løsning.
Avatar billede sjap Praktikant
20. april 2005 - 16:14 #11
Det lyder også som en frygteligt masse data - og så kan SUMPRODUKT godt gå hen at blive lidt "tung". Nu har jeg ikke lige prøvet med denne her opgave, men jeg har arbejdet med datasæt med ca. 150.000 poster, hvor en forspørgsel stadig foretages på få sekunder.

Det er selvfølgelig hardware-afhængigt. Jeg kan huske at jeg har haft en næsten fuld harddisk - og så går det langsomt! (blev dog løst med en komprimering af datafilen). Som med alle andre programmer, så drejer det sig om hurtig processor, masser af RAM og rigeligt med diskplads (intet nyt under solen).
Avatar billede qln Juniormester
20. april 2005 - 16:20 #12
I eksemplet i nævner har i mange ark(sheets) i den samme fil(book). Kan man i stedet sumere forskellige filer, der ligger i det samme bibliotek?
Avatar billede tobler Nybegynder
20. april 2005 - 16:20 #13
Maskinen er ikke problemet, det er sumprodukt med fire variabler og derefter summering i diverse totalark.
Avatar billede sjap Praktikant
20. april 2005 - 16:24 #14
gln > Ja, det kan du godt, men si vidt jeg ved, så slipper du ikke for at skulle skrive alle filnavnene - for du skal henvise til hver enkelt i din formel. Der findes ingen "smutvej" som findes ved en masse ark i den samme workbook - beklager.
Avatar billede sjap Praktikant
20. april 2005 - 16:31 #15
tobler > Har du Access? Det er (for det meste) rimeligt nemt at importere regneark til Access, selvom det godt kan være lidt "morsomt" hvis man skal gøre det fra flere forskellige ark, og lægge dem sammen i én tabel.

Men jeg vil da foreslå dig at prøve det. Måske med et begrænset antal data i første omgang - bare indtil du finder ud af hvordan det fungerer (og om du synes det fungerer for dig).
Avatar billede bak Forsker
20. april 2005 - 22:15 #16
gln -> det kommer an på din datastruktur. Hvis du kun har to kolonner i hver fil fx
Varenummer, Antal
kan du måske med fordel bruge Data/Konsolidering.
Avatar billede bak Forsker
20. april 2005 - 22:26 #17
tobler, her er en gammel model der samler alle data på alle ark, og indsætter dem samlet i arket "samle".
Hvis du bruger den, (med et par modifikationer), vil du kunne lave en pivottabel der indeholder det du ønsker.
Bemærk at "Samle" og Pivotarket skal ligge tilsidst

Sub test2()
Dim x As Integer
Dim r As Range
Dim wsNew As Worksheet
Set wsNew = Worksheets("Samle")
For x = 1 To Worksheets.Count - 2
  With Sheets(x)
    If x = 1 Then
      Set r = .Range("a1:C" & .Range("A65536").End(xlUp).Row)
      r.Copy wsNew.Range("A65536").End(xlUp)
    Else
      Set r = .Range("a2:C" & .Range("A65536").End(xlUp).Row)
      r.Copy wsNew.Range("A65536").End(xlUp).Offset(1, 0)
    End If
  End With
Next
End Sub
Avatar billede tobler Nybegynder
20. april 2005 - 22:58 #18
sjap, ja jeg har access og er igang med at samle materiale og tanker, for om det kan være en løsning.
bak, jeg har f.eks. 50 ark, et pr. kunde, som jeg parer med op til 200 forskellige varegrupper fra salgsstatistikken for 2005 og 2004, det udføres med en sumprodukt med 4 parametre.
Jeg leger nu med ideen om ved ændring/tilføjelse af kunde-nr, at kopiere sumprodukt-formlerne ind og efter endt opdatering lave en copy/pastevalue, så jeg slipper for alle genberegningerne.
Avatar billede bak Forsker
20. april 2005 - 23:14 #19
Så er min ide noget hurtigere. Makroer samler data hurtigt og hvis den samtidig definere et navn og på baggrund af dette opdater pivottabellen så er alt klaret i et snuptag.
Sumprodukt-formler æder meget hukommelse ....
Avatar billede bak Forsker
20. april 2005 - 23:43 #20
Denne her er ligeglad med hvor Ark Samle og Ark Pivot ligger.
Der opfrisker også pivottabellen.
Sjap-> du kan ikke køre den i xl97, du vil hænge i nederste linie :-)
se eks.  http://www.tbdl.dk/excel/samle_data.xls

Sub test3()
  Dim x As Integer
  Dim r As Range
  Dim wsNew As Worksheet
  Dim bFirstSheet As Boolean
  Set wsNew = Worksheets("Samle")
  wsNew.Cells.ClearContents
  bFirstSheet = True
  For x = 1 To Worksheets.Count
      With Sheets(x)
        If .Name = wsNew.Name Or .Name = "Pivot" Then GoTo jump
        If bFirstSheet = True Then .Range("A1:C1").Copy wsNew.Range("A1")
        bFirstSheet = False
        Set r = .Range("A2:C" & .Range("A65536").End(xlUp).Row)
        r.Copy wsNew.Range("A65536").End(xlUp).Offset(1, 0)
      End With
jump:
  Next
  wsNew.Range("A1", wsNew.Range("A65536").End(xlUp).Offset(0, 2)).Name = "Data"
  Sheets("Pivot").PivotTables("PivotTable1").PivotCache.Refresh
End Sub
Avatar billede sjap Praktikant
21. april 2005 - 17:17 #21
Jamen, så kører jeg ingen steder i dag :0)
Avatar billede qln Juniormester
04. maj 2005 - 13:37 #22
Bak:
Jeg er lidt rusten i det med makroer.
Jeg får følgende fejlmeddelelse, når min pivot-tabel skal opdateres:
Unable to get PivotTable property of the Worksheet class.
Jeg har lavet en pivot tabel, der svarer til mine data, så det har helt sikkert noget at gøre med dette. Det er sikkert en meget fundamental fejl.
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