名称未設

【ExcelVBA公開模試】Valueがあっても無くても値の貼り付けになる

文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。

問題

次の図のように、セルA1に1000、セルA2に500、セルA3に数式「=A1+A2」を入力すると1500になる。次のプロシージャを実行するとセルA3、A4の値はそれぞれいくつになるか、理由を付けて述べなさい。

Sub moshi()
   Range("A1") = 2000
   Range("A4") = Range("A3")
   Range("A1") = 3000
   Range("A3") = Range("A3")
   Range("A1") = 4000
End Sub

わえなび式 正解例

(このページの下にあります)

目標回答時間

プロ1分以内、アマチュア3分以内に正解できたら合格

この問題の出題範囲

「速読VBA単語」Program3-3まで

ご案内

ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。

考え方

Range()やCells()のあとにドットが無ければ「.Value」が省略されているものとみなされます。「Value」とは値のことなので書式は含まれません。また、数式の場合は計算結果のみとなります。「Range()」または「Range().Value」を代入すると値の貼り付けになります。書式は残り、数式は消えます。

(日本語訳)

Subプロシージャ
   A1の値を2000にする
   A4の値をA3の値(2500)とする
   A1の値を3000にする
   A3の値の計算式を消して値(3500)の貼り付けをする
   A1の値を4000にする
おわり

正解例

セルA1を2000にすると足し算によってA3が2500になります。

Range("A4")=Range("A3")は値だけの貼り付けなので、セルA4には2500という値が入ります(数式ではなく相対参照でもない)。セルA1を3000にすると足し算によってA3が3500になります。

Range("A3")=Range("A3")は何も変わらないように見えますが、Valueの貼り付けなので数式が消えます。その後、A1の値を4000にしても足し算の式は消えているので、A3は3500のままです。

したがって、A3は3500、A4は2500となります。

(実行結果)

バックナンバー


この記事が気に入ったらサポートをしてみませんか?