Avatar billede busch-jensen Nybegynder
15. november 2002 - 16:00 Der er 12 kommentarer og
1 løsning

Vende data - fra lodret til vandret EXCEL/ACCESS import

Hejsa

Jeg har en liste med adresser i Excel. Alle data står i kolonne A og nedaf:

Adresse1
Postnummer
telefon
telefax
mail
etc.

Disse data skal importeres i en Access database, og det gør jeg vel lettest ved at få vendt data i regnearket, så det ser således ud:

Adresse1, postnummer, telefon, etc....

Så er det nemlig ligetil at importere data til Access, men hvordan får jeg vendt data i regnearket?

Alternativt kunne jeg godt tænkte mig et tip til, hvordan jeg importere data som formateret øverst - direkte til en tabel i Access.

Mvh
Busch-Jensen
Avatar billede knightmare Nybegynder
15. november 2002 - 16:27 #1
Vælg de celler i kolonnen du vil vende - tryk på højre tast og kopier

Vælg den celle hvor rækken skal startes - højre musetast og indsæt speciel - vælg transponer - så bliver kolonnen til en række

Husk at der skal være frie celler hvor du kopierer til

Knightmare
Avatar billede busch-jensen Nybegynder
15. november 2002 - 16:33 #2
Ok... men den siger, at de to områder ikke passer sammen i størrelse.
Avatar billede bak Forsker
15. november 2002 - 16:36 #3
Du skal kun markere en celle, der hvor du vil sætte dem
Avatar billede busch-jensen Nybegynder
15. november 2002 - 16:44 #4
prøver.... ok... nu ved jeg lidt mere.... hvis jeg prøver med for mange rækker på en gang går det galt (800+) Jeg må tage det lidt af gangen.
Avatar billede bak Forsker
15. november 2002 - 16:49 #5
Orhhh, nu forstår jeg hvad du mener. Spøgsmålet er besvaret før..fuldautomatiseret
Kigger lige når jeg kommer hjem.
Avatar billede bak Forsker
15. november 2002 - 17:26 #6
Hvis dine records er lige lange hver gang dvs at hver fylder fx. 7 rækker og der er en tom række mellem hver record

Sub Transponer()
' Denne makro transponerer en kolonne med data
' til x nye kolonner
' Bemærk at makroen kører så længe der er data i data-kolonnen
Dim iRow As Integer
Dim iColumn As Integer
Dim iCounter As Integer
Dim IColumn2 As Integer
Dim iRecSize As Integer
Dim xArray As Range
Application.ScreenUpdating = False
iRow = 1        'sætter start-rækken for data
iColumn = 1    'sætter start-kolonnen for data
iCounter = 2    'sætter indsættelses-række for tranponerede data
IColumn2 = 2    'Vælger indsættelseskolonne
iRecSize = 8    'vælger Recordstørrelse (7 + 1 tom)

    Do Until IsEmpty(Cells(iRow, iColumn)) = True
        Set xArray = Range(Cells(iRow, iColumn), Cells(iRow + iRecSize - 1, iColumn))
        'kopierer de 8 rækker
        'fastsætter, hvor data skal indsættes
        'kopierer og transponerer de 8 rækker til slut-området
        'Range(Cells(iCounter, IColumn2), Cells(iCounter, IColumn2 + iRecSize - 1)) _
                = WorksheetFunction.Transpose(Range(Cells(iRow, iColumn), Cells(iRow + iRecSize - 1, iColumn)))
        Range(Cells(iCounter, IColumn2), Cells(iCounter, IColumn2 + iRecSize - 1)) _
                = WorksheetFunction.Transpose(xArray)
        'sætter inddata-variabel til næste kopiering (7 rækker længere ned)
        iRow = iRow + iRecSize
        'sætter slut-variabel til næste række
        iCounter = iCounter + 1
    Loop
End Sub
Avatar billede bak Forsker
15. november 2002 - 17:35 #7
Avatar billede busch-jensen Nybegynder
16. november 2002 - 00:00 #8
Ok... i den reference fandt jeg følgende, som jeg vil afprøve:

