Oprettet ons. d. 18. januar 2012 kl. 11:18:24

EatThis
EatThis (4.515 point. Point ude: 100)

Konvertering af tekststreng til rækker

Hej

Jeg er ved at konvertere noget Excel til Access. I den forbindelse har jeg et regneark, som indeholder en tekststreng, som jeg gerne vil dele ud i flere rækker.
Eksempel :
Nuværende:
test1    192.168.135.1  b2 bc e3 4a,dlfi382k,sj031ke,294kfs03

Ændres til :
test1    192.168.135.1  b2 bc e3 4a
test1    192.168.135.1  dlfi382k
test1    192.168.135.1  sj031ke
test1    192.168.135.1  294kfs03

Problemet er at jeg nu har ca. 2000 rækker og at tekststrengen i nogen tilfælde kan indeholde op til 40 individuelle numre, så det er ikke bare at lave i hånden :)

Kan det overhovedt lade sig gøre???

/Jan

Skrevet ons. d. 18. januar 2012 kl. 14:38:44| #1

EatThis
EatThis (4.515 point)
Jeg har lige lidt bonus info :
Ikke alle rækker i Excel arket er ens, så man det kunne se sådan her ud :
test1    192.168.135.1  b2 bc e3 4a,dlfi382k,sj031ke,294kfs03
test2    192.168.135.2 
test3    192.168.135.3  1564kfa12

/Jan

Skrevet ons. d. 18. januar 2012 kl. 15:17:44| #2

dkhanknu
dkhanknu (35.505 point)
Bonus info?
Men det hjalp dog efter min mening ikke til at tydeliggøre opgaven.

I hvilke celler har du den tekst der skal opdeles.
I hvilke celler skal resultatet vises.
Er strukturen altid den samme for såvidt angår de "tal" der står først.
Alt der der står efter "tallene" skal det opdeles efter hvor der er komma, og hvis ikke, hvad er så kriteriet for opdelingen.

Det er uklart, hvad det er du vil. For eksempel, hvor kommer de
"1564kfa12" du nævner under test3 i post #1? Og under test2, hvordan skal man her kunne vide, at der ikke skal stå noget efter "tallet"?

Skrevet ons. d. 18. januar 2012 kl. 16:51:19| #3

EatThis
EatThis (4.515 point)
Det kan godt være at det ikke fremgik af posten hvad celle referancen var, beklager, det tog jeg for givet.
  A        B              C
1 test1    192.168.135.1  b2 bc e3 4a,dlfi382k,sj031ke,294kfs03
2 test2    192.168.135.2 
3 test3    192.168.135.3  1564kfa12

Forventet output er:
  A        B              C
1 test1    192.168.135.1  b2 bc e3 4a
2 test1    192.168.135.1  dlfi382k
3 test1    192.168.135.1  sj031ke
4 test1    192.168.135.1  294kfs03
5 test2    192.168.135.2
6 test3    192.168.135.3  1564kfa12
osv.

Hvad der står i kolonne C er trukket ud fra et andet system og er én tekststreng adskilt af komma. Hvor det data er fremkommet, er ikke relevant for løsningen.
Jeg er sikker på at der ikke står noget i det tomme felt C2.
Kolonne A & B er begge ligeledes tekststrenge.

Skrevet ons. d. 18. januar 2012 kl. 17:12:29| #4

dkhanknu
dkhanknu (35.505 point)
Jeg trækker mig. Måske der er en VBA-ekspert der kan hjælpe.
Hans

Skrevet ons. d. 18. januar 2012 kl. 17:44:10| #5

kabbak
kabbak (152.524 point)
www.kabbak.dk
prøv denne, marker data først, den skriver i C og D kolonnen.

Public Sub udflet()
    Dim C As Range, Dat As Variant, R As Integer, I As Integer, X As Long
    X = 2
    For Each C In Selection
        R = InStr(1, C, " ")
        Dat = Split(Left(C, R - 1) & Replace(Mid(C, R, 1), " ", ",") & Right(C, Len(C) - R), ",") ' splitter ved komma
        For I = 1 To UBound(Dat)
            Cells(X, 3) = Dat(0) 'skriver ip nummer i kolonne 3 = C
            Cells(X, 4) = Dat(I) ' skriver det andet i en sløjfe i kolonne 4 = D
            X = X + 1 ' holder øje med rækken
        Next
    Next
End Sub

Skrevet tor. d. 19. januar 2012 kl. 09:29:39| #6

finb
finb (10.189 point)
ser med... finb

Skrevet tor. d. 19. januar 2012 kl. 13:03:34| #7

EatThis
EatThis (4.515 point)
Hej Jabbak

Tak for koden!!

Kan nogenlunde læse og forstå koden, men når jeg kører makroen får jeg en "Invalid procedure call og argument" og her er jeg så lidt på glat is. Jeg har kørt makroen med F8 (debug/step) og det ser ud til at være når den går ind i "For I = 1 To UBound(Dat)", lige efter jeg har trykket F8 på den foregående linie, at fejlen kommer.

Skrevet tor. d. 19. januar 2012 kl. 16:27:03| #8

kabbak
kabbak (152.524 point)
www.kabbak.dk
Ok, det må være hvor der kun står et IP nummer, denne skulde fange det.

Public Sub udflet()
    Dim C As Range, Dat As Variant, R As Integer, I As Integer, X As Long
    X = 2
    For Each C In Selection
        R = InStr(1, C, " ")
        If R > 0 Then
        Dat = Split(Left(C, R - 1) & Replace(Mid(C, R, 1), " ", ",") & Right(C, Len(C) - R), ",") ' splitter ved komma
        For I = 1 To UBound(Dat)
            Cells(X, 3) = Dat(0) 'skriver ip nummer i kolonne 3 = C
            Cells(X, 4) = Dat(I) ' skriver det andet i en sløjfe i kolonne 4 = D
            X = X + 1 ' holder øje med rækken
        Next
        Else
        Cells(X, 3) = C.Value
        X = X + 1
        End If
    Next
End Sub

Skrevet fre. d. 20. januar 2012 kl. 08:22:23| #9

kabbak
kabbak (152.524 point)
www.kabbak.dk
sæt lige den ind aller øverst i modulet, uden for alle sub's

Option Base 1

Skrevet fre. d. 20. januar 2012 kl. 08:23:19| #10

kabbak
kabbak (152.524 point)
www.kabbak.dk
Option Base 1
Gør at alle array variabler starter ved 1 i stedet for ved 0

Skrevet fre. d. 20. januar 2012 kl. 08:51:14| #11

kabbak
kabbak (152.524 point)
www.kabbak.dk
se bort fra Option Base 1, det skal ikke bruges

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

hjælp til at lave et træningsprogram

Oprettet den 26. maj 2012 kl. 20.44
janskov giver 30 point for svar | Giv et svar »

Datavalidering med anden workbook som referance

Oprettet den 26. maj 2012 kl. 09.05
KenneyD71 giver 60 point for svar | Giv et svar »

Søgeformel i Excel

Oprettet den 25. maj 2012 kl. 23.28
Torben1970 giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger