合計など、常に状態によって変化させるものは計算式。

「合計」のように、他のセルの値が変わった瞬間に連動しなければならない場合は「計算式」で対応する。

ワークシート上に手入力でデータを登録、追加等を行なうのであれば、当然、「計算式」をセットして運用します。「合計計算」のVBAを作っても、それを起動しなければ合計が合わないことになってしまいます。



「計算式」の動作がVBAではできないということではありません。 合計セルに計算結果をセットする関数を用意して、ワークシート上の変異で動くイベントプロシージャから呼び出すようにすれば「計算式」と同様の結果は得られます。 しかし「計算式」で済むことをVBAでやるのかという問題です。



「計算式」であればVBA側のソースコードを見なくてもどのような計算が行なわれているのかがシート上で「式」を確認すれば解ります。 これはVBAの知識がない人でも理解できると思います。



さらにはこれらをVBAで処理するように作成してしまった場合は「マクロ無効」で開いた時に計算が行なわれず、 そのブックを閉じる時にも再計算されないことまで配慮しなければなりません。

戻る 先頭に戻る

一過性のものはVBA

1回セットしたら、以後ほとんど変更がないような内容は、VBAでセットしたほうが良い。

例えば、元々の値の更新をVBAで行ない、ワークシート上で直接操作しないのであれば、各行の横合計に計算式をセットしていても次にVBAが動くまで何の値も変動しないなどというケースが良くあります。このようなケースでは、VBA上で横合計を算出して「値」でセットした方がワークブックが軽く仕上げられます。



もちろん、運用上でその「横合計」の計算に影響する項目値の変異がないことの約束が採れている場合に限定される話です。

戻る 先頭に戻る

計算式はVBAよりいろいろな限度がある。

複雑な判断や他表参照など、計算式では対応しにくいケースや処理が「重く」なってしまうケースでは、VBAで記述した方が柔軟に処理できます。

「計算式」の限度として、1つの計算式には関数が最大で30個までしか使えないという点があります。IF関数」を何重にもネストして判断するような、複雑な式を多くのセルに収容するような場合は、そのセルの組み合わせ回数分を行列移動させながら計算する処理をVBAで作成した方が、はるかに軽いワークブックになります。



他表(他ブック)の値をリンクで自ブックに持ってくるような場合、参照範囲の全セルに参照元を示す長い式(同じパス名、ファイル名が含まれてしまう)が作成されてしまいます。これらも「そのブックを開いて、シートを値で自ブックのシートに貼り付け、そのブックを閉じる。」という処理をVBAで作成すれば、そのワークブックのファイルサイズが何十分の一になるようなこともよくあります。VBAで貼り替えるなら、ワークブックを開いた時に「リンクを更新しますか」のメッセージも表示されません。



処理上での限度に触れない範囲でも、他のコンピュータからエクスポートしたCSVデータなどを定期的にExcelで集計や検索用途で加工して配布するケースは多いと思いますが、 大きい一覧表の各行で何種類もあるコードから名称を編集するのにVLOOKUP関数を利用するような場合は、作成されたワークブックサイズが肥大して動作が遅くなることも多く、 同じ作業を定期的に行なうものであればこれらの名称編集を行なうVBAをテンプレートに用意させておいて、 そのテンプレートにCSVデータを読み込むような方法を考えると良いでしょう。
このような時に用意するVBAは特に難しいものではなく、
  ①一覧表の計算範囲(特に最終行)を判定する
  ②それらの範囲に計算式を貼り付ける
  ③シートを再計算させる
  ④それらの範囲の計算式を値に置き換える
というもので最初に1例でも作成できれば同じようなことを行なう他表にも簡単に応用できるものです。

戻る 先頭に戻る

計算式とVBAを組み合わせて利用する。

計算式、VBAとも「良い所取り」で使いましょう。

「計算式」のページに「ふりがな」の処理の説明があります。この説明にはワークシートのイベントによるマクロの処理も説明してあります。組み合わせて使う例です。



「氏名」や「住所」などをIMEを使って漢字で入力させるのですが、このIMEからの入力情報を「PHONETIC」というワークシート関数でふりがなとして取り出すことができます。これによりふりがなを再度入力する手間を省く利点があります。



しかし、計算式をセルに貼ってしまうのですから、誤入力も発生するし、難しい漢字を単漢字音読みで入力することもあるでしょう。こんな時にふりがなを修正することができません。



そこで、その「PHONETIC」の計算式はどこか見えないセルに入れておき、セル値の変化イベントで実際のふりがなの項目に転記させるという「手」があります。転記するだけの簡単なイベントマクロです。
このように計算式でできること、マクロでできることを組み合わせられると、簡単に仕組みを作ることができるようになります。