氏名間のスペースを除去する。

氏名間のスペースは、あったりなかったり、半角だったり全角だったりします。このため一覧表等では統一するためにスペースを除去するのもひとつの方法です。

TRIM関数」では文字列の前後のスペースしか除去できませんので、例えば氏名間のスペースを除去するようなケースではこのような処理を行ないます。
氏名間のスペースを除去する。
(画像をクリックすると、このサンプルがダウンロードできます)
「元の氏名」に氏名を入力して、ボタンをクリックすると、「空白除去後」にスペースが除去された文字列が表示されます。空白は全角/半角どちらでも除去されます。

コードの説明です。


'***************************************************************************************************
'   空白文字除去                                                    modOmitSpace(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'03/07/25(1.00)新規作成
'07/07/15(1.01)初回修正
'20/02/29(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ 公開サブ処理 ■■■
'***************************************************************************************************
'* 処理名 :FP_OmitSpace
'* 機能  :文字列中空白文字と誤変換文字を除去する
'---------------------------------------------------------------------------------------------------
'* 返り値 :除去後文字列(String)
'* 引数  :Arg1 = 除去前文字列(String)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月25日
'* 作成者 :井上 治
'* 更新日 :2020年02月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Public Function FP_OmitSpace(ByVal strInText As String) As String
    '-----------------------------------------------------------------------------------------------
    Dim lngPos As Long                                              ' 文字位置
    Dim strText As String                                           ' Trim後文字列
    Dim strChar As String * 1                                       ' 1文字WORK
    FP_OmitSpace = ""
    strText = Trim(strInText)
    lngPos = 1
    ' 先頭文字から最終文字まで探索
    Do While lngPos <= Len(strText)
        ' 1文字を取り出す
        strChar = Mid(strText, lngPos, 1)
        ' 有効文字か
        If ((strChar <> " ") And (strChar <> " ") And (Asc(strChar) <> 63)) Then
            FP_OmitSpace = FP_OmitSpace & strChar
        End If
        ' 次の文字へ
        lngPos = lngPos + 1
    Loop
End Function
本機能は、共通モジュールとして利用できます。「modOmitSpace」という名前の標準モジュールを別にしてあります。(短い処理なので「切り貼り」でも充分です。)
このように、引数で受け取った文字列「strInTEXT」を一旦TRIM関数で前後のスペースを除去した後、左から1文字ずつ空白か判定して戻り値にセットしています。
Asc(strCHAR) <> 63」は「?」に変換されてしまう文字を除去する記述です。中国語などの特殊文字でファイル名等に使うと「?」に変換されてしまうのを避けています。不要であれば外して下さい。

このサンプルでは、この他不正文字のチェックを行なっています。

'***************************************************************************************************
'* 処理名 :FP_CheckString
'* 機能  :文字列中に「,」「"」「'」「Cr」「Lf」がないことを確認する
'---------------------------------------------------------------------------------------------------
'* 返り値 :チェック結果(Boolean)
'* 引数  :Arg1 = 検査文字列(String)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月25日
'* 作成者 :井上 治
'* 更新日 :2020年02月29日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Public Function FP_CheckString(strInText As String) As Boolean
    '-----------------------------------------------------------------------------------------------
    Dim lngPos As Long                                              ' 文字位置
    Dim strText As String                                           ' Trim後文字列
    Dim strChar As String * 1                                       ' 1文字WORK
    FP_CheckString = False
    strText = Trim(strInText)
    ' ブランクなら正常終了
    If strText = "" Then
        FP_CheckString = True
        Exit Function
    End If
    ' 先頭文字から最終文字まで探索
    For lngPos = 1 To Len(strText)
        ' 1文字を取り出す
        strChar = Mid(strText, lngPos, 1)
        ' 不正文字か
        If ((strChar = ",") Or _
            (strChar = """") Or _
            (strChar = "'") Or _
            (strChar = ",") Or _
            (strChar = Chr(&H818D)) Or _
            (strChar = "’") Or _
            (strChar = Chr(&H8167)) Or _
            (strChar = Chr(&H8168)) Or _
            (strChar = vbCr) Or _
            (strChar = vbLf)) Then
            Exit Function
        End If
    Next lngPos
    FP_CheckString = True
End Function

'----------------------------------------<< End of Source >>----------------------------------------
CSV形式ファイルなどに出力すると、セパレータと誤認されてしまうような文字がないかを確認して、問題なければ「TRUE」、不正文字がある場合は「FALSE」が返ります。
「不正」と判定している文字については、場合によっては許可できるものもあるので、利用される場合には確認して下さい。

「正規表現」による方法を次のページで説明しています。  このページでは1文字ごとのループ処理を作って処理しています。 これはこれで文字列処理の上で理解していただきたい方法のひとつなのですが、「空白除去」「文字列チェック」だけのことであれば次のページで説明している「正規表現」を利用した方法の方が有効な場合があります。