natumi66
@natumi66

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

エクセルでのカタカナのチェック

解決したいこと

excelにてカタカナの列があります。
全角半角カナ・全角半角数値・「、」はOKとし、
それ以外はエラーとして〇を違う列に出力したいと思います。
その条件として適切なチェック方法が知りたいです。
お分かりの方お教えください。

漢字とひらがななどをエラーとしたいです。

0

7Answer

image.png

適当なセルに許容する文字列をすべて入力します
例では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処理をセル関数の中で実現させています。

3Like

強引にエクセルの関数だけで実装するとなると以下のようになると思います。

image.png

① 検索したい列に含まれうる文字数分、数字を横に展開していきます。(今回は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,"○","×")))

image.png
(文字コード表 シフトJIS(Shift_JIS))

④ あとは③で判定した結果のなかに「×」が含まれていたらエラーとしてC列に結果を出力しています。

=IF(COUNTIF(I3:M3,"×")=0,"","〇")

VBAで正規表現を使って実装すると以下のようなコードで実現できると思います。
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]:全角数値
[ァ-ヶ]:半角カナ
[ヲ-゚]:全角カナ
[、]:、(読点)


余談ですが、エクセルのある列にカナしか含まれてないようなデータを作りたいのであれば、エクセルのデータを作る側のシステムの方でカナしか含まれないような制御をしておくのが適切かと思います。

また、エクセルは表計算ソフトなので複雑な文字列のチェックなど行うにはあまり向いていないですね。

1Like

Excel のワークシート上でチェックする必要はありますか。

日常的に編集されるワークシートであれば、数式を設定しておきたいというお気持ちは分ります。

そうではなく、ときどき調べたいということであれば、こちらから何か正規表現の使えるエディタをダウンロードしてデータをコピペして不正データを検索するという手もあります。

検索条件は以下のような感じでしょうか。

[^ァ-ヶヲ-゚0-90-9、\n]*

Web サービスに抵抗がなければこういったものもあります。

参考:ブラウザから手軽にチェックできる正規表現テストツールまとめ

1Like

その列でエラーにしたいのは、漢字とひらがなを含むものをエラーにしたいということでしょうか?それとも、すべての文字が漢字とひらがなであった場合でしょうか?

また、VBAで正規表現を使用してチェックをすれば実現できそうですが、エクセルの関数のみでチェックしたいということでしょうか?

0Like

回答ありがとうございます。

漢字とひらがなを含むものをエラーとしたいです。

エクセルのみの関数でチェックができるようでしたらそちらで
行いたいですが、VBAをあまり触ったことがない状態でわかっていません。

0Like

頭文字だけのチェックでよければCODE関数またはUNICODE関数で確認できます。

CODE関数を使った例
=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は適当なセルに置き換えてください。
  • 48~57は半角数字(0~9)
  • 166~223は半角カタカナ
  • 9505~9590は全角カタカナ
  • 8482は「、」

セルに入っている文字列全てをチェックしたいのであれば、VBAを使うしかないと思います。

0Like

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