• 締切済み

VBAでUnicodeしか存在しない文字の判定について

VBA初心者の質問ですが、宜しくお願いします。 エクセル上にUnicodeしか存在しない文字が含まれた文字列を入力するとします。 VBAでその文字列に、Unicodeしか存在しない文字が入力されているかどうかの判定をするにはどのようにしたらいいでしょうか? また、その文字列(Unicodeしか存在しない文字が含まれる)のバイト数を正しく取得するにはどうしたらいいでしょうか?

みんなの回答

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> VBAでその文字列に、Unicodeしか存在しない文字が入力されているかどうかの判定 「一旦Shif-JISに変換して、すぐにUnicodeに戻して、元の文字列と比較する」としてはどうでしょう? Unicodeにしかない文字は文字化けしてしまいますから、 内容が変わってしまうので判断できるかも。 尤も、2種類のUncode文字が1つのShift-JISコードに対応しているケースもあります。 この場合も元の文字と変わってしまう場合がありますので、万全の方法ではありませんが・・・ > その文字列(Unicodeしか存在しない文字が含まれる)のバイト数を正しく取得 「正しいバイト数」って何のことでしょう??? VBAでの、Unicodeは1文字2バイト固定ですから、 普通「文字数*2」がバイト数ですが・・・ 他に「Shift-JISに変換した場合のバイト数」と言う考え方もありますが・・・ 「Unicodeにしか存在しない文字」=「Shift-JISに変換できない文字」ですから・・・「バイト数」は数え様が無いですよね? #「正しい(と貴方が考える)バイト数」を決める必要があるのでは? #例えば #『「Unicodeにしか存在しない文字」は0バイトとして数えることにする』とか、 # 『「Unicodeにしか存在しない文字」は2バイトとして数えることにする』とか・・・

