この記事はこんな悩みを解決します
- セルの日付(例:11/29)を取得した際、謎の数値(45259など)が表示されて困惑した。
- 金額の「¥」マークやカンマが消えてしまい、出力結果の見栄えが悪くなった。
- ValueとText、どちらのプロパティを使うべきか判断基準を知りたい。
「日付が壊れた!?」いいえ、それはExcelの「素」の状態です
事務作業の自動化において、日付や金額の扱いは避けて通れません。
しかし、VBAで意気揚々とセルのデータを取得したとき、こんな経験はありませんか?
「Excel上では『2025/11/29』と表示されているのに、VBAで取得したら『45990』になった。コードが間違っているの?」
決して、あなたのコードが間違っているわけでも、PCが故障したわけでもありません。
これは、Excelがデータを扱う際の「2つの顔」に違いがあるからです。
結論:スッピンの「Value」と、メイク後の「Text」
Excelのセルには、データを制御するための2つの重要なプロパティ(属性)があります。
- Value(バリュー)プロパティ: セルの「真の値」(スッピンの状態)
- Text(テキスト)プロパティ: セルに「表示されている見た目」(メイク後の状態)
Textプロパティは「現在画面に表示されている通りの文字列」を取得します。
対してValueプロパティは、セルの根本的な値を返します。Excelは内部的に、日付を「シリアル値」という数値で管理しているため、Valueで取得すると「45990」のような数字が現れるのです。
使い分けコード集:コピー&ペーストで活用可能
実際にどう使い分ければいいのか、実務で即戦力となるコード例を見ていきましょう。
ケース1:見た目通り(¥マークや日付形式)に取得したい場合
報告書やメール本文に転記する場合は、.Textを使用します。
Sub GetDisplayText()
' A1セルに「2025/11/29」、B1セルに「¥10,000」と入力されている想定
Dim myDate As String
Dim myMoney As String
' .Textを使うと、画面上の表示をそのまま文字列として取得できます
myDate = Range("A1").Text
myMoney = Range("B1").Text
' 結果をメッセージボックスで確認
' 表示例:今日は 2025/11/29 です。金額は ¥10,000 です。
MsgBox "今日は " & myDate & " です。金額は " & myMoney & " です。"
End Sub
.Textは「セルの幅が狭くて####と表示されている場合、その####を取得してしまう」という落とし穴があるので、注意しましょう。
ケース2:計算処理に使用したい場合
取得した値を使って加算などの計算を行う場合は、記号を含まない .Value が適しています。
Sub GetValueForCalc()
' A1セルに「100」、B1セルに「200」と入力されている想定
Dim result As Long
' .Valueを使うと、数値として計算が可能です
result = Range("A1").Value + Range("B1").Value
' 表示:合計は 300 です。
MsgBox "合計は " & result & " です。"
End Sub
【重要】書き込みは「Value」の一方通行!
ここで、非常に重要な注意点があります。
.Textプロパティは「読み取り専用」です。
データを読み取る際には .Text を利用できますが、セルに値を書き込む(代入する)際に .Text を使うとエラーが発生します。セルに値を入力する場合は、必ず .Value を使用しましょう。
Sub SetValue()
Range("A1").Value = "テスト入力"
' 【間違い】以下のコードは実行時エラーになります
' Range("A1").Text = "これは代入できません"
End Sub
最後に:失敗を恐れずにステップアップしましょう
「計算するならValue、見た目重視ならText」。
この基本ルールさえ押さえておけば、日付が謎の数値に変わっても焦る必要はありません。
一歩ずつ、VBAを使いこなせるようになっていきましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント