
Vista+Excel2003の環境です。
Vistaから追加された文字をチェックしたいので、目的の文字をVBAのASC関数を通すことで、アスキーコードの3F、「?」になることまでは調べられました。
例えば「品」の「口」の部分が漢字の「七」になる文字です。
そこで質問なのですが、ASC関数を通すとなぜ3Fになるのか理由が分からないので教えていただけないでしょうか?
自分なりに調べたものの理由が分からず参っています。
問題なく変換出来る文字との違いが説明していただけるとありがたいです。
ちなみにプログラムの目的はVista環境で作ったデータをXPでも使用するのですがその際化けてしまう文字をチェックする為です.
No.4ベストアンサー
- 回答日時:
>遅くなりましたが最終的に理解した内容を記載させていただきます。
かなり違っています。
>・VBAのASC関数はSJISのコードを返す。
間違ってはいませんが、WindowsなのでCP932ですね。
CP932 = Shift_JIS(=SJIS) + Windows独自文字(○囲み数字とか、ローマ数字とか、一部の拡張漢字)
>・ただし対象の文字がSJISであってもCP932の範囲でなければならない。
CP932の方が文字が多いです。
>・CP932の範囲でない場合、ASC関数は3F(「?」)のコードを返す。
これは合ってる。
>・VistaはUnicodeが標準となっている。
CP932とUnicodeが標準というのは、XPもVistaも同じです。
>・追加文字もSJISのコードが振られているが、CP932に含まれていない為、結果的に3Fのコードを返している。
JIS第三水準の文字はShift_JISにもCP932にも含まれていない。
(一部の文字はWindows独自拡張文字としてCP932にある)
Shift_JISにある漢字はJIS第一水準と第二水準だけです。
なお、Shift_JISの空きエリアに第三水準・第四水準の文字などを詰め込んだShift_JIS-2004というのもあるようですが。
No.3
- 回答日時:
既に回答が出ている通り、ANSIに変換できない文字は"?"として
表示されます。こういう文字が含まれているかどうかを調べる
目的ならば、WideCharToMultiByteというAPIが使えます。
Declare Sub RtlMoveMemory Lib "KERNEL32" _
(ByRef 転送先アドレス As Long, _
ByVal 転送元アドレス As Long, _
ByVal バイト数 As Long)
Declare Function WideCharToMultiByte Lib "KERNEL32" _
(ByVal コードページ As Long, _
ByVal フラグ As Long, _
ByVal ワイド文字列 As Long, _
ByVal ワイド文字列長 As Long, _
ByVal マルチ文字列 As Long, _
ByVal マルチ文字列長 As Long, _
ByVal 変換不能文字 As String, _
ByRef 変換不能有無 As Long) As Long
Function 検査(ByVal 文字列 As String) As Boolean
Dim アドレス As Long
Dim フラグ As Long
RtlMoveMemory アドレス, VarPtr(文字列), 4
WideCharToMultiByte 0, &H400, アドレス, _
Len(文字列), 0, 0, "〓", フラグ
検査 = CBool(フラグ)
End Function
関数「検査」は与えられた文字列中にANSI変換不可能な文字を
検出するとTrue、検出しなければFalseを返します。
No.2
- 回答日時:
JISの第三水準の文字ですね。
「?」←出るかな?駄目かも。面区点番号が、1-14-3。Unicodeだと、U+3402
>ASC関数を通すとなぜ3Fになるのか理由が分からない
ASC関数で?になるのは、CP932(WindowsのシフトJIS)の範囲では存在しないから。
ASCW関数を使うと、Unicode番号に変換できると思います。
>Vista環境で作ったデータをXPでも使用するのですがその際化けてしまう文字
XPでもUnicode文字は使えるので、Unicocdeをサポートしたフォントを使えば化けないと思いますよ。
この回答への補足
ありがとうございます。
日中ネットにつながるPCが無く返信できませんでした。
他の皆さまからもいただいた情報をもとに自分なりに説明を作ったのですが、持ち帰るのを忘れてしまいました。
明日には改めて報告させていただきます。
>ASC関数で?になるのは、CP932(WindowsのシフトJIS)の範囲では存在しないから。
この一文は非常にありがたかったです。
変換できない文字もS-JISのコードが割り振られているので当初はどうしてなのかと思っていました。
>XPでもUnicode文字は使えるので、Unicocdeをサポートしたフォントを使えば化けないと思いますよ。
これで作ったデータを後でOracleに入れるという目的もありましてチェックする必要がありました。
みなさまありがとうございました。
遅くなりましたが最終的に理解した内容を記載させていただきます。
・VBAのASC関数はSJISのコードを返す。
・ただし対象の文字がSJISであってもCP932の範囲でなければならない。
・CP932の範囲でない場合、ASC関数は3F(「?」)のコードを返す。
・VistaはUnicodeが標準となっている。
・追加文字もSJISのコードが振られているが、CP932に含まれていない為、結果的に3Fのコードを返している。
ということで理解することにしました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) 全角文字「ヴ」の半角文字「ヴ」への変換方法について 3 2022/11/05 12:07
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法 11 2022/10/25 08:43
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマの含まれる文字列の数値...
-
数値をASCII文字にする方法につ...
-
i-modeの絵文字をパソコンで再現
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
Excel関数「COUNTIF」で”文字”...
-
全角括弧と全角読点の間隔を狭...
-
文字の入力で横バー上段、中断...
-
改行を読み飛ばす
-
C++で空Enterの入力を判...
-
【VBA】エクセルで最後の不要な...
-
エクセルのCOUNTIFが正しくカウ...
-
VBAを使ってHTMLソースから特定...
-
全角英数文字が嫌われる理由を...
-
メッセージボックスで1025文字...
-
エスケープ文字の復帰(¥r)と...
-
テキストボックス行の桁数を制...
-
Nvuで作成したhtmlをコピペして...
-
バーコード入力と手入力の判断...
-
EUCのログファイルを携帯電話端...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマの含まれる文字列の数値...
-
数値をASCII文字にする方法につ...
-
VBA ASC関数で変換できない文...
-
マクロで半角を全角に
-
16進数の文字列をアスキーコー...
-
fgetws関数で読み込んだUNICODE...
-
VB6.0 Base64のデコード方法を...
-
VB6 機種依存文字の変換
-
1バイト文字の上位4ビット・...
-
VC++ マルチバイト文字とUniCod...
-
機種依存文字
-
HTMLエンティティ文字の変換
-
16進数を2進数に変換するコード...
-
iPhoneの絵文字をWebサイトに表...
-
softbank(UTF-8)での機種依存文...
-
シフトJIS⇒MIMEエンコード(RFC2...
-
エスケープされたunicodeのデコ...
-
ヌル文字とは一体何でしょうか
-
SQLインジェクション対策で、エ...
-
エディットコントロールへのUni...
おすすめ情報