(Excelマクロ)「.value」を省略してはいけない場合がある
「.value」を省略した場合、エラーは出ないのに、目的の動作が実行されないことがあります。このページでは、その現象について、順を追って説明していきます。
このページで解説する項目は次の通りです。上から順番に解説します。
①「.value」の基本
セルに値を入れる――言わずと知れたExcelマクロの基本中の基本です。
Sub Sample1() Range("A1") = Range("A2") End Sub
Sub Sample2() Range("A1").Value = Range("A2").Value End Sub
どちらの例も、下画像のように、「A1セル」に「A2セル」の値が代入されます。
しかし、複数セルの値を複数セルに代入する場合は、「.value」を省略してはいけません。
②「.value」を省略してはいけない場合
次の例を見てください。
Sub Sample3() Range("A1:A2") = Range("A3:A4") End Sub
「A3:A4セル」の値を「A1:A2セル」に代入せよ、というように読めます。しかし、これを実行すると、次のようになります。
画像を見ていただければわかるとおり、「A1:A2セル」の値が消えます。このとき、エラーメッセージは出ません。
きちんと「.value」を付けた次の例では、目的の動作が達成されます。
Sub Sample4() Range("A1:A2").Value = Range("A3:A4").Value End Sub
③まとめ
この現象は、 Range(“A1:A2”)=1 のように、複数セルに対して一つの値を入れる場合は発生しません。複数セルに対して、複数セルの値を代入する場合に発生します。
数十行、数百行に及ぶマクロを組む場合、エラーメッセージが出ないため、この現象の原因に気がつくのはなかなか骨が折れます。多少面倒でも、「.Value」は省略しないようにしましょう。
最近のコメント