Avatar billede rodding Juniormester
15. januar 2002 - 22:09 Der er 20 kommentarer og
1 løsning

Opsplit adresser.

Hvis ex. A1 er lig adressen \"Solvangen 25\", hvordan deler man så adressen op så B1 indeholder \"Solvangen\" og C1 indeholder \"25\".
Avatar billede rvm Nybegynder
15. januar 2002 - 22:15 #1
Det kan kun gøres med en makro, der leder sætter hele adressen = en streng og deler strengen op og sætter de foskellige dele ind i hver deres celle. Det skal gøre i et loop, der kører lige så mange gange der er rækker. - jeg går i gang med at kode *S*
Avatar billede rvm Nybegynder
15. januar 2002 - 22:25 #2
Sub split()

ActiveCell.SpecialCells(xlLastCell).Select
række = ActiveCell.Row

For n = 1 To række
    If Cells(n, 2).Value <> \"\" Then
        Streng = Cells(n, 2).Value
        Position = InStrRev(Streng, \" \")
        Nr = Mid(Streng, 12)
        Adresse = Mid(Streng, 1, 10)
        Cells(n, 2).Value = Adresse
        Cells(n, 3).Value = Nr
    End If
Next n

End Sub
Avatar billede rvm Nybegynder
15. januar 2002 - 22:30 #3
Ups en lille fejl i koden - nu er den dynamisk *S*

Sub split()

ActiveCell.SpecialCells(xlLastCell).Select
række = ActiveCell.Row

For n = 1 To række
    If Cells(n, 2).Value <> \"\" Then
        Streng = Cells(n, 2).Value
        Position = InStrRev(Streng, \" \")
        Nr = Mid(Streng, Position)
        Adresse = Mid(Streng, 1, Position - 2)
        Cells(n, 2).Value = Adresse
        Cells(n, 3).Value = Nr
    End If
Next n

End Sub
Avatar billede rodding Juniormester
15. januar 2002 - 22:43 #4
Hvor skal jeg stå, når jeg kører macroen?
Avatar billede rvm Nybegynder
15. januar 2002 - 22:53 #5
I det ark, hvor data er. Jeg forudsætter at du ikke har nogle overskrifter (eller skal n = 2) og at dine data der skal splittes op er i kolonne B
Avatar billede rvm Nybegynder
15. januar 2002 - 22:58 #6
Lidt forklaring:

Sub split()

\'Går til sidste brugte celle
ActiveCell.SpecialCells(xlLastCell).Select
\'Giver rækkenummeret på den sidste brugte celle
række = ActiveCell.Row

\'Genneløber alle rækkerne - n = 2 hvis der er overskifter i række 1
For n = 2 To række
    \' Hvis der er noget i cellen i kolonne B
    If Cells(n, 2).Value <> \"\" Then
        Streng = Cells(n, 2).Value \' lægger indholdet af cellen ned i strengen
        Position = InStrRev(Streng, \" \") \' Finder positionen for det første mellemrum - bagfra
        Nr = Mid(Streng, Position) \' Klipper nummeret ud af strengen
        Adresse = Mid(Streng, 1, Position - 2) \' Klipper adressen ud af strengen
        Cells(n, 2).Value = Adresse \' Lægger adresden ned i cellen i kolonne B
        Cells(n, 3).Value = Nr \'Lægger nrummeret ned i cellen i kolonnen C
    End If
Next n

End Sub
Avatar billede bak Forsker
15. januar 2002 - 23:04 #7
i B1 skriv =VENSTRE(A1;FIND(\" \";A1))

i C1 skriv =HØJRE(A1;LÆNGDE(A1)-FIND(\" \";A1))
Avatar billede rodding Juniormester
15. januar 2002 - 23:15 #8
bak når jeg indtaster overstående i B1 kommer cellen til at fylde 2 kolonner?
Avatar billede rodding Juniormester
15. januar 2002 - 23:18 #9
bak
og yderligere, hvad nu hvis adressen f.eks er \"Hobro Landevej 38\" - altså 2 mellemrum i adressen?
Avatar billede rodding Juniormester
15. januar 2002 - 23:23 #10
rmv
hvad nu hvis det er et 3-cifret vejnr.?
Avatar billede rodding Juniormester
15. januar 2002 - 23:24 #11
Ups
undskyld rvm
Avatar billede janvogt Praktikant
15. januar 2002 - 23:30 #12
Det er svært at lave en formel, hvis man ikke ved, hvor mange ord der er i tekststrengen.

Kender du funktionen \"Tekst til kolonner\" i DATA-menuen?
Den kan opdele en tekststreng i en celle efter f.eks. mellemrum. således at Hobro Landevej 38 vil blive fordelt over 3 celler.
Avatar billede rodding Juniormester
15. januar 2002 - 23:34 #13
Tja! Jan
Det er jo en mulighed, men eftersom siden ændres, adresser kommer og går, så holder den ikke i dette tilfælde
Avatar billede bak Forsker
15. januar 2002 - 23:44 #14
Du skal bare udvide kolonnen, stil dig på B,højreklik, vælg kolonnebredde.
du kan ændre formler til nedenstående
Dette giver et max. husnummer på 4 cifre, men det må vel også være ok :)
i b1 =VENSTRE(A1;SØG(\" \";A1;LÆNGDE(A1)-4))
i c1 =HØJRE(A1;LÆNGDE(A1)-SØG(\" \";A1;LÆNGDE(A1)-4))

Avatar billede rvm Nybegynder
16. januar 2002 - 07:42 #15
jeg leder efter det sidste mellemrum - dvs. at jeg ingen problemer har med 3 numre eller f.eks. 400B
Avatar billede rodding Juniormester
16. januar 2002 - 09:13 #16
Af 3 forslag der virker får bak pointene, fordi opslitningen automatisk følger adresseændringer.
Tak bak, selv om jeg har svært ved at gennemskue dine formler.
Preben
Avatar billede rvm Nybegynder
16. januar 2002 - 10:26 #17
Hvis du vil have min kode (der jo er mere dynamisk, da den kan tage længere numre) til at virek hele tiden, så skal den bare ligges på arket:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

\'Går til sidste brugte celle
ActiveCell.SpecialCells(xlLastCell).Select
\'Giver rækkenummeret på den sidste brugte celle
række = ActiveCell.Row

\'Genneløber alle rækkerne - n = 2 hvis der er overskifter i række 1
For n = 2 To række
    \' Hvis der er noget i cellen i kolonne B
    If Cells(n, 2).Value <> \"\" Then
        Streng = Cells(n, 2).Value \' lægger indholdet af cellen ned i strengen
        Position = InStrRev(Streng, \" \") \' Finder positionen for det første mellemrum - bagfra
        Nr = Mid(Streng, Position) \' Klipper nummeret ud af strengen
        Adresse = Mid(Streng, 1, Position - 2) \' Klipper adressen ud af strengen
        Cells(n, 2).Value = Adresse \' Lægger adresden ned i cellen i kolonne B
        Cells(n, 3).Value = Nr \'Lægger nrummeret ned i cellen i kolonnen C
    End If
Next n

End Sub
Avatar billede bak Forsker
16. januar 2002 - 22:16 #18
Richardt, hvorfor laver du ikke bare din ellers glimrende kode om til 2 funktioner (gadenavn() og Husnr(). Så kan de jo bruges efter behov og vil altid være opdaterede
Avatar billede rvm Nybegynder
17. januar 2002 - 09:12 #19
-> bak: Det er en god ide - specielt, når jeg nu læser spørgsmålet igen *S*. Da jeg kodede løsningen tænkte jeg at adressen allerede stor i B og skulle erstattes med adressen uden nummer og nummeret så skulle ind i C, men sådan står der jo ikke i spørgsmålet (da står adressen jo i A). Dette er grunden til at jeg ikke lavede en funktion...

Tak for tilbagemeldingen

/Richardt
Avatar billede janvogt Praktikant
17. januar 2002 - 09:33 #20
>>>rvm og bak
Spændende, hvordan vil disse to funktioner se ud?
Avatar billede rvm Nybegynder
17. januar 2002 - 09:56 #21
F.eks. Sådan her:
Function VejNavn(Kilde As String)
    If Kilde <> \"\" Then
        Position = InStrRev(Kilde, \" \") \' Finder positionen for det første mellemrum - bagfra
        Adresse = Mid(Kilde, 1, Position - 2) \' Klipper adressen ud af strengen
        VejNavn = Adresse
    End If
End Function


Function VejNr(Kilde As String)
    If Kilde <> \"\" Then
        Position = InStrRev(Kilde, \" \") \' Finder positionen for det første mellemrum - bagfra
        Nr = Mid(Kilde, Position) \' Klipper nummeret ud af strengen
        VejNr = Nr
    End If
End Function

/Richardt
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Teamleder til AL Sydbanks GDPR & Tech Regulation i Aabenraa

Styrelsen for Grøn Arealomlægning og Vandmiljø

Teamleder til Application Management

Politiets Efterretningstjeneste

IT Sikkerhedsarkitekt i PET

Zealand Business College

Faglig teamleder til IT Drift & Support