Avatar billede oyejo Nybegynder
15. marts 2004 - 09:13 Der er 18 kommentarer og
1 løsning

Hjelp til elegant vba-kode for å overføre data

Hver måned får jeg 13 csv-filer med data;  a.csv,    b.csv,  c.csv, …

7 av csv-filene har innbyrdes samme antall rader.  ca 720, varierer fra måned til måned.
De andre 6 csv-filene har også innbyrdes samme antall rader, ca 60. varier fra mnd til mnd.
Antall kolonner kan være forskjellig fra fil til fil, men en fil har samme antall kolonner hver måned.

Ved hjelp av vba-kode blir alle disse data lagt til 13 tabeller.
Så langt er alt greit. J

Så skal data fra disse tabellene overføres til 164 tabeller.
Tabellene skal ha fra 1 til 10 kolonner.

Dette har jeg nå løst ved hjelp av en Select Case setning inne i en For Next setning.
Men en Select Case setning med 164 ”caser” er mye arbeid.

Er det en mer elegant måte å løse problemet på?
Tabeller i Array?
Bruk av pointer?

Ps! Min løsning med Select Case fungerer utmerket,
så jeg er kun ute etter en enklere, mer elegant løsning!

Har satt antall points til 30, men en god løsning får 60 ;-)
Avatar billede oyejo Nybegynder
15. marts 2004 - 12:23 #1
Det jeg er ute etter, et noe lignende.

Dim Tab1, Tab2, ..

For i = 1 To 164
Tabi = .....
Next

Jeg vet at denne løsningen ikke er mulig,
men kansjke en lignende løsning er mulig?
Avatar billede martin_moth Mester
15. marts 2004 - 15:31 #2
Forstår ikke helt - prøv at vise (en lille del af ) din select case, så bliver jeg nok klogere
Avatar billede oyejo Nybegynder
15. marts 2004 - 15:37 #3
Select Case vIndexTabTil(j)
        Case 1
            vTabDriftTime = vTempTab
        Case 111
            vDriftSub1Pwr1 = vTempTab
        Case 112
            vDriftSub1Pwr2 = vTempTab
        Case 113
            vDriftSub1Pwr3 = vTempTab
        Case 114
            vDriftSub1Pwr4 = vTempTab
Avatar billede oyejo Nybegynder
15. marts 2004 - 15:40 #4
Slik fortsetter det i 164 "caser"
Avatar billede kabbak Professor
16. marts 2004 - 10:25 #5
Dim Tab1(164) as variant

For i = 1 To 164
Tab1(i) = .....
Next

du kan da godt gøre sådan
Avatar billede oyejo Nybegynder
16. marts 2004 - 15:34 #6
Hei kabbak
Kan jeg gjøre det slik, selv om tabellene har ulik dimmenson?
Avatar billede kabbak Professor
16. marts 2004 - 15:42 #7
Nu er jeg ikke lige med i, hvad du vil bruge variablen  til, men du får jo variablen ind i Tab1(i).

Vil du bruge den i stedet for Select Case. ?
Avatar billede oyejo Nybegynder
16. marts 2004 - 15:52 #8
kabbak
variabelen er en tabell. (array)
beklager hvis jeg har vært uklar :-)
Avatar billede kabbak Professor
16. marts 2004 - 22:40 #9
Public Sub TabelTest()
Dim Tabel(164) As Variant
For i = 1 To 164
Tabel(i) = Range("Tabel" & i)
Temp = Tabel(1)(1, 1)
Next
End Sub

Jeg har navngivet alle 164 tabelområder og kaldt dem Tabel1, Tabel2 o.s.v. til Tabel164.

Ved at køre makroen, bliver alle 164 tabeller indlæst i hukommelsen.

  Tabel(1)(1,1) = værdien fra Tabel1, første række, første kolonne
  Tabel(1)(1,2) = værdien fra Tabel1, første række, anden kolonne

o.s.v

  Tabel(164)(1,1) = værdien fra Tabel164, første række, første kolonne


Håber det kan bruges.
Avatar billede kabbak Professor
16. marts 2004 - 22:41 #10
fjern denne linie, det var til en test.
Temp = Tabel(1)(1, 1)
Avatar billede oyejo Nybegynder
17. marts 2004 - 07:14 #11
fantastisk kabbak!
da mangler bare et lite svar, så kommer velfortjente point's :-)

Hva er det som skjer på denne linjen?
Tabel(i) = Range("Tabel" & i)
Avatar billede kabbak Professor
17. marts 2004 - 08:05 #12
Tabel(i) = Range("Tabel" & i)

Der indsætter den det navngivne område 'Tabel & i' i arryet

Hvis i = 20 er det området 'Tabel20' der indsættes,

der kunne også været skrevet sådan:

Tabel(i) = sheets("Ark1").Range("A1:F300")

men så forsvinder automatikken i løkken.

Husk at hvis du skal tilføje data til disse tabeller, er det nemmeste at tage, en del tomme rækker med i de navngivne områder.
Avatar billede oyejo Nybegynder
17. marts 2004 - 08:09 #13
Flott,
Siste spørsmål. Hvordan endrer jeg pointen fra 30 til 100?
Avatar billede oyejo Nybegynder
17. marts 2004 - 08:46 #14
Hei kabbak
30 point ble for lite for dette svaret.
Du finner flere points her:
Takker så mye for hjelpen :-)

http://www.eksperten.dk/spm/478300
Avatar billede kabbak Professor
17. marts 2004 - 08:47 #15
Det var nu ikke nødvendig, har du kørt test.?
Avatar billede kabbak Professor
17. marts 2004 - 08:51 #16
Tak for pointz ;-))
Avatar billede oyejo Nybegynder
17. marts 2004 - 09:13 #17
Det er jeg som skal takke.
Rekker nok ikke å teste koden i dag.
sender en liten kommentar når jeg har prøvd koden.
Avatar billede oyejo Nybegynder
17. marts 2004 - 14:40 #18
kabbak
Har prøvd koden på en liten del av programmet, det fungerer perfekt :-)

Du har vel ikke et lite triks, for å kopiere hele kolonner
fra en tabell til en annen også?

Men... man må vel ta celle for celle.
Tror jeg har spurt om det før.
Nå benytter jeg:
 
For i = 1 To UBound(vTabFra, 1)
      vTempT(i, x) = vTabFra(i, y)
Next
Avatar billede kabbak Professor
17. marts 2004 - 20:46 #19
Nej jeg har ikke et triks til at fange en hel kolonne, i en variabel
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