[Excel関数]文字列の末尾から任意の文字を削除するTRIMENDカスタムワークシート関数

2022年3月21日

概要

TRIM関数の機能拡張版として、文字列の末尾から任意の文字列を削除するTRIMENDカスタムワークシート関数を作成しました。同様の機能で文字列の先頭から任意の文字列を削除する場合はTRIMSTARTカスタムワークシート関数を、文字列の前後から任意の文字列を削除する場合はTRIMEXカスタムワークシート関数をご使用ください。

TRIMEND関数の動作例は下記の通りです。

機能

文字列の末尾から任意の文字列を削除します。削除文字を指定しなかった場合、空白文字である半角スペース、水平タブ、垂直タブ及び全角スペースが削除されます。

構文

TRIMEND(文字列 , [削除文字] )

引数説明引数の指定既定値
文字列削除対象の文字列を指定します。必須(無し)
削除文字削除文字を指定します。2文字以上の文字は1つの文字列で指定します。2つ以上の文字は1つの文字列で指定します。省略した場合は空白文字(半角スペース、水平タブ、垂直タブ及び全角スペース)が指定されます。省略可能(空文字)

コード

下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。
' [Excel関数]文字列の末尾から任意の文字を削除するTRIMENDカスタムワークシート関数 
' Copyright (c) 2020-2022  黒箱 
' This software is released under the MIT License;. 
' このソフトウェアはMITライセンスの下でリリースされています。 

'* @fn Public Function TRIMEND(ByRef Text As Variant, Optional ByVal TrimChars As Variant = "") As Variant
'* @brief 指定した文字列から、指定した一連の文字が末尾に現れる箇所をすべて削除します。削除する文字列を指定しない場合、空白文字を削除します。
'* @param[in] Text 削除対象の文字列を指定します。
'* @param[in] TrimChars 削除対象の文字を指定します。2つ以上の文字は1つの文字列で指定します。省略した場合は空白文字(半角スペース、水平タブ、垂直タブ及び全角スペース)が指定されます。
'* @return Variant 削除後の文字列を返します。
'*
Public Function TRIMEND(ByRef Text As Variant, Optional ByVal TrimChars As Variant = "") As Variant

    If (Text = "") Then Exit Function

    '半角スペース 、 水平タブ 、 垂直タブ 及び 全角スペースを空白文字として指定する。
    Static WhiteSpaceChars As String
    
    'TrimCharsが指定されていない場合、空白文字を除去
    Dim TrimCharsPattern As String
    If (TrimChars = "") Then
        If (WhiteSpaceChars = "") Then WhiteSpaceChars = Chr(&H20&) & Chr(&H9&) & Chr(&HB&) & Chr(&HFFFF8140)
        TrimChars = WhiteSpaceChars
    
    'TrimCharsにハイフンが含まれる場合、Like演算子の副作用を防ぐためハイフンを末尾に移動。
    ElseIf (TrimChars Like "*-*") Then
        TrimChars = Replace(TrimChars, "-", "") & "-"
    End If
    
    Dim CurrentPos As Long

    '不要文字が1文字の場合、対象文字を末尾から1文字ずつ単純に比較し、不要文字を除去
    If (Len(TrimChars) = 1) Then

        For CurrentPos = Len(Text) To 1 Step -1
            If (Mid(Text, CurrentPos, 1) <> TrimChars) Then
                TRIMEND = Left(Text, CurrentPos)
                Exit Function
            End If
        Next
        
    '不要文字が2文字以上の場合、対象文字を末尾から1文字ずつ Like [charlist]で比較し、不要文字を除去する。
    'この際、不要文字に角カッコ ]  が含まれる場合、[charlist]の角かっこが途中で閉じてしまうため、個別に比較する。
    ElseIf (TrimChars Like "*]*") Then
        TrimCharsPattern = "[" & Replace(TrimChars, "]", "") & "]"
        
        For CurrentPos = Len(Text) To 1 Step -1
            If Not (Mid(Text, CurrentPos, 1) Like TrimCharsPattern) Then
                If (Mid(Text, CurrentPos, 1) <> "]") Then
                    TRIMEND = Left(Text, CurrentPos)
                    Exit Function
                End If
            End If
        Next

    Else
    
        TrimCharsPattern = "[" & TrimChars & "]"
        For CurrentPos = Len(Text) To 1 Step -1
            If Not (Mid(Text, CurrentPos, 1) Like TrimCharsPattern) Then
                TRIMEND = Left(Text, CurrentPos)
                Exit Function
            End If
        Next
    End If

    TRIMEND = ""

End Function

プログラムの利用について

本プログラムのライセンスは「The MIT License」を適用しています。

本プログラムは無償で利用できますが、本プログラム内の著作権表示及びライセンス表示は削除せずに表示しておいて下さい。

必須ではございませんが、本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡頂けると幸いです。

スポンサーリンク