• ベストアンサー

セル内の文字列が日本語か英語かを厳密に識別したい

セル内(C3)にある文字列に、漢字・ひらがな・全角カタカナ・半角カタカナのうち、1個でもあれば、その文字列すべてを、右隣のセル(C4)に移し、それ以外の場合はさらにその右隣(C5)に移したいのですが、 たとえば、 (C3)「AMERICA/JAPAN」の場合は、(C5)に「AMERICA/JAPAN」と移します。 (C3)「AMERICA/Japan」の場合は、(C5)に「AMERICA/Japan」と移します。 (C3)「AMERICA/JAPAN#$%?<>」の場合は、(C5)に「AMERICA/JAPAN#$%?<>」と移します。 しかし (C3)「日本とアメリカ#$%?<>」の場合は、(C4)に「日本とアメリカ#$%?<>」と移します。 (C3)「日本/america」の場合は、(C4)に「日本/america」と移します。 (C3)「日本/アメリカ」の場合は、(C4)に「日本/アメリカ」と移します。 (C3)「Japanとamerica」の場合は、(C4)に「Japanとamerica」と移します。 VBAで処理する場合、文字コード、Chr関数、Mid関数を使えばいいと思ってプログラムを組むところです。 ところが、漢字のコード番号が何番から何番までか、よくわかりません。カタカナ・ひらがなは調べられます。 正確でなくとも<>=の数値処理の範囲指定ですので、漢字コードの範囲を教えてくださいませんか。 また、この処理目的のために、よりシンプルなプログラムがありましたら教えてくださいませんか。 よろしくお願いします。 ※簡単に言いますと、セル内が日本語の文章か英語の文章かを識別する作業です。

noname#18526
noname#18526

質問者が選んだベストアンサー

  • ベストアンサー
  • hanka2
  • ベストアンサー率38% (15/39)
回答No.5

日本語かどうかの判定関数です。 引数の中身が日本語ならTrueをそれ以外ならFalseを返します。 ------------------ Function IsJapan(Arg As String) As Boolean IsJapan = Not (LenB(StrConv(StrConv(StrConv(StrConv(Arg, vbWide), vbHiragana), vbNarrow), vbFromUnicode)) = Len(Arg)) End Function

noname#18526
質問者

補足

目からうろこ・・です。皆さん有難うございます。

その他の回答 (4)

  • bys07405
  • ベストアンサー率38% (37/97)
回答No.4

#1です。 文字列として"ABC"と"いろは"とあるとします。 JIS関数で全角変換をすると "ABC"→"ABC" "いろは"→"いろは" この変換後の文字列数をLENB関数で数えると(文字数をバイト単位で数える) "ABC"→6文字 "いろは"→6文字 となります。 ASC関数で半角変換をすると "ABC"→"ABC" "いろは"→"いろは" この変換後の文字列数を同じくLENB関数で数えると "ABC"→3文字 "いろは"→6文字 ここで JIS関数で変換した文字数=ASC関数で変換した文字数*2 だったら英語、イコールでなければ日本語が混じっていると判断しています。 ただ、ここで書いていて気づいたのですがカタカナは半角カタカナがあるためうまくいきませんね。「漢字・ひらがなが1個でも」という条件にしか適合しません。申し訳ありません。 (例題はカタカナと一緒に漢字またはひらがながあったためたまたまうまくいっていました) もう一件追加の質問は、その質問のリンク先か質問Noがあるとありがたいです...

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 以下は、Web サイトの自動変換機能で、全角になっていますから、以下の部分だけ半角に変換をしてください。 Function FindJapanese(Text As String) の中の → If Text Like "*[ヲ-゜]*" Or _ なお、一応、大ざっばに考えたものですから、細かいチェックはなされておりません。 '-------------------------------------------- Sub CheckCharMacro() Dim c As Range For Each c In Range("C3")  'Selection  If FindJapanese(c.Value) Then    c.Offset(1).Value = c.Value '入っている  Else    c.Offset(2).Value = c.Value '入っていない  End If Next c End Sub Function FindJapanese(Text As String) '漢字・ひらがな・全角カタカナ・半角カタカナ '注意 最初のカタカナは、半角に変更してください。 If Text Like "*[ヲ-゜]*" Or _   Text Like "*[ぁ-ヶ]*" Or _   Text Like "*[一-龠]*" Then  FindJapanese = True Else   FindJapanese = False End If End Function '-------------------------------------------- >漢字のコード番号が何番から何番までか、よくわかりません。 VBAならば、漢字コードは、Unicodeの範囲を指定すればよいのでは?  [&H4E00-&H9FA5] 一-龠(これ以上は、ShifJISにありません。4文字漢字が足りません。正確さを記すなら、Unicode入力をするか、コードで指定してください)正規表現でも可能です。その場合は、直接コードを指定すればよいです。

