Excelで#NAME?が出ないように数式が入ったセルの値だけを取得するVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、数式の代入されているセルの「値」だけを他のセルに代入する方法を解説。

» 2014年06月13日 18時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 Excelで数式が代入されたセルの“値”だけを手作業でコピーしようとしたら、セル内に数式が表示されて、コピーに失敗し、「#NAME?」というエラー表示に出くわしたことはないだろうか。

 または、「何か『#NAME?』って変な文字が出て、データが壊れたから直しといて」なんてことをいわれて、泣く泣くデータの修正を余儀なくされたことはないだろうか。「#NAME?」というエラー表示は、主に、手作業で数式を入力しようとした際の、スペルミスによるところが大きい。

 こういった処理はできるだけマクロ化しておく方が、失敗もなく効率が良い。そこで今回は、数式が代入されているセルの「値」だけを他のセルに代入する方法を解説しよう。

数式が入ったセルの値だけを取得する

書式

オブジェクト.Value=オブジェクト.Value


 オブジェクトには対象となるRangeオブジェクトを指定する。値の取得にはValueを使用する。

 図1のような表があったとしよう。I3のセルにC15のセルの値だけを表示させ、各月の売上金額が変更されても影響されないようにする(リスト1)。

図1 I3のセルに値だけを代入する

Sub セルの値だけを取得()
  Range("I3").Value = Range("C15").Value
End Sub
リスト1 セルの値だけを取得するコード

 Valueプロパティを使って、I3のセルにC15のセルの数式を除いた値だけを代入している。

実行結果

 こうすると、各月の売上金額を変更しても、I3のセルの値だけは変更に影響されず、最初に代入された「値」だけが表示される(図2)。

図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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。