日本語(ひらがな・カタカナ・漢字)があるか判断する方法
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
VBAによる第3、4水準文字の判定について
Visual Basic(VBA)
-
セル内の文字列が日本語か英語かを厳密に識別したい
Visual Basic(VBA)
-
-
4
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
5
エクセルでの漢字、カタカナ、ひらがななどの抽出について
Excel(エクセル)
-
6
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
7
JIS第三、第四水準の漢字は入力可能になったか?
Windows 8
-
8
漢字の含む数値列の検索方法
Excel(エクセル)
-
9
エクセル ひらがなの文字を抽出
Excel(エクセル)
-
10
エクセルでセルのデータがカタカナかどうか調べたい
Excel(エクセル)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
JIS水準漢字の選別方法教えてください
その他(コンピューター・テクノロジー)
-
13
Excel 2000 のマクロで漢字の含まれているセルを検索する方法
Excel(エクセル)
-
14
文字種(漢字・ひらがな・カタカナ・句読点など)を判別する方法
Excel(エクセル)
-
15
「シフトJIS X 0213」形式の文字コードチェック
Java
-
16
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
17
Excelの中に全角ひらがな、漢字、半角英数が混在しいる場合一括で変換するのではなく、半角英数字が混
Excel(エクセル)
-
18
【ExcelVBA】各セルをダブルクォーテーションで括ってCSV保存したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
”ギリギリ” を丁寧に言うには
-
「初め」か「始め」どちら?
-
この文字の変換方法を教えて
-
「取組」と「取り組み」の違い
-
「~していただきまして、あり...
-
「時間がたつ」の「たつ」は、...
-
「お客様お一人おひとり」と書...
-
次頁はなんと読みますか?
-
対策を採る?取る?
-
「50万円を超える」は50万円以...
-
文章にする時、ひらがなの「と...
-
魚へんの下の点々が大
-
木へんに夕に卩ってどう読みま...
-
「基」と「元」の使い方
-
日差しが差す(陽射しが射す)...
-
漢字の出し方(日へんに陸の右側)
-
「切」という昔の漢字は変換で...
-
住所の「字(あざ)」の英文表...
-
「竿役」ってどういう意味ですか?
-
文章で対象者を「人」というか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「初め」か「始め」どちら?
-
この文字の変換方法を教えて
-
”ギリギリ” を丁寧に言うには
-
「取組」と「取り組み」の違い
-
「時間がたつ」の「たつ」は、...
-
「お客様お一人おひとり」と書...
-
「ん」一文字の漢字はありますか?
-
対策を採る?取る?
-
次頁はなんと読みますか?
-
「基」と「元」の使い方
-
「~していただきまして、あり...
-
「50万円を超える」は50万円以...
-
木へんに夕に卩ってどう読みま...
-
0(ゼロ)とO(オー)の書き分け...
-
魚へんの下の点々が大
-
文章にする時、ひらがなの「と...
-
数を数える、「正」の字。読み...
-
ネ+豊 でなんと読みますか?
-
エクセルでセルの中身が漢字か...
-
文章で対象者を「人」というか...
おすすめ情報