noname#18526
質問者

お礼

感謝。もう一つ質問を関連で書きました。 よろしかったら。お助けください。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>漢字コードの範囲を教えてくださいませんか。 下記は、逆に「半角コード以外」が含まれるかで判断しています。 Sub sample() Dim str As String Dim i As Integer Dim flg As Boolean str = "japan/にほん" For i = 1 To Len(str) If AscB(Mid(str, i)) > 127 Or AscB(Mid(str, i)) < 32 Then flg = True Exit For End If Next If flg Then MsgBox "日本語が含まれています。" Else MsgBox "日本語は含まれていません。" End If End Sub

noname#18526
質問者

お礼

感謝。少し時間をください。理解してみます。

  • bys07405
  • ベストアンサー率38% (37/97)
回答No.1

下記のような関数で例に挙げられている内容を満足できましたが、このようなものでも大丈夫でしょうか。 セルC4に =IF(LENB(JIS(C3))=LENB(ASC(C3))*2,C3,"") セルC5に =IF(LENB(JIS(C3))<>LENB(ASC(C3))*2,C3,"") 内容としては元セルの文字列を全角変換したときの文字数(バイト単位)が元セルの文字列を半角変換した時の文字数*2の値だったら英語と判断するというものです。 全ての文字列で満足するかわかりませんが、参考に。

noname#18526
質問者

補足

関数処理出来るんですね。ほんとうに目からうろこです。少し、理論をご教授願いたいのですが。文字コードに関する知識が少し弱いものですから。・・・ それから、もう1件追加の質問も書きました。関連です。関数で処理できれば、有難いのですが、・・・。感謝。

