2017-04-05 5 views
1

お客様の名前を表す一連のテキストがありますが、各単語/名前の間にスペースはありません(例:JohnWilliamsSmith)。しかし、各単語の最初の文字は大文字であるため、単語を区別することができます。VBA:文字列内に大文字の前後にスペースを入れてください

したがって、この顧客文字列のリストを各単語間にスペースを入れて通常の形式に置き換える必要があります。だから、JohnWilliamsSmithになることを願っています。John Williams Smithしかし、私はこれを達成するための即時の方法を考えることができませんでした。そして、私はExcel式の組み合わせがこの結果をもたらすことはできないと考えています。

このように、唯一の解決策はマクロを設定することだと思います。数式として使用されるFunction、またはモジュールが特定の範囲内のデータを処理するコード(リストがRange ("A2: A100")であると想像してください)があります。

どのようにすればいいですか?

+3

ここをクリックしてください:[Excel Regex](http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and - ループ)。 – Forty3

答えて

2
Function AddSpaces(PValue As String) As String 

    Dim xOut As String 
    xOut = VBA.Left(PValue, 1) 

    For i = 2 To VBA.Len(PValue) 
    xAsc = VBA.Asc(VBA.Mid(PValue, i, 1)) 

    If xAsc >= 65 And xAsc <= 90 Then 
     xOut = xOut & " " & VBA.Mid(PValue, i, 1) 
    Else 
     xOut = xOut & VBA.Mid(PValue, i, 1) 
    End If 

    Next 
    AddSpaces = xOut 
End Function 

注意:この関数式は、= Addspace(A1)です。

+0

これは完璧に機能しました!速やかなご返信ありがとうございます! –

+0

あなたから聞いてうれしいタッシュ。求め続けます。 –

+0

Rajesh ...代わりに大文字の後にスペースを追加するコードを調整する必要がありますか?私は分析し、自分自身のために把握しようとしましたが、この機能はまだ私に進んでいることによって! –

1

あなたの質問に@ Forty3のコメントに加えて、VBAで正規表現を使用する方法の答えはhereです。それはあなたがJohnにマッチする正規表現、Williamsを探していると述べた状態で

Smithこれは私にJohn Williams Smithを与える([A-Z])([a-z]+.*?)

Dim regex As New RegExp 
Dim matches As MatchCollection 
Dim match As match 
Dim name As String 


regex.Global = True 
regex.Pattern = "([A-Z])([a-z]+.*?)" 
name = "JohnWilliamsSmith" 
Set matches = regex.Execute(name) 

For Each match In matches 
    name = Replace(name, match.Value, match.Value + " ") 
Next match 

name = Trim(name) 

です。もちろん、WillWilliamsWilliamsonのようなケースを説明するために追加のコーディングが必要になります。

関連する問題