関連するQ&A

  • Excel VBAで文字列の日付を判定

    Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。

  • Vbscript Unicode文字の判定

    今、テキストファイルがあり、その中には「Unicode文字」が含まれています。 タックシール(ダイレクトメール用)に出力するのに、マンション名やビル名は改行しなければなりません。 1行に印字できる文字数は全角で20文字(40バイト)です。 したがって、「住所1」と「住所2(マンションやビル名)」の正確なバイト数を調べるのですが、今、「Unicode」のテキストファイルを作って、確かめたところ、半角文字は、そのまま「Asc()」で正の整数で返ってきます。 また、通常の2バイト文字(全角スペースから外字の最終文字)までは、負の整数で返ってきました。 しかし、「Unicode」文字は、常に「63」で返ってきます。 Character Code「63」は、半角の「?」です。 どうやら、「VBScript」は「Unicode」文字をすべて「?」として認識してしまうようです。 通常は、住所に「?」はないはずなのですが、最近、お客様のデータを見ていると、半角の「-」が、よく、半角の「?」に化けているので、「?」はちゃんと1バイトとして、Unicodeの文字は2バイトとして調べなければなりません。 VBAのように「Len()」と「LenB()」があれば、問題ないのですが、「VBScript」では、正しく動作しません(すべて「2」と返してきます)。 正確に文字数(バイト数)を調べるには、どうすればよいのでしょうか?

  • エクセルVBAの入力文字(unicode)について

    VBA初心者ですが宜しくお願いします。 質問ですが、任意のセルにunicodeにしかない文字(?)を、VBAにて変数に入力した際に、"?"になってしまいます。 例:セルA1に"㎥"(立方メートル)が入った文字列、"固体Bの体積は1㎥です。"と入力  【VBA】   dim Ac as string   Ac=cells(1,1).value 上記の場合、変数Acの結果が"固体Bの体積は1?です。"となります。 "?"にならないようにするにはどうしたらいいでしょうか?

  • Unicode上しか存在しない文字一覧を調べたい

    Unicode上しか存在しない文字一覧を調べたい というのも、画面上で「立方メートル(m^3)」を入力して保存後、画面を開きなおすと「㎥」という文字コードに文字化けを起こしてしまう事象が発生しました。 過去の質問などを調べたところ、以下のような動きになっていると認識しています。 (違ってたら補足お願いします;) 1.入力時:  クライアントはWindows+IEを使用しているため、入力時にはunicodeに存在する「m^3」が表示される 2.データ登録時(クライアント→サーバ):  クライアントからサーバ(Windows)上にデータを送信する際に、文字エンコードをwindows-31Jで指定しているため、文字コード「㎥」に化ける  (※ここでwindows-31Jに「立方メートル」が存在しないため文字化けを起こして登録される?) 3.データ表示時(サーバ→クライアント):  サーバからデータを送信する際にはshift-JISを指定しているため、文字コード「㎥」として送信される ※参考:http://okwave.jp/qa/q1676143.html そこで知りたいのが、このようにデータを登録すると文字化けを起こしてしまう文字の一覧を知りたいと思っております。 つまりUnicodeにのみ存在する文字の一覧を調べたいと思っているのですが…。 自分で調べた限りでは、↓のように、unicode文字の一覧は見つかったのですが、「unicodeのみに存在する文字」(=文字化けして表示されてしまう)文字の一覧というものが調べられず。。。 http://nurucom-archives.hp.infoseek.co.jp/digital/unicode-table.html http://d-toybox.com/studio/lib/romanNumerals.html#sample もし紹介しているサイトをご存知の方いましたら教えていただけると幸いです。 もしくは自分で調べるための方法などをご教示していただけると助かります。 (さすがに画面に65535文字打ち込んで調べるのは骨が折れます。。)

  • エクセルVBAで文字列を判定する方法

    たとえばセルA1に何か入力した時にその入力したものが、数列か文字列かを判定する方法はVBAでありませんか?よろしくお願いします。

  • 文字からunicodeの番号を知ることは出来ますか

    エクセルを使っている時、IMPパッドからunicodeの文字を入力したのですが その文字がIMPパッドのどこにあった文字なのか分からなくなりました 今は、エクセルに入力してある文字をコピーして使っています この文字のunicodeの番号なんかを知ることは出来ますでしょうか?

  • 文字の判定について

    はじめまして。 vba初心者でして、とても困っているのです。 セルの値が数字かどうかの判定はどうやら IsNumeric で出来るようですが、 英数字かどうかの判定方法がわかりません! (半角の数字とアルファベットのみの文字列かどうか) ご存知の方いらっしゃったら教えてください! お願いします。

  • EXCELのVBAでLenB関数について

    VBA初心者の質問です。 EXCELのVBAでセルの文字数バイト数を取得したくてLenB関数を使用しました。 しかし半角で入力してある文字(数字)でも1文字2バイトになってしまいます。 具体的に言うと以下の通りです。 ---コード--------------  Dim test As Integer  test = Len(Activecell.Value) -----------------------  Activecellのセル内容「東京1234」  TEST→「8」と取得したいのに「12」になってしまう。 -------------------- EXCEL上ではキチンと「12」になるのですがVBAでは違うのでしょうか。 どなたかご存じでしたら、よろしくお願いいたします。

  • VBA グラフの存在の判定について

    お世話になります。 現在VBAの勉強を行っているのですが、グラフについてどうぞ知恵をお貸しください。 エクセルの操作でグラフを作成した後、そのシートもしくはブックにグラフが存在するかどうかを確かめる判定式を作りたいと思っています。 グラフそのものが存在するかどうかの判定をしたい場合、どのような記述が必要になるのでしょうか?

  • PHPにおいて16進数のアスキー文字とユニコード

    文字列の明確な違いがわかりません。 たとえば16進数のアスキー文字であれば print "\x41"; とした場合  A という文字が出力されます。 また print 0x41; とした場合はアスキー文字ではなく 65という10進数における数値が出力されますね。 さらには print "\xe6\x96\x87\xe5\xad\x97\xe5\x88\x97"; と記述すると 文字列 という文字が出力されます。 ではそうではなくユニコード文字列というのはなんなのでしょうか? 一般てきに \u0000 という形式で表記される物ですが、コレがいまいちわかりません。 これは16進数のアスキー文字によるマルチバイト文字の再現と何がことなるのでしょうか? たとえば、JSONなんかを単純に出力してみるとこのユニコード文字列という形式で表現されますよね? このユニコード文字列の実態?を知りたいです。 よろしく御願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう