Square Beat Engine

Blog for variety of things…

MS-Office

[Excel][VBA] エクセルVBAではValueプロパティを指定しよう

投稿日:2014-12-20 更新日:

前回は、自動記録マクロの問題点を3つ挙げ、1つめのSelectメソッドの無駄を指摘しました。
今回は、2つめのFormulaR1C1プロパティについて考えます。

プロパティの指定

FormulaR1C1は、数式を指定するためのプロパティです。
たとえば以下のようなコードを実行すると、A1セルの数式が=1+1となり、セル上には2と表示されます。

したがって、文字列を数式として設定するのは意味的に不適切であり、コードの可読性を下げる原因となります。

文字列は、Valueプロパティで指定します。
つまり、この時点で望ましいコードは以下のようになるわけです。

速度計測

Selectメソッドの省略では明らかに高速化ができたが、今回は特に差が見られませんでした。
個人的には、FormulaR1C1で一度判断が入るので、Valueの方が早いと考えていたのだが、どうやらそういう仕組みではないようです。

プロパティ指定なし

エクセルもVBAも、かなり親切に設計されており、多少の不足があっても補ってくれることが多いです。
特に、今回挙げたFormulaR1C1やValueは、省略しても問題なく動作します。

ただ、この「問題なく」というのは、「今回と同じく」という意味でしかなく、必ず意図通りに動くという意味ではありません。
VBAの仕組みを理解してくると、この親切設計は却ってデバッグを妨げることも多々あります。

意図通りに動かすためには、たくさんの メソッドやプロパティの使い方を覚えて、適切なコードを書くことが重要です。

Valueプロパティでも書式のコピーが可能 – xlRangeValueXMLSpreadsheet

Excel2007からはValueに引数を指定することで書式ごと転記できるようになりました。
引数はXlRangeValueDataType 列挙を使用します。

xlRangeValueXMLSpreadsheetを指定すると、書式ごと転記できるので非常に便利に使うことができます。

コード例

今回のまとめ

速度に影響がなくとも、エクセルの親切機能に頼りすぎると、意図しない動作となってしまう場合があります。
また、意図とコードを一致させることはメンテナンスを向上させるので、その面からも適切なプロパティを用いるべきです。

次回は、ワークブックやワークシートを明確に指定することについてです。

今回はここまで!

-MS-Office

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

[Excel][VBA] ブックの手動計算とValue(xlRangeValueXMLSpreadsheet)の危険な関係

VBAを使ってExcelで複雑なツールを作ろうとすると、いろいろと細かい部分でつまずくものだ。 今回は、ブックの計算を手動にしていても、特定の条件下で自動に戻ってしまうという現象に遭遇した。 Valu …

[Excel][VBA] ワークブック・ワークシートを明確に指定

前々回・前回に引き続き、セルに文字列を記入するときのコードについて考えてみます。 今回は、ワークブック・ワークシートを明確に指定する必要性を検討します。 なぜ指定するのか セルの操作をする際、ワークシ …

[Excel][VBA] シートを新規ワークブックにコピーする方法

既存のシートからワークシートを新規シートにコピーする。 手動の場合は、新規ワークブックを選択するだけでよい。 VBAでは以下のメソッドを用いる。 コード例 [crayon-5c906e5b387080 …

[Excel][VBA] Selectメソッドは99%不要

エクセルで、A1セルを選択した後、「abc」という文字列を入力することケースを考えてみます。 この操作をマクロに記録すると、以下のようなコードが生成されるでしょう。 [crayon-5c906e5b3 …

[Excel][PPT][VBA] エクセルとパワーポイントの改行コードの違い

VBAで、エクセルからパワーポイントに改行を含む文字列をコピーしようとしたとき、若干つまずいたのでメモ! この記事で解決できる課題 パワーポイントの箇条書きでは、Enterで次の段落に移動し、新しい箇 …