目次
このチュートリアルでは、ネイティブの数式とカスタム関数を使用して、Excelでテキストと数字を分離する方法を学びます。 また、テキストと数字を2つの列に分割する方法も学びます。
例えば、分析用の生データを受け取ったとき、1つの列に数字と文字が混在していることがわかったとします。 ほとんどの場合、それらを別々の列にして精査する方が便利なのは確かです。
均質なデータを扱う場合、LEFT、RIGHT、MID関数を使えば、同じ位置から同じ数の文字を抽出することができるでしょう。 しかし、これは実験室でのテストのための理想的なシナリオです。 実際の現場では、数字がテキストの前、後、テキストの間にある異種のデータを扱うことがほとんどです。 次の例は、まさにこのための解決策を提供します。の場合。
Excelのセルからテキストを削除し、数字を残す方法
このソリューションは、Excel 365、Excel 2021、およびExcel 2019で動作します。
Microsoft Excel 2019では、以前のバージョンにはない新しい関数がいくつか導入されましたが、今回はその中の一つであるTEXTJOINを使って、数字を含むセルからテキスト文字を剥がす方法をご紹介します。
一般的な計算式は
textjoin("", true, iferror(mid( セル , ROW(INDIRECT("1:"&LEN()。 セル ))), 1) *1, ""))Excel 365と2021では、こちらも動作します。
textjoin("", true, iferror(mid( セル , シーケンス(len( セル )), 1) *1, ""))一見すると、数式は少し威圧的に見えるかもしれませんが、ちゃんと成立しています :)
例えば、A2の数字から文字を削除するには、B2に以下の数式を入力し、必要な数だけセルにコピーします。
Excel 365 - 2019で。
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
Excel 2019では、Ctrl + Shift + Enterで配列式として入力する必要があります。 動的配列のExcelでは、Enterキーで完了する通常の数式として機能します。
Excel 365と2021で。
=textjoin("", true, iferror(mid(a2, sequence(len(a2)), 1) *1, ""))
その結果、セルからすべてのテキスト文字が削除され、数字が保持されます。
この処方の仕組み
このロジックをよりよく理解するために、式を内側から調査することから始めましょう。
ROW(INDIRECT("1:"&LEN(string))) または SEQUENCE(LEN(string)) を使用して、ソース文字列の総文字数に対応する数字のシーケンスを作成し、それらのシーケンスを開始番号として MID 関数に与えます。 B2 では、式のこの部分は次のように表示されます。
mid(a2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
MID関数は、A2から各文字を先頭から順に取り出し、配列として返します。
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
この配列は1倍されます。数値は変化せずに生き残りますが、数値以外の文字を掛けると#VALUE!エラーが発生します。
{2;1;0;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!#値!#値!;#値!#値!#値!#値!#値!#値!#値!#値!#値!#値!#値!#値!#値!値}
IFERROR関数は、これらのエラーを処理し、空文字列に置き換えます。
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
この最終的な配列は TEXTJOIN 関数に渡され、TEXTJOIN 関数は配列の中の空でない値を連結して ( 空白を無視する の引数を TRUE に設定した場合)、区切り文字に空文字列("")を使用します。
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Excel 2016 - 2007の場合、解決策も存在しますが、数式ははるかに複雑です。 このチュートリアルで見つけることができます:Excelで数字を抽出する方法。
数字からテキストを削除するカスタム機能
すべてのバージョンのExcelに対応しています。
古いバージョンのExcelを使用している場合や、上記の数式を覚えるのが大変な場合は、より簡単な構文で、次のような使いやすい名前の関数を独自に作成することができます。 テキストを削除する ユーザー定義関数(UDF)は2つの方法で記述することができます。
VBA コード 1:
ここでは、元文字列の文字を1つずつ見て、それが数字かどうかをチェックします。 数字の場合は、その文字が結果の文字列に追加されます。
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA コード 2:
このコードでは、正規表現を処理するオブジェクトを作成しています。 RegExpを使用して、ソース文字列から数字0-9以外のすべての文字を削除しています。
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End Function小さなワークシートでは、どちらのコードも同じように動作しますが、関数が何百回、何千回と呼び出される大きなワークシートでは、VBScript.RegExp を使用するコード 2 の方が速く動作します。
ワークブックにコードを挿入する詳しい手順は、こちら「ExcelでVBAコードを挿入する方法」をご覧ください。
どちらの方法をとるにせよ、エンドユーザーの立場からすれば、テキストを削除して数字を残すという機能は、このようにシンプルなものです。
RemoveText(文字列)例えば、セルA2から数字以外の文字を削除する場合、B2の数式は次のようになります。
=RemoveText(A2)
それを列挙してコピーするだけで、このような結果になります。
注:ネイティブの数式もカスタム関数も、出力は 数値列 数値に変換するには、結果を1倍するか、ゼロを加えるか、数式をVALUE関数で囲みます。 例えば、次のようになります。
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))とする。
Excelでテキスト文字列から数字を削除する方法
このソリューションは、Excel 365、Excel 2021、およびExcel 2019で動作します。
英数字の文字列から数字を削除する式は、前の例で説明したものとほとんど同じです。
Excel 365-2019の場合。
textjoin("", true, if(iserr(mid( セル , ROW(INDIRECT("1:"&LEN()。 セル ) ), 1) *1), mid( セル , ROW(INDIRECT("1:"&LEN()。 セル ))), 1), ""))エクセル2019では、覚えておくと、それを 配列式 CtrlキーとShiftキーとEnterキーを同時に押すことで、「Ctrl」キーと「Shift」キーと「Enter」キーを同時に押すことができます。
Excel 365と2021の場合。
textjoin("", true, if(iserror(mid( セル , シーケンス(len( セル 1) *1), MID( セル , シーケンス(len( セル )), 1), ""))例えば、A2の文字列から数字を取り除くには、次のような式になります。
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), "") )
または
=textjoin("", true, if(iserror(mid(a2, sequence(len(a2)), 1) *1), mid(a2, sequence(len(a2)), 1), ""))
その結果、セルからすべての数字が削除され、テキスト文字が残される。
上のスクリーンショットに示すように、この数式は、文字列の先頭、末尾、途中のどの位置からも数字を除去します。 しかし、注意点があります。 は、数字とスペースで始まります。 というように、スペースが残ってしまうため、(B2のように)スペースが先行する問題が発生します。
余分なものを排除するために 文間 のように、TRIM関数で数式を囲みます。
=trim(textjoin("", true, if(iserror(mid(a2, sequence(len(a2)), 1) *1), mid(a2, sequence(len(a2)), 1), ""))
さて、結果はまったく問題なし!
この処方の仕組み
要するに、この式は前の例で説明したのと同じように動作します。 違いは、最終的に提供される配列からTEXTJOIN関数に、テキストではなく数字を削除する必要があることです。 それを行わせるために、IF関数とISERROR関数を組み合わせて使用します。
覚えているように、MID(...)+0は、同じ位置にあるテキスト文字を表す数値と#VALUE!エラーの配列を生成します。
{2;1;0;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!;#値!#値!#値!;#値!#値!#値!#値!#値!#値!#値#値!#値!#値!#値!#値!#値!値}
ISERROR関数はエラーを捕捉し、その結果のブール値の配列をIFに渡します。
{false;false;false;true;true;true;true;true;true}のようになります。
IF関数がTRUE(エラー)を検出すると、別のMID関数の助けを借りて、処理中の配列に対応するテキスト文字を挿入します。 IF関数がFALSE(数値)を検出すると、空の文字列に置き換わります。
{"";";";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d" }.
この最終配列はTEXTJOINに渡され、テキスト文字を連結して結果を出力する。
テキストから数字を削除するカスタム関数
すべてのバージョンのExcelに対応しています。
堅牢な数式はシンプルであるべきであることを念頭に置き、任意の数値文字を除去するユーザー定義関数(UDF)のコードを共有します。
VBA コード 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionVBA コード 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionRemoveText関数の場合と同様に、2番目のコードは、パフォーマンスを最適化するために、大きなワークシートで使用するのがよいでしょう。
ワークブックにコードを追加すると、このカスタム関数を使用してセルからすべての数値文字を削除することができます。
RemoveNumbers(文字列)私たちの場合、B2の式がそうです。
=RemoveNumbers(A2)です。
先頭のスペースを切り詰めるには、ネイティブの数式と同じようにTRIMの中にカスタム関数をネストします。
=TRIM(RemoveNumbers(A2))である。
数字とテキストを別列に分割
テキストと数字を2つの列に分けたいとき、1つの数式で済ませられたらいいですよね? そのためには、以下のコードを統合すればいいんです。 テキストを削除する と 番号の削除 という名前の関数を1つの関数に統合しました。 スプリットテキストナンバーズ または、単に スプリット などなど、お好きなようにどうぞ :)
VBA コード 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End機能VBA コード 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Function.新しいカスタム関数は、2つの引数を必要とします。
SplitTextNumbers(文字列, is_remove_text)どこ is_remove_text は、どの文字を削除するかを示すブール値である。
- TRUE または 1 - テキストを削除し、数字を維持します。
- FALSE または 0 - 数字を削除し、テキストを保持します。
今回のサンプルデータセットでは、以下のような形式をとっています。
数字以外の文字を削除する場合。
=SplitTextNumbers(A2, TRUE)
数字を削除する場合。
=SplitTextNumbers(A2, FALSE)
ヒント:先頭のスペースが問題になる可能性があるので、数字を削除する数式は必ずTRIM関数で折り返すことをお勧めします。
=TRIM(SplitTextNumbers(A2,FALSE))
数字や文字を削除する専用ツール
不必要に複雑にするのが嫌いな人のために、エクセルで文字や数字を削除する独自の方法を紹介します。
究極のスイートがExcelのリボンに追加されていると仮定すると、このようになります。
- について エイブルビットのデータ タブで テキスト グループをクリックします。 削除 > 文字の削除 .
ヒント:結果に先頭のスペースが含まれている場合、「スペースのトリミング」ツールを使えば、すぐに取り除くことができます。
以上、エクセルで文字列からテキストや数字を削除する方法でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。
ダウンロード可能なもの
Excelでテキストや数字を削除する - 例 (.xlsm ファイル)
Ultimate Suite - 体験版 (.exeファイル)