Excelで文字列から全角カタカナのみを抽出・削除させたいときはないでしょうか。
けど、そんな中で悩むことは、
・関数やVBAで効率的に行いたいがやり方がわからない。
ですよね。
今回はそんなお悩みを解決する
・VBAで文字列から全角カタカナのみを抽出・削除する方法
についてまとめます!
もくじ
関数で文字列から全角カタカナのみを抽出する
関数で文字列から全角カタカナのみを抽出・削除する方法について説明をします。
方法は文字列から一文字づつ取り出し、全角カタカナか否かを判定し、抽出であれば全角カタカナと判定した値のみ出力し、削除であれば全角カタカナと判定できなかった文字のみを出力するものです。
今回のサンプルデータは以下の通り、各全角文字、半角カタカナの混合のパターンで全角カタカナのみを抽出・削除していきます。
全角カタカナのみ抽出
全角カタカナを削除
関数その1:文字列から全角カタカナのみを抽出する
MID関数で取得した文字列から1文字づつ取り出し、CODE関数で全角カタカナかどうか判定し、全角カタカナである場合はそのままの値、全角カタカナでない場合は””を出力し、出てきた結果をTEXTJOIN関数で結合する方法となります。
ひらがなと全角カタカナを判別し全角カタカナのみ抽出する
サンプルではB2にひらがなと全角カタカナの文字混合の値を入力しています。
数式は以下の通りです。
出力するD2へ数式を入力します。
=TEXTJOIN("",TRUE,IF(CODE(MID(B2,SEQUENCE(LEN(B2)),1))>=9505,MID(B2,SEQUENCE(LEN(B2)),1),""))
関数について説明します。
まず、セルに入力されている文字を一文字づつ取り出していきます。
使う関数はSEQUENCE関数で、連続した配列を作成する関数です。
その値にLEN関数でB2の文字数を取得し、その分の配列を作成します。
B2の値は9文字ですので、9個分の配列ができる形となります。
=SEQUENCE(LEN(B2))
次にMID関数を使い、抽出したい文字を指定します。
MID関数は取得開始位置の中間指定が可能な関数です。
以下のように指定することで抽出したい文字を指定します。
第二引数の開始位置に配列を指定すると配列の値を取得し、その値を位置番号として文字列の文字を取得できます。
MID関数の第二引数に「SEQUENCE(LEN(B2))」、文字数は1文字を指定します。
=MID(B2,SEQUENCE(LEN(B2)),1)
結果は以下のようになります。
次にMID関数が取得した文字をCODE関数で文字コードに変換します。
CODE(<文字>)
CODE関数とは指定した文字列の文字コード番号を返す関数です。
全角カタカナの文字コード番号は9504~9587となりますので、取得した文字が文字コードの範囲内かどうかで判定していきます。
B2に入力されているひらがなのコード範囲は9249-9331となりますので、境界線を9505とし、9505以上であるかどうかで全角カタカナの判定をしています。
=IF(CODE(MID(B2,SEQUENCE(LEN(B2)),1))>=9505,MID(B2,SEQUENCE(LEN(B2)),1),"")
仕上げにTEXTJOIN関数で文字を結合していきます。
=TEXTJOIN("",TRUE,IF(CODE(MID(B2,SEQUENCE(LEN(B2)),1))>=9505,MID(B2,SEQUENCE(LEN(B2)),1),""))
TEXTJOIN関数の構文は以下の通りです。
サンプルでは区切り記号に空文字を指定し、空の文字は無視、という条件にしています。
=TEXTJOIN("",TRUE,<全角カタカナ判定文字>1,<全角カタカナ判定文字>2,・・・)
実行結果を確認してみましょう。
はい、全角カタカナのみが抽出されましたね。
そのままD3へドラッグし、2行目にも数式をコピーしましょう。
半角カタカナと全角カタカナを判別し全角カタカナのみ抽出する
次は半角カタカナとの混合文字の判定となります。
半角カタカナのコード範囲は161-223ですので、ひらがなと同じ条件で全角カタカナの判定ができていることがわかります。
漢字と全角カタカナを判別し全角カタカナのみ抽出する
D4へ数式をドラッグしましょう。
今度は漢字の混合となりますが、漢字のコード範囲は12321以降となりますので、条件にマッチしません。
そこで全角カタカナのコード範囲の上限である、9805以下であるかという条件を追加します。
=TEXTJOIN("",TRUE,IF(CODE(MID(B4,SEQUENCE(LEN(B4)),1))>=9505,IF(CODE(MID(B4,SEQUENCE(LEN(B4)),1))<=9590,MID(B4,SEQUENCE(LEN(B4)),1),""),""))
全角カタカナのみとなりましたね。
全角カタカナの判定に全角記号を含める
D5へ数式をドラッグしましょう。
最後は全角記号との混合となりますが、「カー」の「ー」は全角記号のコード8505となりますので、条件にマッチしません。
言葉として意味を持たせるために「ー」を含めるようにします。
コード範囲9505以上でない場合の条件に「ー」を判定する条件を追加します。
=TEXTJOIN("",TRUE,IF(CODE(MID(B5,SEQUENCE(LEN(B5)),1))>=9505,IF(CODE(MID(B5,SEQUENCE(LEN(B5)),1))<=9590,MID(B5,SEQUENCE(LEN(B5)),1),""),IF(CODE(MID(B5,SEQUENCE(LEN(B5)),1))=8508,MID(B5,SEQUENCE(LEN(B5)),1),"")))
全角記号つきの「カー」となりましたね。
関数その2:文字列から全角カタカナのみを削除する
次は文字列の内、全角カタカナのみを削除します。
MID関数で取得した文字列から1文字づつ取り出し、CODE関数で全角カタカナかどうか判定し、全角カタカナである場合は空白の””、全角カタカナでない場合はそのままの値を出力し、出てきた結果をTEXTJOIN関数で結合する方法となります。
ひらがなと全角カタカナを判別し全角カタカナのみ削除する
サンプルでは抽出と同じくB2にひらがなと全角カタカナの文字混合の値を入力しています。
数式は以下の通りです。
出力するD2へ数式を入力します。
=TEXTJOIN("",TRUE,IF(CODE(MID(B2,SEQUENCE(LEN(B2)),1))<9505,MID(B2,SEQUENCE(LEN(B2)),1),""))
IF関数以外の処理は抽出と同様であるため割愛します。
条件判定のIF関数ですが、各文字コード判定の不等号を反転させ、抽出時と反対の条件(全角カタカナである場合から全角カタカナでない場合)にし、全角カタカナ以外の文字を抽出することにより削除を行っていきます。
ひらがなのコード範囲は9249-9331となりますので、境界線を9505とし、9505より小さい場合抽出する条件にすることにより全角カタカナを除いたひらがなだけが抽出されるようにしています。
結果を確認しましょう。
はい、全角カタカナが削除されひらがなのみになりましたね。
半角カタカナと全角カタカナを判別し全角カタカナのみ削除する
半角カタカナと全角カタカナの混合文字の判定となります。
半角カタカナのコード範囲は161-223ですので、ひらがなと同様の判定結果となります。
半角カタカナのみとなりましたね。
漢字と全角カタカナを判別し全角カタカナのみ削除する
D4へ数式をドラッグしましょう。
今度は漢字の混合となりますが、漢字のコード範囲は12321以降となりますので、条件にマッチせず漢字部分が表示されません。
そこで全角カタカナのコード範囲の上限である、9805より大きいかという条件を追加します。
=TEXTJOIN("",TRUE,IF(CODE(MID(B4,SEQUENCE(LEN(B4)),1))<9505,MID(B4,SEQUENCE(LEN(B4)),1),IF(CODE(MID(B4,SEQUENCE(LEN(B4)),1))>9590,MID(B4,SEQUENCE(LEN(B4)),1),"")))
できましたね。
全角カタカナの判定に全角記号を含める
全角カタカナ抽出の時、全角記号を含めるにあたり条件文を追加しましたが、削除の時は条件が全角カタカナではない判定した条件となっているため、全角記号も含む形となっていますので修正は不要です。
そのままD5へドラッグしましょう。
問題なく結果が表示されましたね。
VBAで文字列から全角カタカナのみを抽出・削除する
VBAその1:文字列から全角カタカナのみを抽出する
VBAで文字列から全角カタカナのみを抽出してみましょう。
B2からB3まで入力されている値を取得し、 全角カタカナと全角記号「ー」の正規表現”[ァ-ヴー]”で判定を行い全角カタカナを抽出、D列へ結果を返します。
以下サンプルコードです。
Sub 文字列から全角カタカナのみを抽出する()
Dim strTemp As Variant
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim strMoji As String
Dim strMojiTemp As String
'処理対象のセルをレンジ指定します。
strTemp = Range("B2:B5")
'配列に格納された値すべてを対象に処理します。
For i = LBound(strTemp, 1) To UBound(strTemp, 1)
For j = LBound(strTemp, 2) To UBound(strTemp, 2)
For k = 1 To Len(strTemp(i, j))
strMoji = Mid(strTemp(i, j), k, 1)
If strMoji Like "[ァ-ヴー]" Then
strMojiTemp = strMojiTemp & strMoji
End If
Next
Cells(i + 1, j + 3) = strMojiTemp
strMoji = ""
strMojiTemp = ""
Next
Next
End Sub
値がある対象レンジ”B2:B5″を変数に指定します。
strTemp = Range(“B2:B5”)
二次元配列に格納された値すべてを対象に処理します。
For i = LBound(strTemp, 1) To UBound(strTemp, 1)
For j = LBound(strTemp, 2) To UBound(strTemp, 2)
正規表現”[ァ-ヴー]”を使い全角カタカナと全角記号「ー」の判定をおこない、文字数分繰り返します。
For k = 1 To Len(strTemp(i, j))
strMoji = Mid(strTemp(i, j), k, 1)
If strMoji Like “[ァ-ヴー]” Then
strMojiTemp = strMojiTemp & strMoji
End If
Next
結果を対象セルへ出漁します。
Cells(i + 1, j + 3) = strMojiTemp
文字列から全角カタカナのみを抽出できました。
VBAその2:文字列から全角カタカナのみを削除する
次にVBAで文字列から全角カタカナのみを削除してみましょう。
B3からB4まで入力されている値を取得し、 全角カタカナ[ァ-ヴ]の正規表現で全角カタカナの判定を行い全角カタカナ以外を抽出、D列へ結果を返します。
以下サンプルコードです。
Sub 文字列から全角カタカナのみを削除する()
Dim strTemp As Variant
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim strMoji As String
Dim strMojiTemp As String
'処理対象のセルをレンジ指定します。
strTemp = Range("B2:B5")
'配列に格納された値すべてを対象に処理します。
For i = LBound(strTemp, 1) To UBound(strTemp, 1)
For j = LBound(strTemp, 2) To UBound(strTemp, 2)
For k = 1 To Len(strTemp(i, j))
strMoji = Mid(strTemp(i, j), k, 1)
If Not strMoji Like "[ァ-ヴ]" Then
strMojiTemp = strMojiTemp & strMoji
End If
Next
Cells(i + 1, j + 3) = strMojiTemp
strMoji = ""
strMojiTemp = ""
Next
Next
End Sub
値がある対象レンジ”B4:B5″を変数に指定します。
strTemp = Range(“B4:B5”)
正規表現”[ァ-ヴ]”で全角カタカナの判定を行い、抽出時と反対にNotで否定し、全角カタカナでない場合に値を出力するようにします。
If Not strMoji Like “[ァ-ヴ]” Then
strMojiTemp = strMojiTemp & strMoji
End If
結果を対象セルへ出漁します。
※B4から開始ですので、「i + 3」へ変更しています。
Cells(i + 3, j + 3) = strMojiTemp
実装して実行してみましょう。
文字列から全角カタカナのみを削除できましたね。
VBAの実装手順
実装手順は以下の通りです。
今回はExcel側にこのVBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。
さいごに
いかがでしょうか。
今回は、
・VBAで文字列から全角カタカナのみを抽出・削除する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す