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も見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
ちょっと先の未来クイズ第5問
日本漢字能力検定協会が主催し、12月12日に発表される、2024年の「今年の漢字」に選ばれる漢字一文字は何でしょう?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBAによる第3、4水準文字の判定について
Visual Basic(VBA)
-
JIS水準漢字の選別方法教えてください
その他(コンピューター・テクノロジー)
-
ascW関数の結果がおかしい
Visual Basic(VBA)
-
-
4
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進数の文字列をアスキーコー...
-
1バイト文字の上位4ビット・...
-
カンマの含まれる文字列の数値...
-
VBAのコマンドボタンの文字列の...
-
文字の入力で横バー上段、中断...
-
LaTeX: captionの中で改行した...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
エクセルのCOUNTIFが正しくカウ...
-
変数の中の改行コードをBRタグ...
-
○個ずつ改行
-
VBAで英数字入力チェックしたい。
-
C言語で改行コードを知る
-
全角括弧と全角読点の間隔を狭...
-
秀丸の正規表現で複数行にわた...
-
コンボボックスの項目中に改行を
-
ImageTTFTextで縦書き表示させたい
-
カタカナの単語を検索
-
C# DataGridViewのセルを改行禁...
-
" \\n"の意味がわからない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマの含まれる文字列の数値...
-
マクロで半角を全角に
-
VBA ASC関数で変換できない文...
-
数値をASCII文字にする方法につ...
-
1バイト文字の上位4ビット・...
-
VC++ マルチバイト文字とUniCod...
-
16進数の文字列をアスキーコー...
-
VB6.0 Base64のデコード方法を...
-
サロゲートペア文字の半角カナ...
-
ヌル文字とは一体何でしょうか
-
VB6 機種依存文字の変換
-
fgetws関数で読み込んだUNICODE...
-
機種依存文字
-
シフトJIS⇒MIMEエンコード(RFC2...
-
エスケープされたunicodeのデコ...
-
テキストボックスの文字を変換...
-
HTMLエンティティ文字の変換
-
携帯サイトの絵文字の互換性に...
-
Excel VBAの数値変換
-
VBAのコマンドボタンの文字列の...
おすすめ情報