
表題の件についてご質問させてください。
環境 OS:WinVista Office:2007
Accessのフォーム画面の入力内容に対して、Vistaから追加された機種依存文字である第3水準、第4水準漢字の入力があるかどうかをチェックしたいと考えています。
ネット等でいろいろと情報を仕入れてプログラムを組んでみたのですが、一部うまくいかない所があるのでご質問させていただければと思います。
◎自前で組んだロジック ※試験的にExcelで作成中
(入力された文字数分繰り返し)
lWork = Asc(Mid(ThisWorkbook.Sheets(1).Range("B2"), iCnt1, 1))
'読み込んだ文字が"?"となり文字が化けた場合
If iWork = 63 Then
bFlg = True
End If
If bFlg = True Then
'読み込み文字を十進数へ
iWork = AscW(Mid(ThisWorkbook.Sheets(1).Range("B2"), iCnt1, 1))
If iWork < 0 Then ……(1)
iWork = iWork + 65536
sWork = "&H" & Hex(iWork)
ThisWorkbook.Sheets(2).Range("D" & iCnt2 + 3) = ChrW(iWork)
Else ……(2)
ThisWorkbook.Sheets(2).Range("D" & iCnt2 + 3) = ChrW(iWork)
End If
(繰り返しここまで)
上記の様なロジックでまずは判定を行い、その上で、判定に引っかかった文字から文字コードを取得し、文字をセルの値として出力する形でサンプルを作ってみました。
※文字コードを取得して、文字自体を出力してるのはメッセージでどの文字が知らせる必要があるため
【質問事項】
(2)のElse以下の条件については上手くいくのですが、AscW関数にて取得した値がマイナスだった際にChrW関数でチェックで引っかかった値を出力することができません(出力内容がブランク)。
65536を加算すれば、という内容をネット見たので試してみたのですが、セルに出力される値がブランクとなってしまいます。チェックした文字の文字コードもプログラムの中で使用している数値と実際の数値と異なっています。
上記事象についての解決策などをご存じの方がいらっしゃいましたらご助言願います。
(より具体的に言うと、文字コードが”&4E08”(十進数だと19976)である感じを読み込んだ際、なぜかAscW関数で値を取得すると値が”55360”となってしまい、16進数に変換してChrWで文字に変換しても変換後の文字がブランクとなってしまう)
また、第3水準漢字と第4水準漢字であることの判定についても、上記の判定(VBEで読み込んで”?”に化けてしまう)以外に、確実に判定を行う方法などがあったらごアドバイス等をお願いいたします。
VBAは多少扱ったことはあるのですが、文字コード関連はあまり詳しくないので、ご助言をお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
似たようなご質問はあるのですが、今回のように、機種依存文字である第3水準、第4水準漢字というのは、考えたことがありません。つまり、言い換えると、JIS、Unicodeはオケーということになるのでしょうか?
参考になると思います。
http://oshiete.goo.ne.jp/qa/7733838.html
#4
おっしゃっていることは、UnicodeとJI第3水準以上を区分けという話になるように思いました。当面、いろいろ盛り込んで、以下のようなコードを考えてみました。あれやこれやと、知っていることを盛り込んだだけですので、なぜ、4,5があるのか、分かっていませんが、4,5の文字コードには違いがあるということだけです。
正規表現が使えればもっと早いのですが、どこかのサイトに、一文字ずつ指定なんていうコードありました。それは、VBAとして負担が大きくなってしまいます。Like演算子で、50や100文字程度なら問題ないです。また、外部のオブジェクトやAPIに渡す方法もありそうですが、最初から別の言語で作っても同じことになってしまいます。
ExcelやAccess の時は、Mid関数で、文字1つずつを入れてループしますが、このままでは、かなり処理スピードは遅いはずですので、もし問題があれば、また考えてみます。なお、半角カタカナは、1の分類です。少し、こちらのものを試していただけませんか?
'1 半角文字
'2 JIS文字/一般漢字
'3 Unicode
'4 Unicode外
'5 Unicode外 ?
Function Is_OrdinaryChar(char1 As String) As Long
Dim ch() As Byte
ch = char1
If Asc(char1) = 63 And AscW(char1) <> 63 Then
If UBound(ch) > 2 Then
Is_OrdinaryChar = 5 'Unicode外
ElseIf char1 Like "[一-龠]" Then
Is_OrdinaryChar = 3 'Unicode
Else
Is_OrdinaryChar = 4 'Unicode外
End If
ElseIf LenB(StrConv(char1, vbFromUnicode)) = 1 Then
Is_OrdinaryChar = 1 '半角文字
Else
Is_OrdinaryChar = 2 'JIS文字/一般漢字
End If
End Function
回答ありがとうございます。参考にさせていただきました。
参考した情報と、外部のページを参考に解決させていただきました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- Excel(エクセル) マクロ、条件付き書式のfont.color 1 2023/03/28 01:10
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
単二電池
あなたの家に何本ありますか?
-
カラオケの鉄板ソング
歌えばその場が絶対盛り上がる「鉄板ソング」を教えてください!
-
日本語(ひらがな・カタカナ・漢字)があるか判断する
Excel(エクセル)
-
JIS水準漢字の選別方法教えてください
その他(コンピューター・テクノロジー)
-
JIS第三、第四水準の漢字は入力可能になったか?
Windows 8
-
-
4
VBA ASC関数で変換できない文字の説明
Visual Basic(VBA)
-
5
「シフトJIS X 0213」形式の文字コードチェック
Java
-
6
Excel上でどれが外字か調べたい
その他(コンピューター・テクノロジー)
-
7
漢字のJIS水準をエクセルを使用して調べる方法がよくわかりません。
Excel(エクセル)
-
8
UNICODE文字が含まれているかのチェック
Visual Basic(VBA)
-
9
ascW関数の結果がおかしい
Visual Basic(VBA)
-
10
VBAで旧字体を異字体に一括で変換するコードについて
Excel(エクセル)
-
11
CODE関数から他の文字コードの求め方
Excel(エクセル)
-
12
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
13
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
14
フォルダの中に1個しかファイルがないのに、プロパティーではファイル数が2個となっている
Windows Me・NT・2000
-
15
第二水準漢字が含まれるか?
Visual Basic(VBA)
-
16
JISの第1・第2水準以外の漢字の見つけ方
フリーソフト
-
17
VBAでCSVファイルを途中行まで読んだ後で最初の行から読み直す方法はありますか?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NET2003 テキストボックスに...
-
エクセル 半角英数6文字以上 ...
-
ハイフンだけ置換したい。
-
「終了していない文字列型の定...
-
Access VBAで、数字だけをチェ...
-
VC#でテキストボックスに変数の...
-
TextAreaのMaxLength代替処理(IE)
-
文字認証の問題
-
正整数の半角数字かどうか判定する
-
Visual Basic 6.0 のテキストボ...
-
gas 全角数字を半角数字に変換
-
VBAによる第3、4水準文字の判定...
-
AccessVBAで教えて下さい。
-
禁止文字チェック
-
以下のコードを実行しても、オ...
-
デザイン時のVisible=Falseは実...
-
VBA SORT Applyでエラー
-
JSPの処理の途中で、JavaScript...
-
レーダーみたいなものがほしい。
-
contenteditableで編集した内容...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET2003 テキストボックスに...
-
Access VBAで、数字だけをチェ...
-
「終了していない文字列型の定...
-
VBAによる第3、4水準文字の判定...
-
エクセル 半角英数6文字以上 ...
-
正整数の半角数字かどうか判定する
-
gas 全角数字を半角数字に変換
-
文字認証の問題
-
ハイフンだけ置換したい。
-
Visual Basic 6.0 のテキストボ...
-
エクセルVBA/ Formatで文字列が...
-
正規表現について
-
禁止文字チェック
-
VC#でテキストボックスに変数の...
-
Excel VBA カタカナ セル判定...
-
初期入力モードを半角カタカナ...
-
漢字などを正規表現でパターン...
-
C#でTextBoxに数値のみ入力可能...
-
Vba SelStart、SelLen教えてく...
-
Javascript 全角カナ+半角スペ...
おすすめ情報