日本語(ひらがな・カタカナ・漢字)があるか判断する方法
Sub test1()
Dim Str As String
Dim MidStr As String
Dim i As Long
Str = "aiu123あいう"
For i = 1 To Len(Str)
MidStr = Mid(Str, i, 1)
If Asc(MidStr) < 0 Then
MsgBox "日本が混ざっています"
Exit Sub
End If
Next
End Sub
このマクロを実行すると、「あ」の順番になった時にうまく反応するのですが、
いまいちASC関数についてよくわからないので教えてください。
ASC関数でマイナスになるものは全て日本語なのでしょうか?
Asc(MidStr) < 0でいいのか、そこが知りたいです。
a→97
i→105
u→117
1→49
2→50
3→51
あ→-32096
い→-32094
う→-32092
でした。
ご回答よろしくお願いします。
No.4
- 回答日時:
>Asc(MidStr) < 0でいいのか、そこが知りたいです。
うーん、何をお使いか書いていないので、もしExcelをお持ちでないと、調べるのはちょっと面倒ですが。もしあれば、その質問自体はご質問者さんが30分程度で調べられると思うのですが。
単純に、文字コード"<0" では、質問のタイトルどおりにはいきませんが、JISと限定すれば、概ね問題ないように思います。
2点ほど、それぞれの回答者から注文がついているけれども、大きな問題ではありません。
>ASC関数でマイナスになるものは全て日本語なのでしょうか?
記号や全角英数も入っています。JISの範囲で、半角にならない負のコードは、みな日本字と考えてよいように思うけれど、判断が分かれるところです。理由は、JISだけならよいのですが、Unicode文字がまじるからです。しかし、Unicodeの2バイトの上位バイトがないものは、排除するという考え方もあります。#1さんのJISの最上位ビットの話も悪くないので、コード化してみて出来ましたが、JISですから、一手間多くちょっと複雑になりますね。
日本字は半角もありますが、JISの日本字の正のコードは、半角のカタカナと一部だけしかありません。コードで探すなら、半角カタカナは、\xA1-\xDF(161-223)までです。(1)がそのサンプルです。
#1さんの
>全角の英数字も日本語に含める気ですか?
全角の英数や符号が不要なら、一端、半角にすればいいでは?
(StrConv(arg, vbNarrow))
#2さんの考え方は、記号抜きのANSIということですね。(2)は、失礼ながら、#2さんのコードを参考にして作りました。質問の趣旨とは違うかもしれませんが、#2の考え方に1票。
(3)のGetPhoneticは、万能ではありませんが、日本語限定ならいいかも?よみがながとれない漢字は、例えば、にんべん(イ)に、王という字「仼」(\u4EFC)など10個程度あります。ふだん使わない字ですから問題ないでしょう。
(4)は、うまくコードの貼り付けができない可能性がありますので、文字コードを探すか、中身をこのように書き換えください。漢字の最後は、「鶴[\u9DB4]」ではありません。偏が、ウ冠にオオトリで、造りは鳥の「鶴[\uFA2D]」のほうです。これは、Windowsですが、UnicodeのFAラインのどれでもよいです。
なお、\u は、Unicodeで、\x は、16進の正規表現の書き方です。
(2)の失敗した時の中身の代替え
Dim arg As String
arg = ChrW(Val("&H3041")) & "-" & ChrW(Val("&H30FE"))
arg = arg & ChrW(Val("&HFF62")) & "-" & ChrW(Val("&HFF9E"))
arg = arg & ChrW(Val("&H4E00")) & "-" & ChrW(Val("&HFA2D"))
IsJapanese_Like = arg1 Like "*[" & arg & "]*"
ご質問者さんのは、かなり有名なVBAマクロの問題ですが、どれもズバリというものではありません。他にも、3つ、正規表現で探す方法と、#1さんの話を元にしたものと、Unicodeの2バイトの上位桁を探す方法を考えましたが、紙面の都合上、やめました。
それと、VBAには、あまり予約語がないので通りますが、「Str As String」と変数にしていますが、VB.Net ならいいけれども、VBAでは、Str は、VB関数のひとつですから、やめたほうがよいです。
Sub Main1()
Dim arg1 As String
arg1 = "aiu1230ぁ!"
If cd_JCheck(arg1) Then '(1)
'If Like_IsJapanese(arg1) Then '(2)
'If IsJapanese(arg1) Then '(3)
'If IsJapanese_Like(arg1) Then '(4) 'コメントアウトを入れ替えて試してください。
MsgBox "日本字が入っています", 64
Else
MsgBox "日本字が入っていません。!"
End If
End Sub
'(1) 質問者さんのコードの手直し
Function cd_JCheck(arg1 As String) As Boolean
Dim i As Long
Dim j As Long
Dim a As String
Dim flg As Boolean
arg = StrConv(arg1, vbNarrow)
For i = 1 To Len(arg1)
a = Mid(arg1, i, 1)
j = Asc(a) 'JISコード
If j < 0 Or (j > 160 And j < 224) Then '半角の範囲
flg = True
Exit For
End If
Next i
cd_JCheck = flg
End Function
'(2) #2さんの回答を参考-記号も排除
Function Like_IsJapanese(arg1 As String) As Boolean
Like_IsJapanese = StrConv(arg1, vbNarrow) Like "*[!0-9A-Za-z]*"
End Function
'(3) 'Excel以外は、Excelオートメーションか、ExcelをComが必要
Function IsJapanese(arg1 As String) As Boolean
'正味2行で足りる
Dim myStr1 As String
Dim myStr2 As String
myStr1 = StrConv(StrConv(arg1, vbWide), vbHiragana)
myStr2 = Application.GetPhonetic(arg1)
IsJapanese = StrComp(myStr1, myStr2, 0) 'バイナリ比較
End Function
'(4) VBA/VB一般(ネット経由だと文字が換えられる可能性あり)
'入力前に、文字コードを確認する必要あり
Function IsJapanese_Like(arg1 As String) As Boolean
'ひらがな+カタカナ+漢字
'\u3041-\u30FE \uFF62-\uFF9E \u4E00-\uFA2D 入力文字[鶴]に注意!
IsJapanese_Like = arg1 Like "*[ぁ-ヾ「-゛一-鶴]*"
End Function
私は、数年ぶりのVBAで、あくまでもトレーニングで書きました。
No.2
- 回答日時:
こんばんは!
直接の回答ではないのですが・・・
タイトル部の
>日本語(ひらがな・カタカナ・漢字)があるか判断する方法
に関していえば
ASC関数を使用するより、私であれば
↓のような感じでやります。
Sub test1()
Dim Str As String
Dim MidStr As String
Dim i As Long
Dim k As Long
Str = "aiu123あいう"
For i = 1 To Len(Str)
MidStr = Mid(Str, i, 1)
If Not StrConv(MidStr, vbNarrow) Like "[A-z 0-9]" Then
k = k + 1
End If
Next i
If k > 0 Then
MsgBox "日本語が混ざっています"
Else
MsgBox "アルファベットもしくは数字のみです"
End If
End Sub
すなわちある文字列にアルファベット・数値以外があれば k=k+1 とし
k>0 の場合はアルファベット・数値以外の文字があると判断できる。
ご希望の
>Asc(MidStr) < 0でいいのか、そこが知りたいです。
の回答でないのでごめんなさいね。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら…
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
セル内の文字列が日本語か英語かを厳密に識別したい
Visual Basic(VBA)
-
VBAによる第3、4水準文字の判定について
Visual Basic(VBA)
-
-
4
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
5
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
6
JIS水準漢字の選別方法教えてください
その他(コンピューター・テクノロジー)
-
7
エクセルでの漢字、カタカナ、ひらがななどの抽出について
Excel(エクセル)
-
8
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
9
Excel 2000 のマクロで漢字の含まれているセルを検索する方法
Excel(エクセル)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
エクセル ひらがなの文字を抽出
Excel(エクセル)
-
12
漢字の含む数値列の検索方法
Excel(エクセル)
-
13
エクセルでセルのデータがカタカナかどうか調べたい
Excel(エクセル)
-
14
文字種(漢字・ひらがな・カタカナ・句読点など)を判別する方法
Excel(エクセル)
-
15
JIS第三、第四水準の漢字は入力可能になったか?
Windows 8
-
16
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
17
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
18
【ExcelVBA】各セルをダブルクォーテーションで括ってCSV保存したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「初め」か「始め」どちら?
-
この文字の変換方法を教えて
-
”ギリギリ” を丁寧に言うには
-
「時間がたつ」の「たつ」は、...
-
「ん」一文字の漢字はありますか?
-
木へんに夕に卩ってどう読みま...
-
“わく”に宛てる漢字について
-
日差しが差す(陽射しが射す)...
-
「お客様お一人おひとり」と書...
-
数を数える、「正」の字。読み...
-
0(ゼロ)とO(オー)の書き分け...
-
「取組」と「取り組み」の違い
-
「~していただきまして、あり...
-
「基」と「元」の使い方
-
「50万円を超える」は50万円以...
-
同じ形が2つ並ぶ漢字(林・炎...
-
対策を採る?取る?
-
「ぬ」に濁点(ぬ゛)の読み方...
-
次頁はなんと読みますか?
-
文章にする時、ひらがなの「と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「初め」か「始め」どちら?
-
”ギリギリ” を丁寧に言うには
-
この文字の変換方法を教えて
-
「取組」と「取り組み」の違い
-
「時間がたつ」の「たつ」は、...
-
「ん」一文字の漢字はありますか?
-
対策を採る?取る?
-
“わく”に宛てる漢字について
-
次頁はなんと読みますか?
-
「お客様お一人おひとり」と書...
-
「50万円を超える」は50万円以...
-
魚へんの下の点々が大
-
「基」と「元」の使い方
-
木へんに夕に卩ってどう読みま...
-
「~していただきまして、あり...
-
0(ゼロ)とO(オー)の書き分け...
-
住所の「字(あざ)」の英文表...
-
奥さんと同じ布団で寝ると勃起...
-
19歳未満はどっち??
-
日差しが差す(陽射しが射す)...
おすすめ情報