Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 12:08 Der er 35 kommentarer og
1 løsning

Hvordan laver jeg denne skabelon i excel?

Jeg har et tekstdokument som bliver genereret af et andet program, som indeholder kommaseparerede værdier.
Dette dokument kan jeg i øjeblikket indlæse i Excel og få værdierne opdelt så de står efter hinanden.

De kommer til at stå nogenlunde sådan her:

Tid      Dato      Værdi  Værdi2  Værdi3
16:12:54  02/09/03  123    456      789
16:22:44  03/09/03  321    741      745
16:32:34  03/09/03  123    879      369
16:42:24  03/09/03  654    852      258
16:52:14  05/09/03  987    654      147


Men jeg vil gerne ha at de automatisk (via et script/skabelon) kommer til at stå sådan her:

Tid      16:12:54 
Dato    02/09/03 
Værdi1  123   
Værdi2  456
Værdi3  789

Tid      16:22:44 
Dato    03/09/03 
Værdi1  321
Værdi2  741     
Værdi3  745

osv. (så længe der er rækker i filen...)


Nogen ideer til hvordan jeg kan lave dette - gerne eksempler?


MVH
Thomas Larsen
Avatar billede hugopedersen Nybegynder
03. september 2003 - 12:38 #1
Er der altid kun 5 kolonner i filen ?
Ligger filen altid samme sted ?

Hvis du kan sende mig en lille fil med data ( 8 - linier ), så vil jeg godt prøve at give det en chance i aften når jeg kommer hjem.

Filen kan du evt. sende på hugo.work@bigfoot.com
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 12:47 #2
Det lyder rigtig godt! =)

Der er altid det samme antal værdier (der er mange, men det er kun de 6-7 første der skal bruges i hver række). Med hensyn til antal rækker, så varierer det fra gang til gang, alt mellem 1 og 1000 (sandsynligvis vil det normale antal rækker ligge på mellem 1 og 30 evt. maks 100, men der er ikke nogen grænse....)
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 13:04 #3
Med hensyn til filens placering så kan vi bare bestemme at den skal ligge på en bestemt placering for det virker, det er ikke noget problem.
Avatar billede aheiss Praktikant
03. september 2003 - 13:16 #4
Her et forslag du kan prøve (ved ikke om det virker for dig).
Kopier makroen til et modul og kør det. Den åbner txt filen i et ny excelark, hvorefter den danner et nyt ark med de nye formater. Husk at skifte filnavn ud i linje 1.

Sub open_and_format()
    Workbooks.OpenText FileName:="C:\DINFIL.txt", _
    Tab:=True, Comma:=True, FieldInfo:=Array(Array(1, 1), _
    Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1))
kol = 5 ' definer hvor mange kolonner
rak = (ActiveSheet.UsedRange.Rows.Count)
Sheets.Add
b = 1
For a = 1 To rak 'rak
    Sheets(2).Activate
    Range(Cells(a, 1), Cells(a, kol)).Copy
    Sheets(1).Activate
    Cells((kol * a - 5 + b), 2).Select
    Cells((kol * a - 5 + b), 1) = "Tid"
    Cells((kol * a - 4 + b), 1) = "Dato"
    Cells((kol * a - 3 + b), 1) = "Værdi"
    Cells((kol * a - 2 + b), 1) = "Værdi2"
    Cells((kol * a - 1 + b), 1) = "Værdi3"
    b = b + 1
    Selection.PasteSpecial xlAll, Transpose:=True
Next
End Sub
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 13:27 #5
Skal jeg kopiere det til en bat-fil eller?
Avatar billede aheiss Praktikant
03. september 2003 - 13:30 #6
Nej bare et modul i en excel fil. Makroen kører så herfra, selvom den kun arbejder med data fra txt filen.
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 13:31 #7
Er ikke helt med på hvad du mener med modul... (er ikke så kendt i excel)
Avatar billede aheiss Praktikant
03. september 2003 - 13:36 #8
OK jeg prøver at guide.
1) Åben excel
2) Åben Visual Basic (Vis/Værktøjslinjer/Visual Basic)
3) I venstre skærmbillede ser du nu dine åbne filer. Klik på den fil du ønsker skal indeholde din makro. (evt. bare Mappe 1)
4) indsæt modul (Indsæt/Modul)
5) kopier makroen over
6) Ret linje 1 i makroen så den åbner din tekstfil
7) Gå over i excel (du behøver ikke gemme i visual basic)
8 ) Kør makro (Alt+F8) Vælg "open_and_format

