表題の件についてご質問させてください。
環境 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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
JIS水準漢字の選別方法教えてください
その他(コンピューター・テクノロジー)
-
日本語(ひらがな・カタカナ・漢字)があるか判断する
Excel(エクセル)
-
JIS第三、第四水準の漢字は入力可能になったか?
Windows 8
-
-
4
外字をJIS水準内の文字に置き換えたい
その他(パソコン・スマホ・電化製品)
-
5
第1水準、第2水準以外の文字の抽出について
Excel(エクセル)
-
6
JISの第1・第2水準以外の漢字の見つけ方
フリーソフト
-
7
Excel 第1水準漢字のみのデータにしたい
Excel(エクセル)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
10
「#エラー」の回避
Access(アクセス)
-
11
Access サブフォームでの選択行の取得
その他(データベース)
-
12
accessでJISコードを求める関数
その他(プログラミング・Web制作)
-
13
Excel上でどれが外字か調べたい
その他(コンピューター・テクノロジー)
-
14
「シフトJIS X 0213」形式の文字コードチェック
Java
-
15
漢字のJIS水準をエクセルを使用して調べる方法がよくわかりません。
Excel(エクセル)
-
16
入力規則のリスト選択
Visual Basic(VBA)
-
17
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
18
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NET2003 テキストボックスに...
-
VBAによる第3、4水準文字の判定...
-
javascript 文字列の最後から1...
-
エクセルVBA/ Formatで文字列が...
-
正整数の半角数字かどうか判定する
-
C#でTextBoxに数値のみ入力可能...
-
文字認証の問題
-
gas 全角数字を半角数字に変換
-
正規表現/スペース以降改行ま...
-
JavaScriptで ブラウザの閉じる...
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
〔Excel:VBA〕マクロの実行が異...
-
PowerPointで時計表示
-
OnTime を使って、分間隔で実行...
-
VBScript から JavaScript を呼...
-
ASP(VBS) ←→ JavaScript の変数...
-
ASPによるEXCELファイルの操作
-
フォルダを自動で開く
-
変換テーブルを使った、文字列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET2003 テキストボックスに...
-
「終了していない文字列型の定...
-
gas 全角数字を半角数字に変換
-
正整数の半角数字かどうか判定する
-
Vba SelStart、SelLen教えてく...
-
javascript 文字列の最後から1...
-
ハイフンだけ置換したい。
-
禁止文字チェック
-
C#でTextBoxに数値のみ入力可能...
-
正規表現について
-
Visual Basic 6.0 のテキストボ...
-
VBAによる第3、4水準文字の判定...
-
エクセルVBA/ Formatで文字列が...
-
VC#でテキストボックスに変数の...
-
エクセル 半角英数6文字以上 ...
-
CListCtrl の特定のセル(アイ...
-
Javascript 全角カナ+半角スペ...
-
JavaScriptに関する質問です。 ...
-
Excel VBA カタカナ セル判定...
-
文字認証の問題
おすすめ情報