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

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

関連記事

[PowerPoint VBA] テーブルの各行の高さを揃える

パワーポイントのテーブルには、「高さを揃える」という機能があるが、VBAにはそれに該当するメソッドが存在しない。 そこで、以下のプロシージャを自作した。 コード [crayon-5c443e98919 …

[PowerPoint][VBA] スライドの追加

パワーポイントのスライドを作成する方法。 メソッド 単にスライドを挿入する場合は、PPT.Slides.Addでよい。 今回はテンプレートファイルからスライドをコピーする形を取ったため、いくつか工夫が …

[Excel][VBA] クリップボードを経由しないコピーを勧める理由

自分の作ったエクセルマクロには、クリップボード経由のコピーは皆無だ。 その理由はいたってシンプルだ。 クリップボードを使わない理由 自分がマクロでクリップボードを使わない理由はたった1つ。 「ほかの作 …

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

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

[Excel][VBA] 名前付きセル範囲の参照

VBAで名前付きセル範囲を参照する方法は複数ある。 よく混乱するので、ちょっと整理しておく。 コード例

それぞれの方法の特徴 Rang …