Så skulle den være der, hvis ...
Avatar billede hugopedersen Nybegynder
03. september 2003 - 13:39 #9
Har du en mail adresse, så har jeg et eksempel klar !
Avatar billede hugopedersen Nybegynder
03. september 2003 - 13:40 #10
UPS - den havde jeg jo fået :-)
Avatar billede hugopedersen Nybegynder
03. september 2003 - 13:42 #11
En detalje i mit eksempel er at den ikke fjerner " " rundt om tekst - det er en detalje der er til at løse.
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 14:19 #12
>>hugopedersen Dit script virker rigtig godt, og jeg har også fundet ud af at rette det lidt til så det passer efter mine værdier. Jeg har bare det problem at nogle af rækkerne bliver indlæst af excel så den tror at det er en dato og derfor skriver dette i stedet for den rigtige værdi, hvordan kan jeg undgå dette?
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 14:28 #13
Desuden, hvad med sådan noget som at lave fed skrift på overskrifterne eller rammer omkring dataene, kan det lade sig gøre via scriptet? (jeg er begynder i det her... =)  )
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 14:45 #14
>>aheiss Jeg har lige prøvet dit script og det virker faktisk også perfekt.. Det eneste er at jeg godt kunne tænke mig at den springer over den første linje i tekstfilen, kan den det? og så er der det med fed skrift osv, kan man det?
Avatar billede hugopedersen Nybegynder
03. september 2003 - 14:53 #15
Det forstå jeg ikke - det gjorde den ikke her hos mig.  Men generelt er datoer noget .... når man henter dem fra en tekstfil synes jeg.
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 14:58 #16
Nej den gør det ikke altid... Måske en opsætning i min excel?
Avatar billede aheiss Praktikant
03. september 2003 - 15:32 #17
Hvordan virker denne her :
____________________________________
Sub open_and_format()
    Workbooks.OpenText FileName:="C:\MINFIL.txt", _
    Tab:=True, Comma:=True, FieldInfo:=Array(Array(1, 1), _
    Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1))
kol = 5 ' definer hvor mange kolonner
rak = (ActiveSheet.UsedRange.Rows.Count)
Sheets.Add
b = 1
For a = 2 To rak Step 1 'rak
    Sheets(2).Activate
    Range(Cells(a, 1), Cells(a, kol)).Copy
    Sheets(1).Activate
    Cells((kol * a - 10 + b), 2).Select
    Selection.PasteSpecial xlAll, Transpose:=True
    Cells((kol * a - 10 + b), 1) = "Tid"
    Cells((kol * a - 9 + b), 1) = "Dato"
    Cells((kol * a - 8 + b), 1) = "Værdi"
    Cells((kol * a - 7 + b), 1) = "Værdi2"
    Cells((kol * a - 6 + b), 1) = "Værdi3"
    Range(Cells((kol * a - 10 + b), 2), _
      Cells((kol * a - 10 + b + kol - 1), 2)).Borders.Color = black
    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 1)).Select
    Selection.Font.Bold = True
    b = b + 1
Next
End Sub
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 15:45 #18
Perfekt - næsten =)

Den springer over den første som den skal og overskrifterne bliver fede.
Der kommer så ramme om hvert feldt med data (ikke overskrifter), jeg ville gerne ha ramme om hele "linjen" altså én stor ramme om alle overskrifter og data for den angivne linje, hvis det er muligt... =)
Avatar billede aheiss Praktikant
03. september 2003 - 15:58 #19
Hjælper det her :
__________________________

Sub open_and_format()
    Workbooks.OpenText FileName:="C:\MINFIL.txt", _
    Tab:=True, Comma:=True, FieldInfo:=Array(Array(1, 1), _
    Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1))
