エクセルでのカタカナのチェック
解決したいこと
excelにてカタカナの列があります。
全角半角カナ・全角半角数値・「、」はOKとし、
それ以外はエラーとして〇を違う列に出力したいと思います。
その条件として適切なチェック方法が知りたいです。
お分かりの方お教えください。
漢字とひらがななどをエラーとしたいです。
excelにてカタカナの列があります。
全角半角カナ・全角半角数値・「、」はOKとし、
それ以外はエラーとして〇を違う列に出力したいと思います。
その条件として適切なチェック方法が知りたいです。
お分かりの方お教えください。
漢字とひらがななどをエラーとしたいです。
適当なセルに許容する文字列をすべて入力します
例ではA1セル
判定を行いたいセルに以下の数式を配列数式として入力します
配列数式として入力させるには、CTRL+SHIFT+ENTER を同時に押します。
詳しくは "配列数式" でググって下さい
例ではB4セル以下
=SUM(IF(ISERR(SEARCH(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1),$A$1)),1,0)) ・・・これはダメ
=SUM(IF(ISERR(FIND(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1),$A$1)),1,0))
例ではSEARCHになっていますが*(ワイルドカード)があると誤判定することに気づきましたので、FINDに修正しました
説明にある通り返される値は、対象外の文字の文字数です。
このセルの値を元に○×を判定させてください。
例ではD4セル以下
=IF(B4=0,"○","×")
解説
ミソとなるのは
ROW(INDIRECT("1:"&LEN(A4)))
この部分で配列数式との組み合わせで1~文字数分のLOOP処理をセル関数の中で実現させています。
強引にエクセルの関数だけで実装するとなると以下のようになると思います。
① 検索したい列に含まれうる文字数分、数字を横に展開していきます。(今回は5とします)
② D列に以下のような関数を用意して、必要範囲分、関数をコピーします。(今回はD3~H16)
そうすることで検索したい列の文字列を1文字ずつに分解します。
=MID($B3, D$2,1)
③ H列(②の右端)より右のセルに以下のような関数を用意して、必要範囲分、関数をコピーします。(今回はI3~M16)
②で分解した文字を半角に変換した上で、文字コードの範囲を調べています。
1度半角に変換することで、全角カナのチェックを同時に行えるようにしています。
166~223:半角カナ
48~57:半角数値
164:「、」
=IF(AND(CODE(ASC(D3))>=166,CODE(ASC(D3))<=223),"○",IF(AND(CODE(ASC(D3))>=48,CODE(ASC(D3))<=57),"○",IF(CODE(ASC(D3))=164,"○","×")))
④ あとは③で判定した結果のなかに「×」が含まれていたらエラーとしてC列に結果を出力しています。
=IF(COUNTIF(I3:M3,"×")=0,"","〇")
Sub CheckKana()
Column = 2
Row = 3
word = Cells(Row, Column)
Dim RE, strPattern As String
Set RE = CreateObject("VBScript.RegExp")
Do While word <> ""
With RE
.Pattern = "[^0-90-9ァ-ヶヲ-゚、]"
.IgnoreCase = True
.Global = True
Set reMatch = .Execute(word)
If reMatch.Count > 0 Then
Cells(Row, Column + 1) = "○"
End If
End With
Row = Row + 1
word = Cells(Row, Column)
Loop
End Sub
正規表現で以下の文字列以外のものがあれば、エラーとして「○」を出力するようにしています。
[0-9]:半角数値
[0-9]:全角数値
[ァ-ヶ]:半角カナ
[ヲ-゚]:全角カナ
[、]:、(読点)
余談ですが、エクセルのある列にカナしか含まれてないようなデータを作りたいのであれば、エクセルのデータを作る側のシステムの方でカナしか含まれないような制御をしておくのが適切かと思います。
また、エクセルは表計算ソフトなので複雑な文字列のチェックなど行うにはあまり向いていないですね。
その列でエラーにしたいのは、漢字とひらがなを含むものをエラーにしたいということでしょうか?それとも、すべての文字が漢字とひらがなであった場合でしょうか?
また、VBAで正規表現を使用してチェックをすれば実現できそうですが、エクセルの関数のみでチェックしたいということでしょうか?
回答ありがとうございます。
漢字とひらがなを含むものをエラーとしたいです。
エクセルのみの関数でチェックができるようでしたらそちらで
行いたいですが、VBAをあまり触ったことがない状態でわかっていません。
頭文字だけのチェックでよければCODE
関数またはUNICODE
関数で確認できます。
=IF(OR(AND(48<=CODE(A1),CODE(A1)<=57),AND(166<=CODE(A1),CODE(A1)<=223),AND(9505<=CODE(A1),CODE(A1)<=9590),CODE(A1)=8482),"OK","NG")
A1
は適当なセルに置き換えてください。セルに入っている文字列全てをチェックしたいのであれば、VBAを使うしかないと思います。
This answer has been deleted for violation of our Terms of Service.