「セルの値」を指定するとき、.Value は省略してよいものか? - Excelマクロ・VBA
今日は、よくある質問をひとつご紹介。
一昨日も、とある受講生から、フォローメールへのフィードバック中で、こういう質問を受けました。
以下、要点だけ解説すると...。
Range("A1") は、「セルA1」です。
その言葉が指すのは、「セルA1」というオブジェクトです。「セルA1の値」ではありません。
「セルA1を5にする」ことはできないですから、「セルA1を5にする」では、本来、意味が通らないことになります。
正しくニュアンスを伝えるには「セルA1の『値』を5にする」とか、そのように書くべきです。
(例えば...。小川慶一さんの苗字の文字列「小川」を「ムガペ」に変更することはできる。しかしそれは、小川慶一さんというオブジェクトそのものが「ムガペ」という文字列になったわけではない。変わったのは、あくまで、「苗字」というプロパティの値だけ)
ですから、本来、
Range("A1") = 5 のような構文は、意味をなさないわけです。
ただ、.Valueを初心者が抜かして書きかねない可能性を考慮して、
Range("A1") = 5 のような書き方をしたときには、
.Valueのことだろうと、「エクセルの中の小人ちゃん」が無理矢理解釈してくれているわけです。
また、一方。
「 Range("A1") 」という言葉だけでも、意味をなす場合があります。
それは、例えば、オブジェクトそのものを指し示したいとき。
Dim r As Range
Set r = Range("A1")
と書けば、オブジェクトそのものを指した、正しい用法になります。
(そして、変数 r によって、 Range("A1") への参照設定が可能になります )
つまり、
Range("A1")
と書いただけでは、「エクセルの中の小人」だけでなく、人間も、
その意図が、「値」なのか、「オブジェクトそのもの」なのかを判別できないわけです。
前後の文脈を読み解かないと、その言葉だけでは、
○ Range("A1") というオブジェクトを扱いたいのか
○ Range("A1").Value という値を扱いたいのか
の、どちらが本当にしたいことなのかが、分からないわけです。
プログラミングとは手順書作成ですから、少しでも分かりやすいほうが好ましいです。
明示しないことで混乱を生じてしまうのであれば、
明示したほうがよい、ということになります。
2025年01月14日 07:53
小川 慶一さん
2024年12月28日 20:12
小川 慶一さん
2024年12月28日 19:32
小川 慶一さん
2024年12月28日 17:20
AIユーザさん
2024年12月28日 14:24
小川 慶一さん