関連するQ&A

  • マクロを使って文字列を分類したい。

    マクロを使って、次の処理を行うマクロを作りたいのですが、 まず、漢字・ひらがな・カタカナ・数時・アルファベットを識別するコードの抽出方法と、コードの一覧がわかりません。 それから、文字列の処理の関数がなかなか思いつきません。 2年ほどマクロを使っていません。エクセルも2007になり、かなり勝手が違います。 できれば、マクロを示していただければありがたいのですが、 重要なヒントを示していただいても構いません。 ----------------------------------------------- セル(H、5)の中に、いろいろな文字列があります。 例えば、 「東京1月アメリカEUやまとChinaイギリス日本2009年おわり」 ですが、 これを 漢字をA列に1行から順に、 東京 月 日本 年 ひらがなをB列に1行から順に、 やまと おわり カタカナをC列に1行から順に、 アメリカ イギリス 数字をD列に1行から順に、 1 2009 アルファベットをE列に1行から順に、 EU China というように出力するマクロを作りたいのです。 よろしくお願いします。

  • エクセルでセルの中身が漢字かどうか識別する方法は?

    セルの内容が、数値か、文字列か、空白かどうかは関数で出来るのですが、文字列の場合、それが漢字(ひらがな、かたかな含む)かそうではないのか識別できる関数またはVBAはないでしょうか?

  • 日本語が含まれていたらtrueを返すようにするには?

    UTF-8のコードの文字列の中に日本語(ひらがな、カタカナ、漢字)が含まれていたらtrueを返す関数はどのように書いたらよいのでしょうか?英語のみなら falseを返す関数でも構いません。どうかよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 日本人と日本語について

    日本人は平仮名カタカナ漢字、英数字など使い分けています。 カタカナを使って表現が絶妙な時もあります。 中国ではなんでも漢字で表します。 韓国はハングル文字と漢字です。 アメリカは英数字などだと思います。 他に知ってるのはフランス語です。 フランスは数字の表現が変だと思いました。 それぞれのお国柄で異なると思います。 ところでプログラミング言語は英数字ですね。 日本人の弱いところにもなるようです。 母国語の意味。 日本の言葉は奥が深くてとても難しいと思います。 日本語の表現についてのご考察をお願い申し上げます。

  • エクセルに特定の文字が入っていないセルをみつけたい

    数万行にわたって、ランダムにセルに 文字(漢字、カタカナ、ひらがな)が入っています。 その中で特定の漢字一文字、仮に「男」として 男が入っていないセルを全て発見したいのですが… ※但し、空白セルもありますが、空白セルを無視したい。 なにかよい条件式、もしくはマクロは ないものでしょうか? お知恵をおかしください。

  • セル内の文字列に複雑な処理をしたい

    セルの中の複数の異なる文字列を以下のように処理したいのですが、Excelの標準の文字列操作の関数で試行錯誤してみたのですが、どうもうまくできませんでしたので、ご存知の方がいらっしゃいましたらご教授ください。VBAで処理しないとできないかもしれませんがよろしくお願いします。 あるリストのC列に備考欄が設けてあり、次のようなデータが入っています。 4/30 みかんを買った(強制改行して) 5/1 りんごを売った 5/2 ぶどうを食べた 5/5 すいかを買った このセルを調べて、 (1) セル内に"みかん"と"りんご"という文字列があったら、これを取り出して、右隣のセルに表示           (結果)⇒ みかん りんご (2) セル内に"みかん"と"りんご"という文字列があったら、これを"A","B"に置き換えて、右隣のセルに表示          (結果)⇒ A B (3) セル内の数値データと"を食べた"、"を買った"、"を売った"を取り除いて、右隣のセルに表示          (結果) ⇒ みかん りんご ぶどう すいか   (4) セル内に"か"を含む文字列があったら個数に関係なく"A"に置換して右隣のセルに表示             (結果) ⇒ A   すべて取り出したい文字列(上の例ではみかん、りんご)や置換したい文字列(A、B)以外の文字列は全てクリアして表示しないようにします。少し複雑ですが、やり方をご存知の方がいらっしゃいましたら、お教えください。

  • 日本語

    日本語がどうやって出来たのか教えてください。 漢字は中国からやってきたのですよね? ひらがなやカタカナは、日本の人が作ったんですよね? なんでひらがなやカタカナを作ったんでしょうか?知っている方がいたら教えてください。お願いします。

  • バイナリファイル中の日本語文字列の取り出し

    C++にて,バイナリファイル中から日本語の文字列を取り出す処理に苦心しています. 具体的にはPDFファイルのXMPの記述部のXMLに日本語が含まれる場合なのですが,日本語(この場合はUTF-8ですね)の部分が含まれる部分をfread()で読み出してchar[]型の配列に入れて,printfで表示する(漢字コードの変換処理はとりあえずnkf等でUTF-8→SJISに変換)と文字化けします. Javaで同じような処理をしたときは,String の変数にUTF-8で日本語の文字列が挿入され,その文字列を扱うことができたのですが,C++での扱いがわかりません. ご教授よろしくおねがいします.

  • 日本語について

    日本語では、幾つの文字を使うのでしょうか? 例えば英語だとA~Zの26文字ですが、 日本語だと、ひらがな、カタカナ、漢字、 時にローマ字も使ったり。 おおよそでいいので、特に漢字の文字数を ご存知の方、教えて下さい。自分で調べようと 検索を試みましたが、ヒットしませんでした。

  • 日本語の基礎は中国語なのでしょうか?

    日本の文字の歴史について質問させていただきます。漢字が中国から伝わったあと、何らかのきっかけで、日本の使い方に合うように平仮名、カタカナを生んだという流れなのでしょうか?