kol = 5 ' definer hvor mange kolonner
rak = (ActiveSheet.UsedRange.Rows.Count)
Sheets.Add
b = 1
For a = 2 To rak Step 1
    Sheets(2).Activate
    Range(Cells(a, 1), Cells(a, kol)).Copy
    Sheets(1).Activate
    Cells((kol * a - 10 + b), 2).Select
    Selection.PasteSpecial xlAll, Transpose:=True
    Cells((kol * a - 10 + b), 1) = "Tid"
    Cells((kol * a - 9 + b), 1) = "Dato"
    Cells((kol * a - 8 + b), 1) = "Værdi"
    Cells((kol * a - 7 + b), 1) = "Værdi2"
    Cells((kol * a - 6 + b), 1) = "Værdi3"
    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 2)).Select
    With Selection.Borders(xlEdgeLeft)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .Weight = xlThin
    End With

    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 1)).Select
    Selection.Font.Bold = True
    b = b + 1
Next
End Sub
Avatar billede thomasmlarsen Nybegynder
03. september 2003 - 16:08 #20
Perfekt =)
Avatar billede aheiss Praktikant
03. september 2003 - 16:09 #21
Så sender jeg et svar. Så må du selv fordele rundt med de mange points! :-D
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 07:42 #22
>>hugopedersen Hvis du også vil ha point må du lige smide et svar. Dit svar var trods alt det hurtigste og var brugbart.
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 07:43 #23
>>aheiss Der var lige én ting mere... =)

Kan man bestemme cellebredden i scriptet, ellers skal man ind og rette det hver gang...
Avatar billede hugopedersen Nybegynder
04. september 2003 - 08:11 #24
Når du har accepteret er der lukket for det varme vand for andre :-)
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 08:15 #25
Hmm... Jeg synes ikke jeg har trykket på accepter....
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 08:18 #26
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 08:55 #27
>>aheiss èn ting mere: Kan man få den til at åbne i samme dokument som man kører makroen fra? Som det er nu åbner den et nyt...
Avatar billede aheiss Praktikant
04. september 2003 - 12:59 #28
Kigger lige på de ny rettelser senere i dag. Mht. til points - skal jeg sende 100 til Hugo?
Avatar billede aheiss Praktikant
04. september 2003 - 14:56 #29
Kolonnebredde skulle være OK. Mht. til at åbne i samme fil kan det ikke lade sig gøre. Men det skulle nu være løst alligevel. Nu åbnes filen, formaterer, og kopierer sig selv over i din master, hvorefter txtfilen lukkes uden at gemme ændringer. Alt i alt er din master opdateret men txt. filen uændret. Du skal nu tilpasse række 5, 6 og 7.


__________________________________

Sub open_and_format()
Application.ScreenUpdating = False
Dim minmappe As String
Dim minfil As String
minmappe = "C:\tempfolder\"  ' ret mappen
minfil = "mappe6.txt"        ' ret filen
aktuelfil = "tester2.xls"    ' ret til din master filen
    Workbooks.OpenText FileName:=minmappe & minfil
kol = 5 ' definer hvor mange kolonner
rak = (ActiveSheet.UsedRange.Rows.Count)
Sheets.Add
b = 1
For a = 2 To rak Step 1
    Sheets(2).Activate
    Range(Cells(a, 1), Cells(a, kol)).Copy
    Sheets(1).Activate
    Cells((kol * a - 10 + b), 2).Select
    Selection.PasteSpecial xlAll, Transpose:=True
    Cells((kol * a - 10 + b), 1) = "Tid"
    Cells((kol * a - 9 + b), 1) = "Dato"
    Cells((kol * a - 8 + b), 1) = "Værdi"
    Cells((kol * a - 7 + b), 1) = "Værdi2"
    Cells((kol * a - 6 + b), 1) = "Værdi3"
    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 2)).Select
        Selection.ColumnWidth = 12 ' bredde på kolonne 1
    With Selection.Borders(xlEdgeLeft)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .Weight = xlThin
    End With
    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 1)).Select
    Selection.Font.Bold = True
        Selection.ColumnWidth = 9 ' bredde på kolonne 2
    b = b + 1
