失礼します。
Excel97/2000のVBAの文字列型変数は、アスキーコード129-159/224-252のデータを保持できないみたいですが、これはVB6.0/VB.NETなどでもそうなのですか?
つまり、VBAでは、
Sub main()
Dim s as String
s = Chr$(130)
Sheet1.Cells(1, 1) = Asc(s)
End Sub
とすると、シートのA1に「0」が表示されてしまうということです。
というのも、私はVB6.0/VB.NETを持っていないのですが、ちょっとVB2.0時代のコードを使う必要が生じたので、VBAで実行してみたところ、以上のような仕様の違いに気付いたのです。
これがVBAだけの特性なのか、最近のVBはこういう仕様になってしまったのかが知りたいのです。
No.2ベストアンサー
- 回答日時:
たぶん、コード体系が変わったためです。
VB2.0のころは、Windows3.1やWindows95ですね。コードはシフトJISを使っていました。
現在Windows98以降はEUCという2bytコードをOSが使用してますので、プログラム自体は正しく動作しても、シフトJIS→EUCでは結果が変わりますので、そのようなことになっているのでは?
単純に文字列を設定すれば、自動的に変換がかかるので普通は気づかないのですが、ご質問のように文字コードそのものを設定する場合は結果が違ってきてしまう。という事でしょう。
回答ありがとうございます。
どうやら、文字コードの違いのようですね。マイクロソフトによると、文字列型の内部形式はUnicodeとのことです。と、すると、制御文字が保持できないのも頷けます。
(http://www.microsoft.com/japan/msdn/library/defa …
実は、これに気付いたのは、バイナリファイルの入出力を文字列型で行っていた時なのですが、私と同じ状況を実験してみているページを発見しました。
(http://homepage2.nifty.com/kasayan/vba/binary.htm)
マイクロソフトとしては、代わりにByte型を用意したのだから、それを使えということなのでしょう。しかし、バイナリ・テキスト混在のファイルの入出力では、文字列型で一括して扱える方が便利なのですがね。というか、だったら初めからCで書きます、というところでしょうか。
No.3
- 回答日時:
ご存知でしょうが、129-159、224-252は2バイトコード文字(シフトJIS)の第1バイトのコードですね。
だから「文字」は割り当てられていないといえるでしょう。エクセルでは=char(18223)やCode("年")(=18223)などの関数表現が可能で(この例は年の文字)す。Sub test01()
s = Asc("年")
Cells(15, 5) = Chr(s)
End Sub
でCells(15, 5) に「年」が表示されます。
Sub test02()
MsgBox Asc("年")
MsgBox Chr(-27570)
End Sub
とりとめもないですが、もう少し良く判った方の解説がほしいですね。
エクセル2000、VB6です。
どうやら、文字列型は「文字」に特化してしまったようですね。
バイナリデータを文字列型として扱えると、Instrをかけたり、Midで切り出したり、便利だと思うのですが。それとも、何かこれと同等の事を簡単に実現する方法があるのでしょうか。最近はBasicを触っていないのでよく分からないのですが。
ともあれ、回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
ExcelのVBAコードについて教え...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
VB6のComboBox関連の書き方をVB...
-
HTML電卓で1文字消す方法
-
VLookup関数を使ってラベルに表...
-
access2003 クエリSQL文に...
-
Excel VBA素人です。VBAで図形...
-
pythonにてseleniumを使うも、...
-
ExcelVBAで「Shift_JIS(MS932)...
-
エクセルに見えない文字(JISX0...
-
レポートでグループレベルの変...
-
chatgptでつくってもらったコー...
-
JANコードとPOSコードは同じ?
-
ACCESSで、履歴事項を管理する...
-
1、Rstudioで回帰直線を求める...
-
videopadについて
-
VBAでファイルオープン後にコー...
-
CheckBoxのコントロール配列に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
おすすめ情報