• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA ASC関数で変換できない文字の説明)

VBA ASC関数で変換できない文字の説明

このQ&Aのポイント
  • Vista+Excel2003の環境で、ASC関数を使用して文字を変換すると、「?」のアスキーコードである3Fになる現象についての説明です。
  • Vista環境で作ったデータをXPで使用する際に文字化けをチェックするため、ASC関数を使用して文字を変換しています。
  • 質問者は、変換できない文字のアスキーコードが3Fになる理由が分からず困っており、その違いについて詳しく説明してもらいたいとのことです。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答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というのもあるようですが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答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を返します。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

JISの第三水準の文字ですね。「?」←出るかな?駄目かも。 面区点番号が、1-14-3。Unicodeだと、U+3402 >ASC関数を通すとなぜ3Fになるのか理由が分からない ASC関数で?になるのは、CP932(WindowsのシフトJIS)の範囲では存在しないから。 ASCW関数を使うと、Unicode番号に変換できると思います。 >Vista環境で作ったデータをXPでも使用するのですがその際化けてしまう文字 XPでもUnicode文字は使えるので、Unicocdeをサポートしたフォントを使えば化けないと思いますよ。

VBA-ONLY
質問者

お礼

みなさまありがとうございました。 遅くなりましたが最終的に理解した内容を記載させていただきます。 ・VBAのASC関数はSJISのコードを返す。 ・ただし対象の文字がSJISであってもCP932の範囲でなければならない。 ・CP932の範囲でない場合、ASC関数は3F(「?」)のコードを返す。 ・VistaはUnicodeが標準となっている。 ・追加文字もSJISのコードが振られているが、CP932に含まれていない為、結果的に3Fのコードを返している。 ということで理解することにしました。 本当にありがとうございました。

VBA-ONLY
質問者

補足

ありがとうございます。 日中ネットにつながるPCが無く返信できませんでした。 他の皆さまからもいただいた情報をもとに自分なりに説明を作ったのですが、持ち帰るのを忘れてしまいました。 明日には改めて報告させていただきます。 >ASC関数で?になるのは、CP932(WindowsのシフトJIS)の範囲では存在しないから。 この一文は非常にありがたかったです。 変換できない文字もS-JISのコードが割り振られているので当初はどうしてなのかと思っていました。 >XPでもUnicode文字は使えるので、Unicocdeをサポートしたフォントを使えば化けないと思いますよ。 これで作ったデータを後でOracleに入れるという目的もありましてチェックする必要がありました。

全文を見る
すると、全ての回答が全文表示されます。
noname#111181
noname#111181
回答No.1

