西海岸より

つらつらざつざつと

文字列の前後の改行を削除するTRIM

OutlookExcelでマクロをいじっているのだけど、trimがうまく動作してくれない。
どうやら、空白のみ削除し改行などは削除してくれないとか。エクセルの仕様?

そこで、タブ、空白、改行を削除するNTRIM関数を作ってみた。(Nはnewlineの意味)
(マクロ初心者なので、使われる方は自己責任でご利用お願いします。)

'文字列の前後(タブ、空白、改行)をtrimする関数
Function NTRIM(trg As String) As String
    Dim ret As String
    ret = NRTRIM(trg)
    NTRIM = NLTRIM(ret)
End Function

'文字列の右側のみtrim
Function NRTRIM(trg As String) As String
    Dim i As Integer
    Dim ret As String
    Dim rightChr As String
    
    ret = trg
    If Len(ret) > 0 Then
        For i = 1 To 10
            rightChr = Right(ret, 1)
            If rightChr = Chr(9) _
                    Or rightChr = Chr(10) _
                    Or rightChr = Chr(11) _
                    Or rightChr = Chr(13) _
                    Or rightChr = Chr(32) _
                    Or rightChr = " " _
                    Then
                ret = Left(ret, Len(ret) - 1)
            Else
                GoTo outLoop
            End If
        Next i
    End If
outLoop:
    NRTRIM = ret
End Function

'文字列の左側のみtrim
Function NLTRIM(trg As String) As String
    Dim i As Integer
    Dim ret As String
    Dim leftChr As String
    
    ret = trg
    If Len(ret) > 0 Then
        For i = 1 To 10
            leftChr = Left(ret, 1)
            If leftChr = Chr(9) _
                    Or leftChr = Chr(10) _
                    Or leftChr = Chr(11) _
                    Or leftChr = Chr(13) _
                    Or leftChr = Chr(32) _
                    Or leftChr = " " _
                    Then
                ret = Right(ret, Len(ret) - 1)
            Else
                GoTo outLoop
            End If
        Next i
    End If
outLoop:
    NLTRIM = ret
End Function
  • 使い方
 Dim target As String
 Dim result As String
 target = "  ABC "
 result = NTRIM(target)

trimする文字は以下のascii表を参考。