WorksheetFunctionはとても便利です。
WorksheetFunction.Sum(合計したいセル範囲)
というただの合計ですら、WorksheetFunctionの方が簡単に書ける上に、
処理速度もWorksheetFunctionの方が早いです。
SUMIF、COUNTIF、VLOOKUPあたりの超便利な関数たちでやるような処理を、
WorksheetFunctionで瞬殺できるのは、ExcelVBAの大きな強みでしょう。
さて、この大変便利なWorksheetFunctionさんですが、
コードが長いという弱点があります。
コード中に何度も登場すると、打つのも面倒だし読みづらいですよね。
これを短縮する方法がこちらです。
' 汎用関数として持っておく Function Fx() As WorksheetFunction Set Fx = WorksheetFunction End Function ' 使用例 Fx.Sum(合計したいセル範囲)
WorksheetFunctionオブジェクトをそのまま返すだけの関数を作っておけば、
その関数名だけでWorksheetFunctionを呼び出せます。
Wfでもwsfでもなんでもいいので、呼びやすい名前にしてしまいましょう。
とても簡単な方法ですが、効果は絶大です。
Cells(Fx.Match(検索値, 検索エリア, 0), 2)
のように、引数などに入れても全く邪魔になりませんので、
WorksheetFunctionの長所である手軽さが、さらに強化されますよ。
ぜひ使ってみてください。
「オブジェクトを返す関数」に慣れる、一番簡単なサンプルかもしれませんね。
Functionプロシージャを使わない方法
汎用関数集を作って運用している方は、そこにこれを追加するだけですが、
汎用関数を使っていない方や使えないマクロにおいて、
この関数をわざわざ都度作るのは面倒です。
その場合に、Functionプロシージャを利用せずに短縮呼び出しする方法も書いておきますね。
あまり「コレ!」ってくらい便利なものではないので、
何かのヒント・アイデアになればという程度です。
Withステートメント
WorksheetFunctionをWithすることで、以降「.Sum」などのように関数を呼べるようになります。
With WorksheetFunction .Sum(合計したいセル範囲) End With
WorksheetFunctionを多用する箇所では、Withを使うと手っ取り早いですね。
変数
関数に出来るのですから、当然変数にもできます。
Dim Fx_ As WorksheetFunction :Set Fx_ = WorksheetFunction Fx_.Sum(合計したいセル範囲)
まあこれやるくらいなら、関数を作ってしまった方がいい気がしますが、一応紹介しておきます。
ユーザー辞書
wf | ⇒WorksheetFunction. |
と変換に辞書登録しておくことで、
読みづらさは変わりませんが、かなり書きやすくはなります。
すみf | ⇒WorksheetFunction.Sumif( |
などを用意しておくのもよいかもしれません。
以上3点です。そんなに便利ではないですが、他に応用の効きやすいトリオなので、WorksheetFunction以外にも使いどころはあると思います。
引き出しとして持っておくと使い道があるかもしれません。
おまけ:FileSystemObjectでも同じことができる
同じことをFileSystemObjectでやるのもかなりおすすめです。
Function FSO() As Object Static FSO_ As Object If FSO_ Is Nothing Then Set FSO_ = CreateObject("Scripting.FileSystemObject") Set FSO = FSO_ End Function
この関数を用意しておくことで、
' ファイルをコピー FSO.CopyFile wbコピー元ブック.FullName, Pathコピー先フォルダ & "\" & wbコピー元ブック.Name
と、メインコードでは突如「FSO」と書き始めることができます。
↓のコードを毎回コピペするのが面倒な方は、是非使ってみてください。
Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject")
コードの詳しい解説はこちらをどうぞ
www.limecode.jp