目次
ここ数回、Excelで文字列から文字を削除するさまざまな方法について見てきましたが、今日はもう一つの使用例、特定の文字の前や後のすべてを削除する方法について調べてみましょう。
検索と置換で2文字の前、後、間を削除する
複数のセルのデータ操作には、「検索と置換」が適しています。 特定の文字の前後にある文字列の一部を削除するには、以下の手順で行います。
- テキストを削除したいセルをすべて選択します。
- Ctrl + H で開きます。 検索と置換 ダイアログを表示します。
- での を探す ボックスに、以下の組み合わせのいずれかを入力します。
- テキストを消すには 字前 のように、アスタリスク(*char)の前に文字を入力します。
- テキストを削除するには 字余り と入力し、その後にアスタリスク(char*)を入力します。
- 部分文字列を削除するには 字間 を入力し、2文字で囲まれたアスタリスク(char*char)を入力します。
- を残す。 交換 をもって ボックスを空にする。
- クリック すべて交換 .
例えば、削除する場合 コンマ以下はすべて カンマそのものも含めて、カンマとアスタリスク記号(,*)を を探す のボックスで、次のような結果が得られます。
部分文字列を削除するには コンマ前 に、アスタリスク、カンマ、スペース(*、)を入力します。 を探す ボックスを使用します。
コンマだけでなく、「Σ」を置き換えていることにご注目ください。 カンマとスペース もし、データがスペースなしのカンマで区切られている場合は、アスタリスクの後にカンマ(*,)を付けてください。
テキストを削除するには コンマ間 は、カンマ(,*,)で囲まれたアスタリスクを使用してください。
ヒント:名前と電話番号をコンマで区切りたい場合は、コンマ(,)を に置き換えてください。 のフィールドを使用します。
Flash Fillでテキストの一部を削除する
最近のバージョン(2013以降)のExcelでは、特定の文字の前後にあるテキストを消すために、もう一つ簡単な方法、フラッシュフィル機能があります。 その方法を説明します。
- データのある最初のセルの隣のセルに、予想される結果を入力し、Enter キーを押してください。
- 次のセルに適当な値を入力し始めると、入力中の値のパターンをExcelが感知し、同じパターンに従って残りのセルのプレビューを表示します。
- Enterキーを押して、提案に同意します。
完了!
数式を使ったテキストの削除
Microsoft Excelでは、内蔵の機能を使って行うデータ操作の多くも、数式で実現することができます。 これまでの方法とは異なり、数式は元のデータに変更を加えることがないため、結果をより自由にコントロールすることができます。
特定の文字以降をすべて削除する方法
特定の文字以降のテキストを削除する場合、一般的な計算式は次のようになります。
左側( セル , SEARCH(" 焦がす ", セル ) -1)ここでは、SEARCH関数で文字の位置を取得してLEFT関数に渡し、文字列の先頭から対応する文字数を抽出しています。 SEARCHが返す数値から1文字を引いて、結果からデリミタを除外しています。
例えば、カンマ以降の文字列の一部を削除する場合、B2に以下の数式を入力し、B7までドラッグします。
=left(a2, search(",", a2) -1)
特定の文字の前をすべて削除する方法
ある文字より前の文字列の一部を削除する場合、一般的な計算式は次のようになります。
RIGHT( セル , LEN( セル ) - SEARCH(" 焦がす ", セル ))ここでは、再びSEARCHを使って目的の文字の位置を計算し、LENが返す文字列の総長からそれを引いて、その差をRIGHT関数に渡して、文字列の末尾からその数だけ文字を引っ張ってきています。
例えば、カンマの前のテキストを削除する場合、数式は次のようになります。
=right(a2, len(a2) - search(",", a2))
この場合、カンマの後に空白文字が続くので、結果の先頭が空白にならないように、核となる数式をTRIM関数で囲みます。
=trim(right(a2, len(a2) - search(",", a2)))
注意事項
- 上記の例では、いずれも、以下のものしかないことを前提としています。 一例 が複数回出現する場合、その前後でテキストが削除されます。 一審 .
- SEARCH機能は ケースセンシティブでない つまり、小文字と大文字の区別をしません。 もし、特定の文字が文字であり、文字の大文字と小文字を区別したい場合は ケースセンシティブ SEARCHの代わりにFIND機能を搭載。
文字がN回目に出現した後にテキストを削除するには
ソース文字列が区切り文字を複数含んでいる場合、特定の区切り文字以降のテキストを削除する必要があります。 この場合、次の式を使用します。
左側( セル , find("#", substitute( セル , " 焦がす ", "#", n )) -1)どこ n は、テキストを削除する文字の出現位置の後です。
この式の内部ロジックでは、ソースデータのどこにも存在しない文字(ここではハッシュ記号(#))を使用する必要があります。 この文字がデータセットに存在する場合は、「#」の代わりに別のものを使用してください。
例えば、A2の2番目のカンマ以降をすべて削除する(カンマ自体も削除する)には、次のような式になります。
=left(a2, find("#", substitute(a2, ",", "#", 2)) -1)
この処方の仕組み
この式の重要な部分は、n番目の区切り文字(ここではカンマ)の位置を計算するFIND関数です。 以下、その方法を説明します。
A2の2番目のカンマをSUBSTITUTEを使ってハッシュ記号(またはデータ中に存在しない他の文字)に置き換えます。
substitute(a2, ",", "#", 2)
出来上がった文字列はFINDの第2引数に行くので、その文字列の中の「#」の位置を見つけるのです。
FIND("#", "エマ、デザイン# (102) 123-4568")
FINDは、"#"が文字列の13番目の文字であることを示しています。 その前の文字数を知るには、1を引けば、12が結果として得られます。
find("#", substitute(a2, ",", "#", 2)) - 1
この番号はそのまま num_chars の引数LEFTで、A2から最初の12文字を取り出すように指示する。
=LEFT(A2, 12)
それだ!
N個目の文字が出現する前にテキストを削除する方法
ある文字より前の部分文字列を削除するための一般的な式は以下の通りです。
右(substitute() セル , " 焦がす ", "#", n ), LEN( セル ) - find("#", substitute() セル , " 焦がす ", "#", n )) -1)例えば、A2の2番目のカンマより前のテキストを取り除くには、次のような式になります。
=right(substitute(a2, ",", "#", 2), len(a2) - find("#", substitute(a2, ",", "#", 2)) -1)
先頭のスペースを消すために、再びTRIM関数をラッパーとして使用する。
=trim(right(substitute(a2, ",", "#", 2), len(a2) - find("#", substitute(a2, ",", "#", 2))))
この処方の仕組み
要約すると、n番目のデリミタの後に何文字あるか調べ、対応する長さの部分文字列を右から抽出する。 以下に、計算式の内訳を示す。
まず、A2の2番目のカンマをハッシュ記号に置き換えます。
substitute(a2, ",", "#", 2)
結果の文字列は テキスト RIGHTの引数です。
RIGHT("エマ、デザイン# (102) 123-4568", ...)
次に、文字列の末尾から何文字取り出すかを定義する必要がある。 そのために、上記の文字列中のハッシュ記号の位置(13である)を求める。
find("#", substitute(a2, ",", "#", 2))
そして、文字列の総長(28に等しい)からそれを引きます。
len(a2) - find("#", substitute(a2, ",", "#", 2))
差分(15)はRIGHTの第2引数に渡され、第1引数の文字列から最後の15文字を取り出すように指示する。
RIGHT("エマ、デザイン番号 (102) 123-4568", 15)
出力は「(102) 123-4568」という部分文字列で、先頭のスペースを除けば希望する結果に非常に近い。 そこで、TRIM関数を使ってそれを除去している。
最後に出現した文字の後にある文字を削除する方法
値が可変長のデリミタで区切られている場合、そのデリミタの最後のインスタンス以降をすべて削除したい場合があります。 これは、次の式で行うことができます。
左側( セル , find("#", substitute( セル , " 焦がす ", "#", LEN( セル ) - len(代入( セル , " 焦がす ", "")))) -1)A列には従業員に関するさまざまな情報が含まれていますが、最後のカンマの後の値は常に電話番号です。 あなたの目標は、電話番号を削除し、他のすべての詳細を維持することです。
目的を達成するために、A2の最後のカンマ以降のテキストをこの式で削除することができます。
=left(a2, find("#", substitute(a2, ",", "#", len(a2) - len(substitute(a2, ",",")))) -1)
数式を列の下にコピーすると、このような結果になります。
この処方の仕組み
この式の要点は、文字列の最後のデリミタ(カンマ)の位置を決定し、左からデリミタまでの部分文字列を引っ張ってくることである。 デリミタの位置の取得が最も難しい部分であるが、ここではその処理方法について説明する。
まず、元の文字列のカンマの数を調べ、カンマを""に置き換えてLEN関数に代入する。
len(substitute(a2,「,」,「」))
A2の場合、結果はカンマを除いたA2の文字数である35となる。
文字列の総長(38文字)から上記の数字を引いてください。
len(a2) - len(substitute(a2,「,」,「」))
...とすると、A2のカンマの総数(最後のカンマの序数でもある)である3が得られます。
次に、すでにおなじみのFIND関数とSUBSTITUTE関数の組み合わせで、文字列の最後のカンマの位置を求めます。 インスタンス番号(この例では3番目のカンマ)は、前述のLEN SUBSTITUTE式で供給されます。
find("#", substitute(a2, ",", "#", 3))
3番目のカンマはA2の23番目の文字なので、その前の22文字を抽出する必要があるようです。 そこで、上記の式から1を引いたものを num_chars LEFTの引数です。
LEFT(A2, 23-1)
最後に出現する文字の前にある文字を削除する方法
特定の文字の最後のインスタンスより前のすべてを削除するには、一般的な数式を使用します。
サンプルの表では、最後のコンマより前のテキストを消去するために、次のような数式を使用します。
=right(a2, len(a2) - find("#", substitute(a2, ","), "#", len(a2) - len(substitute(a2, ",",")))))
仕上げにTRIM機能に入れ子にして、先頭のスペースをなくします。
=trim(right(a2, len(a2) - find("#", substitute(a2, ",", "#", len(a2) - len(substitute(a2, ",", ""))))))
この処方の仕組み
要約すると、前の例で説明したように最後のカンマの位置を求め、それを文字列の全長から差し引くのである。
len(a2) - find("#", substitute(a2, ",", "#", len(a2) - len(substitute(a2, ",", ""))))
その結果、最後のカンマの後の文字数を取得してRIGHT関数に渡すことで、文字列の末尾からその文字数だけ持ってくることができるのです。
文字の左右にある文字を削除するカスタム機能
上記の例でお分かりのように、Excelのネイティブ関数をさまざまな組み合わせで使用すれば、ほとんどすべてのユースケースを解決できます。 問題は、厄介な数式をいくつか覚えておく必要があることです。 うーん、すべてのシナリオをカバーする独自の関数を作成したらどうでしょうか。 いいアイデアだと思います。 そこで、次のVBAコードをワークブックに追加します(ExcelにVBAを組み込む詳細手順は次のとおりです)。こちら)。
Function RemoveText(str As String , delimiter As String , occurrence As Integer , is_after As Boolean ) Dim delimiter_num, start_num, delimiter_len As Integer Dim str_result As String delimiter_num = 0 start_num = 1 str_result = "" delimiter_len = Len(delimiter) For i = 1 To occurrence delimiter_num = InStr(start_num, str, delimiter, vbTextCompare) If 0 <delimiter_num Then start_num = 0 delimiter_num = 1.delimiter_num + delimiter_len End If Next i If 0 <delimiter_num Then If True = is_after Then str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If RemoveText = str_result End Functionこの関数の名前は テキストを削除する で、以下のような構文になっています。
RemoveText(文字列、デリミタ、オカレンス、is_after)どこで
文字列 - は元のテキスト文字列。 セル参照で表すことができる。
デリミタ - テキストを削除する前/後の文字。
発生状況 - デリミタのインスタンス。
Is_after - テキストを削除する区切り文字の側を示すブール値。 1 文字または連続した文字とすることができる。
- TRUE - デリミタ以降をすべて削除する(デリミタ自体も含む)。
- FALSE - デリミター以前をすべて削除します(デリミター自身を含む)。
関数のコードをワークブックに挿入すると、コンパクトでエレガントな数式を使用してセルから部分文字列を削除することができます。
例えば、A2の1番目のカンマ以降をすべて消すには、B2の式はこうなります。
=RemoveText(A3, ", ", 1, TRUE)
A2の1番目のカンマより前をすべて削除するには、C2の式は次のようになります。
=RemoveText(A3, ", ", 1, FALSE)
このカスタム関数は 区切り文字列 のように、第2引数にカンマとスペース(", ")を入れることで、その後の先頭のスペースを切り詰める手間を省いています。
私たちのカスタム関数は見事に機能していますね。 しかし、これが包括的な解決策だと思うなら、あなたはまだ次の例を見ていないのです:)
文字の前、後、間をすべて削除する
複数のセルから個々の文字やテキストを、マッチや位置によって削除するためのオプションをさらに追加するには、Excelのツールボックスに究極スイートを追加してください。
ここでは、その内容を詳しくご紹介します。 ポジションで削除 にある機能です。 エイブルビットのデータ tab> テキスト グループ> 削除 .
以下では、最も一般的な2つのシナリオを取り上げます。
特定のテキストの前後をすべて削除
例えば、すべてのソース文字列に共通の単語やテキストが含まれており、そのテキストの前後をすべて削除したいとします。 これを行うには、ソースデータを選択し、その文字列に対して ポジションで削除 ツールを使って、以下のように設定します。
- を選択します。 テキストの前のすべての文字 または テキスト以降の全キャラクタ オプションを選択し、その横のボックスにキーテキスト(または文字)を入力します。
- 大文字と小文字を別の文字として扱うか、同じ文字として扱うかによって、チェックボックスをオンにしたり、オフにしたりします。 大文字小文字を区別する ボックスを使用します。
- ヒット 削除 .
この例では、セルA2:A8で "error "という単語の前にあるすべての文字を削除しています。
そして、まさに私たちが求めている結果を得ること。
2文字間のテキストを削除する
特定の2文字間に無関係な情報がある場合、その情報を素早く削除する方法をご紹介します。
- 選ぶ すべての部分文字列を削除する をクリックし、下のボックスに2文字を入力してください。
- 間」文字も削除する場合は デリミタを含む ボックスを使用します。
- クリック 削除 .
例えば、2つのチルダ文字(~)の間をすべて削除すると、完全にきれいになった文字列が結果として得られます。
この多機能ツールの他の便利な機能を試すには、この記事の最後にある評価版をダウンロードすることをお勧めします。 それでは、次回のブログでお会いしましょう。
ダウンロード可能なもの
先頭または末尾の文字を削除する - 例 (.xlsm ファイル)
Ultimate Suite - 体験版 (.exeファイル)