Next
    ActiveSheet.Copy Before:=Workbooks(aktuelfil).Sheets(1)
    Workbooks(minfil).Close (False)
    [a1].Select
End Sub
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 15:22 #30
Jeg takker endnu en gang for hjælpen! =)

MHT point så har Hugo fået via et andet spørgsmål...
Avatar billede thomasmlarsen Nybegynder
04. september 2003 - 15:25 #31
Ja der var lige en sidste ting, så skal jeg nok stoppe =)

Jeg har været ved at rode lidt med at få den til at springe over en værdi i tekstfilen, altså hvis man har værdi1, værdi2, værdi3, værdi4, værdi5, værdi6 så vil jeg gerne ha værdi5 ud, men jeg kan ikke rigtig få det til at virke...
Avatar billede aheiss Praktikant
04. september 2003 - 18:45 #32
I denne "nye" udgave definerer du også i starten hvilke kolonner du vil have med. Håber det funker efter hensigten

______________________________
Sub open_and_format()
Application.ScreenUpdating = False
Dim minmappe As String
Dim minfil As String
minmappe = "C:\tempfolder\"  ' ret mappen
minfil = "mappe6.txt"        ' ret filen
aktuelfil = "tester2.xls"    ' ret til din master filen
kol1 = "A"  ' første kolonne som skal med
kol2 = "B"  ' anden osv.
kol3 = "C"
kol4 = "D"
kol5 = "F"
    Workbooks.OpenText Filename:=minmappe & minfil
kol = 5 ' definer hvor mange kolonner
rak = (ActiveSheet.UsedRange.Rows.Count)
Sheets.Add
b = 1
For a = 2 To rak Step 1
    Sheets(2).Activate
    omrode = kol1 & rak & "," & kol2 & rak & "," & _
            kol3 & rak & "," & kol4 & rak & "," & kol5 & rak
    Range(omrode).Copy
    Sheets(1).Activate
    Cells((kol * a - 10 + b), 2).Select
    Selection.PasteSpecial xlAll, Transpose:=True
    Cells((kol * a - 10 + b), 1) = "Tid"
    Cells((kol * a - 9 + b), 1) = "Dato"
    Cells((kol * a - 8 + b), 1) = "Værdi"
    Cells((kol * a - 7 + b), 1) = "Værdi2"
    Cells((kol * a - 6 + b), 1) = "Værdi3"
    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 2)).Select
        Selection.ColumnWidth = 12 ' bredde på kolonne 1
    With Selection.Borders(xlEdgeLeft)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .Weight = xlThin
    End With
    Range(Cells((kol * a - 10 + b), 1), _
      Cells((kol * a - 10 + b + kol - 1), 1)).Select
    Selection.Font.Bold = True
        Selection.ColumnWidth = 9 ' bredde på kolonne 2
    b = b + 1
Next
    ActiveSheet.Copy Before:=Workbooks(aktuelfil).Sheets(1)
    Workbooks(minfil).Close (False)
    [a1].Select
End Sub
Avatar billede thomasmlarsen Nybegynder
05. september 2003 - 08:10 #33
Det virker perfekt! Mange tak! =)
Avatar billede thomasmlarsen Nybegynder
05. september 2003 - 09:56 #34
og dog... Den får kun den sidste række fra filen med, derimod skriver den den samme ud ligeså mange gange som der er rækker....

Jeg har skiftet:
    omrode = kol1 & rak & "," & kol2 & rak & "," & _
            kol3 & rak & "," & kol4 & rak & "," & kol5 & rak
ud med:
    omrode = kol1 & a & "," & kol2 & a & "," & _
            kol3 & a & "," & kol4 & a & "," & kol5 & a

Så virker det =) Kan det passe?
Avatar billede aheiss Praktikant
05. september 2003 - 10:34 #35
Jep : My mistake.
Du er jo ved at være en VBA haj. Ses på Eksperten. God week :-)
Avatar billede thomasmlarsen Nybegynder
05. september 2003 - 10:43 #36
Man skal jo lære lidt hele tiden =)

Endnu en gang tak for hjælpen!
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