それは「喜」の異体字で、外字です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ASC関数

    ASC関数についての質問なんですが、ASC関数は文字コードを返してくれますよね? それで、ちょっと疑問というか当たり前というか、わからないので質問します。 ASC(a)=97 ASC(あ)=-32096 ASC(0207050545)=48 ASC(2)=50 ASC(200207050545)=50 ASC(20020705)=50 という結果になるのでしょう?

  • エクセル関数とVBA関数で意味が違うのは多いのか

    エクセル関数とVBA関数で意味が違うのは多いのでしょうか? セルA1に「A」と入れ、 B1に「=ASC(A1)」と入れると B1は「A」になります。(半角) VBE画面で Sub test() Debug.Print Asc("A") End Sub を実行すると、-32160 になります。 ヘルプより エクセルでは=全角 (2 バイト) の文字を半角 (1 バイト) の文字に変換します。 VBAでは=指定した文字列内にある先頭の文字の文字コードを返す変換関数です。 となっていますが 同じ関数でも全く意味違うのでびっくりしています。 こういうことは頻繁にあるのでしょうか? (VBAのASC関数のかわりのエクセル関数は、CODE関数でした。)

  • ASC変換した~は置換できない?

    excel2010 ~をASC変換した~の文字は検索、置換できません。 match関数で~が入った文字列参照しようとして参照できませんでした。 これはexcelの仕様と思われますが、他にも検索できない文字ってあるのでしょうか?

  • EXCSL ASC関数 数値のみ変換

    WindowsXP EXCEL2007を使っています 住所録の番地が全角・半角が混在しているので半角に統一するため ASC関数を使いました 当然英文字・カタカナも半角になってしまいます 数字だけを半角にすることはできないでしょうか

  • 英数文字を半角に、カナを全角に変換したい(Excel関数)

    Excel関数で、英数カナ文字混在したセルに対して 英数は半角に、カナ文字は全角に変換したいのですが なにかいい方法はないでしょうか? JIS関数、ASC関数では上手くできません。 当方はエクセル駆け出しです。VBAとかを使えば上手くいくのでしょうか?よろしくご教授願います。

  • VBAでコードから漢字に変換するのは

    VBAを使用していますが、コードから漢字を求める方法が見つかりません。 たとえば、3021から漢字の亜を求めたいのですが。 1バイト文字ならChr関数で求められますが、2バイト文字、つまり、漢字を求める方法が見つからないのです。 どなたか教えていただきたいのですが。

  • VBScript ASC関数:文字エンコード(Unicode→Shif

    VBScript ASC関数:文字エンコード(Unicode→Shift-JIS)多対一変換について 初めての質問です。 よろしくお願いいたします。 【質問】 VBScriptのASC関数で文字をShift-JISコード 表示した場合、多対一変換され、文字変換が起こります。 この多対一変換をしないように、もし対応する文字が無い場合は、 ?になるようにしたいと思いますが、良い方法は無いでしょうか? 【現象】 ラテン1補助のÀ文字(A`)の UnicodeとSift-JISコードのマップ対応が原因のようです。 具体的には、Àは、 Unicodeでは(A`)だが、Sift-JISコードでは(A) にマップされているのです。 IMEパッドの文字コードをみるとわかります。 以下のサイトを見ると、さらに詳しく載っています。 ▼参考サイト 第7回 Unicodeからの多対一の変換[前編] http://gihyo.jp/admin/serial/01/charcode/0007 そこで、APIのwidechartomultibyte関数の wc_no_best_fit_charsを設定したエンコード方式 を使用すれば解決するというところまでは、 わかってきたのですが、これをVBScriptのASC関数 と同じ動きをするように関連付けるか、別途プログラム を作る方法がわからず困っています。 わかる方いらしたら、ご教授下さい。 よろしくお願い致します。

  • キャラクターコード表を出力させたいのですがasc(0x41)でAとなるような関数はjavascriptであるのでしょうか?

    キャラクターコード表を出力させたいのですがasc(0x41)でAとなるような関数はjavascriptであるのでしょうか? http://hp.vector.co.jp/authors/VA008536/data/ascii.html <script type="text/javascript"> <!-- var s = ''; for (var i=0x20; i<0x7f; i++){ s += [関数?] } document.write(s); // --> </script>

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

  • 文字を16進変換

    C言語にて関数などを使わずに計算式なので文字を16進数に変換したいのですがどのような処理にしたらいいでしょうか?? char型で用意した変数に1文字を格納し、それをアスキーコードの16進数に変換したいです。 よろしくお願いします。

HL-L2330D印刷が曲がってしまう
このQ&Aのポイント
  • HL-L2330Dの印刷が曲がってしまう問題について相談します。手差し印刷で連続印刷できず、2枚以上印刷すると重なって出てきてしまいます。
  • Windows10で利用しているHL-L2330Dの印刷が曲がってしまう問題に関してお聞きします。手差し印刷で連続印刷ができず、2枚以上印刷すると重なって出てきてしまいます。
  • HL-L2330Dの印刷が曲がってしまう問題について教えてください。手差し印刷で連続印刷ができないだけでなく、2枚以上印刷すると重なって出てきてしまいます。
回答を見る

専門家に質問してみよう