業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、数式の代入されているセルの「値」だけを他のセルに代入する方法を解説。
Excelで数式が代入されたセルの“値”だけを手作業でコピーしようとしたら、セル内に数式が表示されて、コピーに失敗し、「#NAME?」というエラー表示に出くわしたことはないだろうか。
または、「何か『#NAME?』って変な文字が出て、データが壊れたから直しといて」なんてことをいわれて、泣く泣くデータの修正を余儀なくされたことはないだろうか。「#NAME?」というエラー表示は、主に、手作業で数式を入力しようとした際の、スペルミスによるところが大きい。
こういった処理はできるだけマクロ化しておく方が、失敗もなく効率が良い。そこで今回は、数式が代入されているセルの「値」だけを他のセルに代入する方法を解説しよう。
オブジェクト.Value=オブジェクト.Value
オブジェクトには対象となるRangeオブジェクトを指定する。値の取得にはValueを使用する。
図1のような表があったとしよう。I3のセルにC15のセルの値だけを表示させ、各月の売上金額が変更されても影響されないようにする(リスト1)。
Sub セルの値だけを取得() Range("I3").Value = Range("C15").Value End Sub
Valueプロパティを使って、I3のセルにC15のセルの数式を除いた値だけを代入している。
こうすると、各月の売上金額を変更しても、I3のセルの値だけは変更に影響されず、最初に代入された「値」だけが表示される(図2)。
図2では9月の売上金額だけ変更させてみた。数式の入っているセルの合計金額はそれに伴って変更されるが、値だけを代入したI3のセルの値は変更がない。
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.