[Excel関数]文字列の中から任意の文字を除去(削除)するREMOVEカスタムワークシート関数
2022年3月14日
概要
数字だけを除去する場合はREMOVENカスタムワークシート関数を、任意の文字を抽出する場合はEXTRUCTカスタムワークシート関数をご使用ください。
REMOVE関数の動作例は下記の通りです。
機能
文字列の中から、指定した一連の文字のみを除去して返します。第3引数の”範囲指定”にTRUEを指定することで、第2引数の”除去文字”に範囲指定が可能になります。例えば、全ての英数字を除去したい場合は第2引数の”除去文字”に"a-zA-Z0-9″を指定します。また、全てのひらがなとカタカナを除去したい場合は除去文字に"ぁ-をァ-ヶ"を指定します。なお、範囲指定をする場合はハイフン”-”を抽出文字として指定できなくなります。
構文
REMOVE(文字列 , 除去文字, [範囲指定] )
引数 | 説明 | 引数の指定 | 既定値 |
---|---|---|---|
文字列 | 除去対象の文字列を指定します。 | 必須 | (無し) |
除去文字 | 除去文字を指定します。2つ以上の文字は1つの文字列で指定します。 | 必須 | (無し) |
範囲指定 | 除去文字を範囲指定(例:a-z)する場合はTRUE、範囲指定しない場合はFALSEを指定します。省略した場合、FALSEを指定が指定されます。 | 省略可能 | FALSE |
コード
下記のコードを全てコピーし、標準モジュール等に貼り付けて下さい。下記のコード表示欄の右上に「Copy」ボタンがありますのでご使用下さい。なお、標準モジュールが何だか分からない方は、 Excelのカスタムワークシート関数を使用する方法 を参照して下さい。' [Excel関数]文字列の中から任意の文字を除去(削除)するREMOVEカスタムワークシート関数
' Copyright (c) 2020-2024 黒箱
' This software is released under the GPLv3.
' このソフトウェアはGNU GPLv3の下でリリースされています。
'* @fn Public Function REMOVE(ByRef Text As String, ByVal CharsToRemove As String, Optional ByVal RangeSpecification As Boolean = False) As Variant
'* @brief 指定した文字列から、指定した一連の文字のみを除去して返します。
'* @param[in] Text 除去対象の文字列を指定します。
'* @param[in] CharsToRemove 除去する文字を指定します。2つ以上の文字は1つの文字列で指定します。
'* @param[in] RangeSpecification 除去する文字を範囲指定(例:a-z)する場合はTRUE、範囲指定しない場合はFALSEを指定します。省略した場合、FALSEを指定します。
'* @return Variant 除去した文字列を返します。
'* @details 指定した文字列から、指定した一連の文字のみを除去して返します。第3引数RangeSpecificationにTRUEを指定することで、第2引数CharsToRemoveに範囲指定が可能になります。例えば、全ての英数字を除去したい場合は"a-zA-Z0-9"を指定します。
'*
Public Function REMOVE(ByRef Text As String, ByVal CharsToRemove As String, Optional ByVal RangeSpecification As Boolean = False) As Variant
If (Text = "") Then Exit Function
Dim i As Long
Dim Char As String
Dim Result As String
Dim TextLength As Long: TextLength = Len(Text)
'抽出文字が1文字の場合の処理
If (Len(CharsToRemove) = 1) Then
For i = 1 To TextLength
Char = Mid(Text, i, 1)
If (Char <> CharsToRemove) Then Result = Result & Char
Next
REMOVE = Result
Exit Function
End If
'抽出文字が2文字以上の場合、対象文字を先頭から1文字ずつ Like [charlist]で比較し、不要文字を除去する。
'CharsToExtructにハイフンが含まれる場合、かつ範囲指定(例:a-z)が無効の場合、Like演算子の副作用を防ぐためハイフンを末尾に移動。
Dim CharsToRemovePattern As String
If Not (RangeSpecification) Then
If (CharsToRemove Like "*-*") Then
CharsToRemove = Replace(CharsToRemove, "-", "") & "-"
End If
End If
'CharToExtructに角カッコ ] が含まれる場合、[charlist]の角かっこが途中で閉じてしまうため、個別に比較する
If (CharsToRemove Like "*]*") Then
CharsToRemovePattern = "[" & Replace(CharsToRemove, "]", "") & "]"
For i = 1 To TextLength
Char = Mid(Text, i, 1)
If Not (Char Like CharsToRemovePattern) Then
If (Char <> "]") Then Result = Result & Char
End If
Next
Else
CharsToRemovePattern = "[" & CharsToRemove & "]"
For i = 1 To TextLength
Char = Mid(Text, i, 1)
If Not (Char Like CharsToRemovePattern) Then Result = Result & Char
Next
End If
REMOVE = Result
End Function
プログラムの利用について
本プログラムのライセンスは「GPL-3.0(GNU General Public License version 3)」を適用しています。
本プログラムを私的に利用(個人利用、並びに企業またはその他の組織の内部利用)される方は、本プログラムを無償で利用できると考えて差し支え御座いません。その場合でも、本プログラム内の著作権及びライセンスの表示は削除せずに表示しておいて下さい。
その他の方は、GNU 一般公衆利用許諾書(GNU GENERAL PUBLIC LICENSE)バージョン3の内容をご理解頂き、適正な利用をお願い致します。同ライセンス以外での利用をご希望の方はお問い合わせフォームよりご連絡下さい。
本ホームページのプログラムを書籍またはホームページ等で一般公開したい方は、お問い合わせフォームよりご連絡下さい。
スポンサーリンク
Excelカスタム関数,Excel関数GPLv3,カスタムワークシート関数
Posted by 黒箱
この記事のトラックバックURL
スポンサーリンク
カテゴリー
スポンサーリンク
-
ホーム -
上へ
ディスカッション
コメント一覧
まだ、コメントがありません