Print side | Luk vindue

Transponer række til kolonne baseret på tekst

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Generelt
Forum beskrivelse: Hjælp til generel daglig brug af programmet Excel
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=2524
Udskrevet den: 16.Maj.2024 kl. 12:10


Emne: Transponer række til kolonne baseret på tekst
Besked fra: Usuk
Emne: Transponer række til kolonne baseret på tekst
Posteringsdato: 13.Apr.2016 kl. 17:18
Kære Dansk Regneark Forum,

Jeg er drøn spændt på, om I kan hjælpe mig med et lille problem.

Jeg har en bunke data, som alt sammen står i samme kolonne. Dette vil jeg gerne have splittet ud i flere kolonner og en ny række skal startes, hver gang, der kommer en bestemt linje tekst. Nemmeste måde at beskrive det på er sikkert med et eksempel, så det får i her:


<START>
Højde = 10
Længde = 15
Vægt = 14
<SLUT>
<START>
Højde = 4
Længde = 3
Vægt = 2
<SLUT>

Skal gerne blive til:

<START>  Højde = 10    Længde = 15   Vægt = 14   <SLUT>
<START>  Højde = 4      Længde = 3     Vægt = 2     <SLUT>

Jeg har forsøgt mig med funktionerne Transponer og Sammenlign, men har ikke fået det til at spille.

Nogen der har en idé til at løse problemet?



Svar:
Besked fra: excelent
Posteringsdato: 13.Apr.2016 kl. 18:55
Hvis du har dine data i A2 og ned :

Indsæt følgende formler

B2==HVIS(VENSTRE($A2;3)="<ST";$A2;#I/T)
C2==HVIS(VENSTRE($A2;3)="Høj";$A2;#I/T)
D2==HVIS(VENSTRE($A2;3)="Læn";$A2;#I/T)
E2==HVIS(VENSTRE($A2;3)="Væg";$A2;#I/T)
F2==HVIS(VENSTRE($A2;3)="<SL";$A2;#I/T)

Marker B2:F2 og kopier ned med fyldhåndtag

Tast F5 og vælg Speciel...
Prik i "Formler"
Fjern flueben i Tal, Tekst og Logiske (kun flueben i Fejl)
Klik OK

Højreklik et sted i markering
Vælg Slet
Sæt prik i "Ryk celler opad"
Klik OK



-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!


Besked fra: Usuk
Posteringsdato: 14.Apr.2016 kl. 09:07
Hej Excelent,

Tak for svaret, og jeg burde nok have været mere udførlig i min beskrivelse af problemet og valgt et eksempel, som er tættere på de data jeg sidder med.

Der kan være flere forskellige slags data mellem <Start> og <Slut>, der er heller ikke det samme antal rækker mellem hver <Start> og <Slut>. Prøver lige igen med et eksempel

<Start>
xyz=12343535
zyx=3204202
yxz=hej_matematik
abcd=20303
<Slut>
<Start>
t=203049
acd=eksempel
STOP
<Slut>

skal blive til:

<Start>      xyz=12343535      zyx=3204202      yxz=hej_matematik      abcd=20303      <Slut>
<Start>      t=203049              acd=eksempel     STOP                             <Slut>

Sagt med andre ord. Excel skal tage alt mellem den første <Start> og første <Slut> og putte i første række. Den skal så tage alt mellem den anden <Start> og anden <Slut> og smide på anden række. Dette skal den gøre over data givet i en kolonne, som har godt 1 mio. rækker. Altså fra A1:A1400000. Der er flere tusinde <Start> og <Slut> entries, men <Start> er altid efterfulgt af en <Slut>, og <Start> kommer altid lige efter en <Slut>.

Håber det giver mening.


Besked fra: excelent
Posteringsdato: 14.Apr.2016 kl. 19:21
Prøv denne makro :

Sub xSplit()

splitKol = 1 ' 1= kolonne A hvor dine data er  (*** RET TIL AKTUEL ***)
tilKol = 2 ' 2=kolonne B hvor data flyttes til (*** RET TIL AKTUEL ***)
lastRow = Cells(1048000, splitKol).End(xlUp).Row ' sidste celle med data
nRk = 2

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

For t = 1 To lastRow
Cells(nRk, Cells(nRk, 255).End(xlToLeft).Column + 1) = Cells(t, splitKol)
If Cells(t, splitKol) = "<Slut>" Then nRk = nRk + 1
Next

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub



-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!


Besked fra: excelent
Posteringsdato: 14.Apr.2016 kl. 19:34
rettese :

Sub xSplit()

splitKol = 1 ' 1= kolonne A hvor dine data er  (*** RET TIL AKTUEL ***)
tilKol = 5 ' 2=kolonne B hvor data flyttes til (*** RET TIL AKTUEL ***)
lastRow = Cells(1048000, splitKol).End(xlUp).Row ' sidste celle med data
nRk = 2

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

For t = 1 To lastRow
kol = Application.WorksheetFunction.Max(tilKol, Cells(nRk, 255).End(xlToLeft).Column + 1)
Cells(nRk, kol) = Cells(t, splitKol)
If Cells(t, splitKol) = "<Slut>" Then nRk = nRk + 1
Next

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub


-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!


Besked fra: Usuk
Posteringsdato: 15.Apr.2016 kl. 15:40
Du er for vild excelent! Det spillede 1000%! 102043 rækker med data blev til 1415 rækker i løbet af ca. 30 sekunder :)

Det er fornemt! Mange tusinde tak! :)


Besked fra: excelent
Posteringsdato: 15.Apr.2016 kl. 18:45
velbekom

-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!



Print side | Luk vindue