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

2020年5月4日

概要

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

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

機能

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

構文

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

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

コード

下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。

'* @fn Public Function TRIMSTART(ByRef Text As String, Optional ByVal TrimChars As String = "") As Variant
'* @brief 指定した文字列から、指定した一連の文字が先頭に現れる箇所をすべて削除します。削除する文字列を指定しない場合、空白文字を削除します。
'* @param[in] Text 削除対象の文字列を指定します。
'* @param[in] TrimChars 削除対象の文字を指定します。2つ以上の文字は1つの文字列で指定します。省略した場合は空白文字(半角スペース、水平タブ、垂直タブ及び全角スペース)が指定されます。
'* @return Variant 削除後の文字列を返します。
'*
Public Function TRIMSTART(ByRef Text As String, Optional ByVal TrimChars As String = "") 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文字の場合の処理
    If (Len(TrimChars) = 1) Then
        For CurrentPos = 1 To Len(Text)
            If (Mid(Text, CurrentPos, 1) <> TrimChars) Then
                TRIMSTART = Mid(Text, CurrentPos)
                Exit Function
            End If
        Next
    '不要文字が2文字以上の場合、対象文字を先頭から1文字ずつ Like [charlist]で比較し、不要文字を除去する。
    'この際、不要文字に角カッコ ]  が含まれる場合、[charlist]の角かっこが途中で閉じてしまうため、個別に比較する
    ElseIf (TrimChars Like "*]*") Then
        TrimCharsPattern = "[" & Replace(TrimChars, "]", "") & "]"
        For CurrentPos = 1 To Len(Text)
            If Not (Mid(Text, CurrentPos, 1) Like TrimCharsPattern) Then
                If (Mid(Text, CurrentPos, 1) <> "]") Then
                    TRIMSTART = Mid(Text, CurrentPos)
                    Exit Function
                End If
            End If
        Next
    Else
        TrimCharsPattern = "[" & TrimChars & "]"
        For CurrentPos = 1 To Len(Text)
            If Not (Mid(Text, CurrentPos, 1) Like TrimCharsPattern) Then
                TRIMSTART = Mid(Text, CurrentPos)
                Exit Function
            End If
        Next
    End If
    TRIMSTART = ""
End Function

ソースコードの利用について

本ソースコードは「GPL v3.0(GNU General Public License Version 3.0)」ライセンスで利用可能です。

本ソースコードを私的に利用される方は、本ソースコードが無料で利用できると考えて差し支え御座いません。下記の著作権表示をソースコード内に表示して頂ければ幸いです。

Copyright © 2017 黒い箱の中 All Rights Reserved.(https://kuroihako.com/)

本ホームページのソースコードを利用したソフトウェアを商用利用したり、ホームページ等で一般公開する方は、本ホームページのソフトウェアまたはソースコードに適用されているライセンスをご理解頂いてからご使用ください。同ライセンス以外での利用をご希望の方はお問い合わせフォームよりご連絡下さい。