Citat:

"Prøv denne
Sub Makro1()
\'
\' Makro1 Makro
\' Makro indspillet 04-12-01 af Allan Svendsen
\'
Dim iRow As Integer
Dim iColumn As Integer
Dim iCounter As Integer
iRow = 1
iColumn = 1
iCounter = 1
    Do Until IsEmpty(Cells(iRow, iColumn)) = True
        Range(Cells(iRow, iColumn), Cells(iRow + 5, iColumn)).Select
        Selection.Copy
        Cells(iCounter, iColumn + 1).Select
        Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
            , Transpose:=True
        iRow = iRow + 6
        iCounter = iCounter + 1
    Loop
End Sub
Den starter i celle A1, og går 6 rækker ned og kopiere, derefter vælger den celle b1, hvor dataene bliver transponeret, ligesom du ville have det, ik?
ASKIMS"
Citat slut.
Avatar billede bak Forsker
16. november 2002 - 00:17 #9
Ja, se om du kan bruge en af makroerne ellers ændrer vi så du kan...
Det drejer sig om med begge makroer at dine records er lige store, altså fylder lige mange rækker nedaf for hver person i registret.
Avatar billede mugs Novice
16. november 2002 - 09:02 #10
busch-jensen -> Når du har fået bak's tryllerier til at fungere, kan du importere til Access ved flg. kode. M.h.t. formateringen vil Access bestemme datatypen. Hvis du i kolonnen postnr kun har tal, vil importfunktionen fastsætte datatypen til tal, hvis du har tekst i dette felt vil datatypen blive tekst.

DoCmd.DeleteObject acTable, "import"
DoCmd.OpenQuery "slet", acNormal, acEdit
DoCmd.TransferSpreadsheet acImport, 5, "import", "C:\Dokumenter\Mappe1",_ True, ""
DoCmd.OpenQuery "tilføj", acNormal, acEdit

For at læse koden skal du starte midt i:

DoCmd.TransferSpreadsheet o.s.v. er selve importen til Access. Importen sker til tabellen "import", Hvis tabellen ikke findes, bliver den oprettet og bruger regnearkets færste række som feltnavne.

DoCmd.OpenQuery "tilføj", acNormal, acEdit: Sende de importerede data over i en anden tabel, hvis navn er defineret i forespørgslen. I denne tabel kan du fastsætte andre felttyper end i import-tabellen. Du kan ligeledes have relationer til andre tabeller. F.eks. kan du have en tabel med postnr. og byer og en relation mellem de 2 postnr-felter.

DoCmd.DeleteObject acTable, "import" i starten af koden sikrer, at der ikke er en tabel i forvejen med dette navn.

DoCmd.OpenQuery "slet", acNormal, acEdit sletter alle poster i den tabel vi sendte posterne over i efter importen.

De sidste 2 kodelinier er lavet fordi jeg forestiller mig, at du skal foretage importen jævnligt efter en evt, ajourføring af regnearket.

Når koden afvikles vil du får systemadvarsler fordi fu prøver at tilføje / slette data i tabellerne. Disse advarsler kan du komme uden om, ved i starten af koden at indsætte flg.:

DoCmd.SetWarnings False

og i slutningen:

DoCmd.SetWarnings True

Det er vigtigt at huske Warnings True, idet systemadvarsler vil forblive frakoblede i hele applikationen, hvis de ikke kobles til igen. Du vil således ikke blive prompet for lagring af ændringer du måttet have lavet i formularer ect.
Jeg har afprøvet og indsat koden i en Access97 db. Men den skal også fungere i 2000 og xp. Blot læg din e-mail hvis du vil have den tilsendt.
Avatar billede bak Forsker
19. november 2002 - 20:27 #11
Virker det efter hensigten, Jensen ?
Avatar billede mugs Novice
16. november 2003 - 17:46 #12
Bedre sent end aldrig.
Avatar billede bak Forsker
16. november 2003 - 20:22 #13
:-))
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

IT-JOB