ツイッター出題回答
日付型と通貨型のValueとValue2について

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2021-06-26 最終更新日:2021-06-26

日付型と通貨型のValueとValue2について


ツイッターでVBAに関する問題を出しました。
問題としてはValueとValue2について問うもので、日付型と通貨型が問題の焦点になります。


マクロ VBA Value2 日付型 通貨型
https://twitter.com/yamaoka_ss/status/1408259798357794817


VBA問題の出題ツイート

【VBA問題】
Rangeに対して、
.Value = .Value
.Value2 = .Value2
これらを実行すると数式が消えて値だけになります。
ところで、これらの実行でセル値が変わってしまう事があるでしょうか。
※セル値が変わるというのは、見た目の値が変化(桁落ち等)するかということ。


VBA問題の解答ツイート

出題文が良くなかったです。
文字列になっている他のデータ型へ変換可能なものは変わってしまいます。
Value2の仕様を考えてもらおうという主旨の問題でした。
ここに書かれている通り、問題は CurrencyとDate です。
VBAでは、
Dateは実質Doubleです。
CurrencyはCurrencyです。
Currencyは4桁の固定小数点です。
VBAでValueを取得した時、セルの表示形式が影響します。
日付型ならDate
通貨型ならCurrency
でも、Currencyは小数4桁までです。
マクロ VBA Value2 日付型 通貨型


したがって、通貨型の表示形式に小数5桁以上を入れている場合は桁落ちします。
これはセルに再出力する前の段階、VBAで取得した時点で発生しています。
ただし、実務として通貨型に小数5桁以上を入れることは無いはずです(と思うけど)
したがって、実質的な被害が起こることは無いだろうと思います。


日付および通過型の仕様を考慮して、Doubleで取得したい場合に使うのがValue2という事です。
したがって通貨型のセルもValue2で取得すれば桁落ちせずに取得できます。
ただしセルに入れられる有効桁数に制限はあります。
ということで、日付と通貨型は特殊なので注意が必要だというお話です。




同じテーマ「ツイッター出題回答 」の記事

数値変数の値を別の変数を使わずに入れ替える
Rangeオブジェクトを受け取り"行数,列数"で埋める
数式の関数の使用回数、関数名を配列で返す
日付型と通貨型のValueとValue2について
小文字"abc"を大文字"ABC"に変換する方法
オブジェクトのByRef、ByVal、Variant
「マクロの登録」で登録できないプロシージャーは?
ジャグ配列から順列を作成する
シート内の全テーブルを1つに統合
VBA穴埋め問題「On Error GoToの挙動」
数珠順列(配置に条件付き)を全て出力する


新着記事NEW ・・・新着記事一覧を見る

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