- ベストアンサー
VBAマクロの文字列認識について
立て続けの質問ですみません。 Data1 = 1 Data2 = "234567890123457890" Data = Data1 & Data2 Range("A1").Value = Data 上記のマクロを実行すると、A1カラムに"12345678901234567890"と文字列で表示されるはずなのですが、実際には"12345678901234500000"と表示されてしまいます。 A1カラムの書式設定はユーザー定義で"00000000000000000000"としています。 一方、下記のマクロを実行すると Data1 = 1 Data2 = "234567890123457890" Data3 = "x" Data = Data1 & Data2 & Data3 Range("A1").Value = Data "12345678901234567890x"と表示されます。これはどういう現象なのでしょうか?最初のマクロを実行すると右寄せになるので文字として認識されていないと思いますが、文字として認識させるやりかたが良くわかりません。T関数やTEXT関数を使ったりもしてみましたがどうもうまくいきません。 自分がやりたいのは、100桁以上もある数字と半角文字(カナ、アルファベット)混合の文字列を作って一行一データのCSVファイルを作りたいのですが、どうも数字の桁数が多いとうまくいかないことがわかってきたのですが・・・よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
セルに値を代入したときに自動的に変換が行われます。 前者の例だ数値として後者は文字列として判定されます。 文字列になるようにするには、代入する前に書式を設定すればよいと思いますが。 Data1 = 1 Data2 = "234567890123457890" data = Data1 & Data2 Range("A1").NumberFormatLocal = "@" Range("A1").Formula = data
その他の回答 (4)
- trytrytry
- ベストアンサー率37% (13/35)
#4のものです。 書式の設定は、マクロ実行前に行ってください。
- trytrytry
- ベストアンサー率37% (13/35)
数値の桁数が大きいと下のほうの位が0になるようです。 恐らくセルに数値を扱う場合「倍精度浮動小数点数型」になるのだと思います。 マクロをステップ実行すると分かると思いますが、セルに入れる前(data)の状態では正常に値が入っています。 簡単な対応としてはセルの書式を「文字列」にするで良いのではないでしょうか。
- kmb01
- ベストアンサー率45% (63/138)
>これはどういう現象なのでしょうか? 表示される桁数にかかわらず、Excel では 15 桁までの精度の数値が格納されます。数値の桁数が 16 桁以上の場合、16 桁目以降の値はゼロ (0) に変換されます。 前者は代入時にDataが数値であると認識され16桁以降が0になっています。 後者は代入時にDataが文字列であると認識されそのまま格納されます。 16桁以上の数値データを文字列としてセルに代入するには、書式を文字列にするかデータ頭に'を付けるかしかないようです。
これも方法の一つ? Data1 = 1 Data2 = "234567890123457890" data = "'" & Data1 & Data2 Range("A1").Value = data
お礼
短時間の間にたくさんの回答ありがとうございました。お陰様で解決しました。まとめてのお礼で申し訳ありません。また、点数付けられなかった方ごめんなさい。