[Excel関数]文字列の前後から任意の文字を削除するTRIMEXカスタムワークシート関数
2022年3月21日
概要
TRIM関数の機能拡張版として、文字列の前後から任意の文字列を削除するTRIMEXカスタムワークシート関数を作成しました。同様の機能で文字列の先頭から任意の文字列を削除する場合はTRIMSTARTカスタムワークシート関数を、文字列の末尾から任意の文字列を削除する場合はTRIMENDカスタムワークシート関数をご使用ください。
TRIMEX関数の動作例は下記の通りです。
機能
文字列の前後から任意の文字列を削除します。削除文字を指定しなかった場合、空白文字である半角スペース、水平タブ、垂直タブ及び全角スペースが削除されます。
構文
TRIMEX(文字列 , [削除文字] )
引数 | 説明 | 引数の指定 | 既定値 |
---|---|---|---|
文字列 | 削除対象の文字列を指定します。 | 必須 | (無し) |
削除文字 | 削除文字を指定します。2文字以上の文字は1つの文字列で指定します。2つ以上の文字は1つの文字列で指定します。省略した場合は空白文字(半角スペース、水平タブ、垂直タブ及び全角スペース)が指定されます。 | 省略可能 | (空文字) |
コード
下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。' [Excel関数]文字列の前後から任意の文字を削除するTRIMEXカスタムワークシート関数
' Copyright (c) 2020-2024 黒箱
' This software is released under the MIT License;.
' このソフトウェアはMITライセンスの下でリリースされています。
'* @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 TRIMEX(ByVal 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
Text = Mid(Text, CurrentPos)
Exit For
End If
Next
'末尾から削除
For CurrentPos = Len(Text) To 1 Step -1
If (Mid(Text, CurrentPos, 1) <> TrimChars) Then
TRIMEX = Left(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
Text = Mid(Text, CurrentPos)
Exit For
End If
End If
Next
'末尾から削除
For CurrentPos = Len(Text) To 1 Step -1
If Not (Mid(Text, CurrentPos, 1) Like TrimCharsPattern) Then
If (Mid(Text, CurrentPos, 1) <> "]") Then
TRIMEX = Left(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
Text = Mid(Text, CurrentPos)
Exit For
End If
Next
'末尾から削除
For CurrentPos = Len(Text) To 1 Step -1
If Not (Mid(Text, CurrentPos, 1) Like TrimCharsPattern) Then
TRIMEX = Left(Text, CurrentPos)
Exit Function
End If
Next
End If
TRIMEX = ""
End Function
プログラムの利用について
本プログラムのライセンスは「The MIT License」を適用しています。
本プログラムは無償で利用できますが、本プログラム内の著作権表示及びライセンス表示は削除せずに表示しておいて下さい。
必須ではございませんが、本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡頂けると幸いです。
スポンサーリンク
Excelカスタム関数,Excel関数MITライセンス,カスタムワークシート関数,ソースコード
Posted by 黒箱
この記事のトラックバックURL
スポンサーリンク
カテゴリー
スポンサーリンク
-
ホーム -
上へ
PAGE TOP
ディスカッション
コメント一覧
まだ、コメントがありません