Just nu i M3-nätverket
Gå till innehåll
Plide

Skilja siffror från text

Rekommendera Poster

Jag har en kolumn med postnummer och postort där jag vill få ut postnummer i en egen kolumn och postorten i en egen kolumn.

Postnumren står i lite olika format med olika antal mellanrum osv.

Jag har lagt till nedan kod som modul för att skilja ut texten i en egen kolumn men nu kommer inte sista bokstaven med, varför?

 

Ex Ljungsbro blir Ljungsbr osv

 

Function TextExtract(rCell As Range) As String

Dim sText As String
Dim vVal As Variant
Dim blBreak As Boolean
sText = rCell
Dim i As Integer
i = 1
TextExtract = ""
While i < Len(sText)
    vVal = Mid(sText, i, 1)
    If Not IsNumeric(vVal) Then
    TextExtract = TextExtract & vVal
    Else
    If TextExtract <> "" Then i = Len(sText) + 5
    End If
    i = i + 1
Wend
End Function

 

 

Tacksam om någon kan hjälpa mig med detta.

kolumn.PNG

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag skulle nog förenkla och rensa bort inledande blanksteg också:

 

Public Function TextExtract(rCell As Range) As String
Dim sText As String
Dim vVal As Variant
sText = rCell.Value
Dim i As Integer
i = 1
TextExtract = ""
While i <= Len(sText)
    vVal = Mid(sText, i, 1)
    If Not IsNumeric(vVal) Then
    TextExtract = TextExtract & vVal
    End If
    i = i + 1
Wend
TextExtract = LTrim(TextExtract)
End Function

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Går det att få mellanrum på de nummer som består av 5 siffror så att jag kan få postnummer på rätt format?

Går det också få #värdefel att bli tomma celler?

 

Function TextExtract(rCell As Range) As String

Dim sText As String
Dim vVal As Variant
Dim blBreak As Boolean
sText = rCell
Dim i As Integer
i = 1
TextExtract = ""
While i <= Len(sText)
    vVal = Mid(sText, i, 1)
    If Not IsNumeric(vVal) Then
    TextExtract = TextExtract & vVal
    Else
    If TextExtract <> "" Then i = Len(sText) + 5
    End If
    i = i + 1
Wend
End Function

Kolumn2.PNG

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
1 timme sedan, Plide säger:

Perfekt! Tack!

Längst till vänster finns det bockar framför svarsinläggen och om du klickar på en sådan bock kommer det inlägget att markeras som lösning/bästa svar, vilket kan underlätta för någon annan som undrar samma sak som du i framtiden.

 

Cecilia

Moderator

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Postnummer

Function NumExtract(rCell As Range) As String
Dim sText As String
Dim vVal As Variant
Dim i As Integer

sText = rCell.Value

NumExtract = ""
For i = 1 To Len(sText)
    vVal = Mid(sText, i, 1)
    If IsNumeric(vVal) Then
    NumExtract = NumExtract & vVal
    End If
Next i
NumExtract = Format(NumExtract, "### ##")
End Function

 

Siffrorna returneras som Text, inte siffror (men jag antar att du inte tänker summera postnummer eller så).  I vanliga fall är det alltid bäst att behålla som siffror och använda Excelformeln TEXT, som i princip gör samma sak som FORMAT i VBA

 

Om du tänker göra många övningar av det här slaget så föreslår jag att du tittar på REGEXP. Lite svart magi, men de som behärskar det verkar kunna göra precis vad de vill. 

 

Stad, blankt om tomt

Function TextExtract(rCell As Range) As String
Dim sText As String
Dim vVal As Variant
sText = rCell.Value
Dim i As Integer

TextExtract = ""
For i = 1 To Len(rCell.Value)
    vVal = Mid(sText, i, 1)
    If Not IsNumeric(vVal) Then
    TextExtract = TextExtract & vVal
    End If
Next i
TextExtract = LTrim(TextExtract)
End Function

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...