2013

Feb

15

Av

Jag har den senaste tiden arbetat en hel del med adresser på privatpersoner. Adresser kommer från externa leverantörer i olika format, ofta med efternamn före förnamn i samma fält. Endast versaler förekommer också. Vill man få alla namn och adresser med samma utseende får man göra några beräkningsfält. 

I de filer jag arbetat med har namnet ofta haft utseendet “EFTERNAMN, FÖRNAMN” men jag vill alltid ha namnet så här: “Förnamn Efternamn”. Eller kanske hellre i 2 olika fält.

Att vända på för- och efternamn kan göras med en beräkningsfunktion som använder funktionen Position för att hitta komma-tecknet mellan för- och efternamn, funktionen Left för att få fram texten före komma-tecknet och funktionenMiddle för att få resterande text (man skulle kunna använda funktionen Right istället men Middle är enklare). För att göra formeln lite mer lättläst använder jag också funktionen Let. Onödiga mellanslag tar jag bort med Trim.

Formeln ser ut så här:

Let([
   kommaposition = Position(namnfält;",";1;1)
];
Trim(Middle(namnfält;kommaposition+1;99999)) & " " &
Trim(Left(namnfält;kommaposition-1))
)

Först räknar jag fram positionen för kommatecknet, som alltid finns mellan efternamn och förnamn. Sedan sätter jag ihop den bakre delen av namnfältet (i det här fallet förnamn) med ett mellanslag och till sist den inledande delen av namnfältet (i det här fallet efternamnet).

Vill jag samtidigt göra om namnen till versalgemener, alltså med inledande stor bokstav och resten små bokstäver, lägger jag till funktionen Proper så att formeln blir så här istället:

Let([
   kommaposition = Position(namnfält;",";1;1)
];
Proper(Trim(Middle(namnfält;kommaposition+1;99999)) & " " & 
Trim(Left(namnfält;kommaposition-1)))

Om namnfältet innehåller

  • “CLAUSEN, ROLF” så blir resultatet “Rolf Clausen”
  • “PERSSON SVAN, ANN-MARIE” så blir resultatet “Ann-Marie Persson Svan”

Skriv en kommentar

  • (will not be published)
  • 2 + one =

Läs också: