VBA技術解説
Rangeオブジェクト.Valueの省略について

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2014-11-05 最終更新日:2020-03-04

Rangeオブジェクト.Valueの省略について


エクセルVBAを教えていて、これほど多く聞かれる質問はないでしょう、
RangeやCellsの.Valueは省略したほうが良いか、書いた方が良いか、
当然、省略出来ない場合もあれば、オブジェクトとして扱うために.Valueは書けない場合もあります。
ですので、
結論から言えば、書きたければ書けば良いし、書きたくなければ書かなくて良い。
ただし、
.Valueを省略出来ない場合、.Valueは書けない場合、.Valueを書かない方が良い場合があります。
順に解説していきます。


.Valueを省略出来ない場合

Sheets(2).Range("A1:B5").Value = Sheets(1).Range("A1:B5").Value
これは値のコピーと同様になります、Value値のみ右辺から左辺に代入されます。
この場合は、右辺の赤太字.Valueが省略できません。
左辺の.Valueは省略可能です。

Sheets(Range("A1").Value).Select
A1セルにシート名が入っているとして、そのシートに対して何らかの処理をする場合です。
この場合も省略できません。
引数の型がObjectになっているため、省略してしまうとRangeオブジェクトを渡すことになってしまうからです。

Activesheet.Hyperlinks.Add Anchor:=Range("D20"), Address:=Range("F20").Value, TextToDisplay:=Range("D20").Value
このTextToDisplayでは.Valueは省略できません。


.Valueは書けない場合

Activesheet.Hyperlinks.Add Anchor:=Range("D20").Value, Address:=Range("F20").Value, TextToDisplay:=Range("D20").Value
このAnchorでは.Valueを書くことはできません。

Range("A1:B10").Sort Key1:=Range("A1").Value, Order1:=xlAscending, Key2:=Range("B1").Value, Order2:=xlDescending, Header:=xlNo
並べ替えでHeader:=xlNoの場合は、Keyに値つまりValueを指定できません。


.Valueを書かない方が良い場合

Range("A1:B10").Sort Key1:=Range("A1").Value, Order1:=xlAscending, Key2:=Range("B1").Value, Order2:=xlDescending, Header:=xlYes
並べ替えでHeader:=xlYesの場合は、Valueを付けても省略してもどちらでも動作します。
しかし、ここでの本質は、ソート範囲内における列位置を指定すべきものです。
Valueを指定するのは見出しの文字を引き渡すことになります、xlYesの場合は良いのですが先のxlNoの例からも指定すべきではないです。
また、Valueを指定しなければ、見出し行のセル以外でも良く、ソート範囲内のキーにしたい列のセルならどこでも良いのです。
(もっとも、中途半端な行を指定するのは、別の意味で良くありませんが)

変数 = WorksheetFunction.Match(Range("A1").Value, Range("B:B"), 0)
この場合は、通常はValueをつけても動作します。
しかし、検索値が日付の場合は、うまく動作してくれません。
そもそも、WorksheetFunctionはシート関数です、そしてその引数はセル(つまりRangeオブジェクト)を指定するものです。

可読性を考えて書き分ける

SubやFunctionの引数の場合、以下のように書き分けます。

Sub aaa(a1 As String)


Sub bbb(b1 As Range)

のようなSubが複数存在している場合です、ある程度規模のプログラムを作れば大抵は存在します。
この時、Call側では

Call aaa(セル.Value)
Call bbb(セル)

このように、引き渡す型を明示します。
説明は不要だと思いますが、
aaaでは、.Valueは書いても書かなくても良い。
bbbでは、.Valueは書けない。

つまり、両方とも書く必要はないのですが、
このような場合は、あえてaaaでは.Valueで渡してあげます。
これが可読性を上げるということです。



最後に、Valueの省略において、このような記事を見かけました。

Sub 文字列追加
  Dim c
  For Each c in Selection
    c = "id" & c
  Next
End Sub

この場合、.Valueを付けないと動かないというもの。
いやいや、そもそも
Dim c
って・・・
そんな話をするくらいなら、
Dim c As Range
と指定しましょうよ。
Rangeオブジェクトから話がずれてしまっているし、無理やりサンプルを持ち出している感満載です。
というか、そもそもSelectionに対して、For Each処理を初心者に教えるべきではないですね。

ということで、最初に書いたように、
省略出来ない場合もあれば、オブジェクトとして扱うために.Valueは書けない場合もる。
なので、
書きたければ書けば良いし、書きたくなければ書かなくて良い。

ちょっと無責任な結論になってますが、
できれば、Rangeオブジェクトの本質を知ったうえで、書く書かないを決めていただきたいと思います。



同じテーマ「マクロVBA技術解説」の記事

Excelのバージョンを判断して「名前を付けて保存」
空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)
空白セルを正しく判定する方法2
Rangeオブジェクト.Valueの省略について
シート保護でユーザー操作を制限する
シートに数式を設定する時のセル参照の指定方法
標準モジュールとシートモジュールの違い
オートフィルタ(AutoFilter)の使い方まとめ
複雑な条件(複数除外等)のオートフィルター(AutoFilter)
クリップボードを使わないセルのCopy
Rangeの使い方:最終行まで選択を例に


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

カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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