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*
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
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
\'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
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.
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))
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
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
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
-> 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...
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
Synes godt om
Ny brugerNybegynder
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.