Avatar billede fhansen82 Mester
19. september 2013 - 17:07 Der er 4 kommentarer og
1 løsning

Vælge specifik data til venstre for tegn i celle

Jeg har brug for en VBA kode som kan hente et stykke data ud af en celle i Excel, som altid står til venstre for et specifik tegn. Dataen består af et sæt initialer, som kan være både to, tre og fem karakterer langt, så jeg har derfor brug for hjælp, da jeg ikke kan regne ud hvordan den skal kringles. Den samlede mængde data består altid af et fornavn, initialer, brugernavn samt domæne og kan indeholde et mellemnavn. Nogle gange er initialer og brugernavn ens og initialer kan både fremgå med småt og stort. Et par eksempel:

Syntaksen er:

<Fornavn> <Evt. mellemnavn> <Initialer> <[Domæne> \ <Brugernavn]>

Bo BK [Eksperten\BK]
Ole Bole OBH [Eksperten\OBH]
Knud kn [Eksperten\knudsø]

Så det jeg har brug for er, at initialer, som altid fremgår lige til venstre for tegnet [, skal trækkes ud i en variabel til kopiering til en celle ved siden af.
Avatar billede supertekst Ekspert
19. september 2013 - 18:22 #1
Eksempel m/en enkel celle:

Sub udtrækInitialer()
Const tegn = "["
Dim p As Byte, initial As String
    p = InStr(Range("A1"), tegn)
    If p > 0 Then
        inital = Trim(Left(Range("A1"), p - 1))
    End If
End Sub
Avatar billede fhansen82 Mester
19. september 2013 - 19:43 #2
Hej supertekst

Tak for input. Jeg kan ikke få det til at virke. Data står i kolonne E og der skal outputtes til Kolonne H. Har rettet koden til. Er det i den rigtige retning jeg går, eller har jeg misforstået konceptet?

Const tegn = "["
Dim p As Byte, initial As String
    p = InStr(Range("E2"), tegn)
    If p > 0 Then
        inital = Trim(Left(Range("E2"), p - 1))
        Sheets("Ark1").Range("H2") = initial
    End If

Der bliver ikke outputtet noget. Hvis vi tager udgangspunkt i første eksempel, så er det BK jeg ønsker outputtet til en anden celle. Data i cellen der hentes fra skal bevares som de er fra starten af.
Avatar billede supertekst Ekspert
19. september 2013 - 23:00 #3
Hej fhansen82

Årsagen til at der ikke skete noget i 1. version var, at der manglede et "i" i sætningen:       
inital = Trim(Left(Range("E2"), p - 1))
og "i" er i dennne sætning:       
Sheets("Ark1").Range("H2") = initial

Version2:
Sub udtrækInitialer()
Sub test2()
Dim tabel As Variant
Const tegn = "["
Dim p As Byte, initial As String
    p = InStr(Range("E2"), tegn)
    If p > 0 Then
        initial = Trim(Left(Range("E2"), p - 1))
        tabel = Split(initial, " ")
       
        Range("H2") = tabel(UBound(tabel))
    End If

End Sub
Avatar billede fhansen82 Mester
20. september 2013 - 17:41 #4
supertekst, det virker perfekt. Har implementeret koden nu til mit formål. Tak for hjælpen. Smid et svar for point.
Avatar billede supertekst Ekspert
20. september 2013 - 18:04 #5
Fint  og selv tak..
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
Kurser inden for grundlæggende programmering

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