てぃーだブログ › S・M・C (Simple.Macro.Create) ~エクセルマクロ日記~ › VBA › エクセルマクロ(VBA):マクロと関数

2009年08月12日

エクセルマクロ(VBA):マクロと関数

昨日の記事で、例えが悪かったのか
「SUM関数ですぐ計算できるよ」って
言われてしまいました。
たしかにその通りです。

でも私が言いたかったのは、計算そのものではなく
変数の指定についてちょっと書いてみたかったので
経験が少ないものですからこんな例えになってしまい
ました。あしからず。

そこで今日は、
「エクセル関数を使うと便利な時」
「マクロを使うと便利な時」について
書いてみたいと思います。

データの集計によっては、
エクセルの関数で簡単に出来るものを
わざわざマクロでつくる必要のないものがあります。

昨日のご指摘にあったように、
「SUM関数」で済むものをマクロで作っては
かえって効率が悪くなります。

例えば、次の表ですと

エクセルマクロ(VBA):マクロと関数

収入合計と支出合計と残高を表の中で関数を使い
自動計算させています。
この表は、合計を表示する欄が決まっているので
エクセル関数で作る方が便利な使い方だと思います。

次の場合はどうでしょう。

エクセルマクロ(VBA):マクロと関数

合計を最後のデータの下に表示したい。

データが増えたり減ったりしてその都度行数が
変わっていきます。

予め合計の関数を入れておいて、行挿入、行削除を
繰り返してもいいと思いますが何らかの操作が必要に
なります。

ボタン一つで合計が自動的に表示できる
そんな機能がほしくなりますよね。

エクセルマクロ(VBA):マクロと関数

そこがマクロの得意とするところです。

それでは作ってみましょう。

Sub Macro2()

Dim 最終行
Dim 合計行

最終行 = Range("h65536").End(xlUp).Row

If Range("h" & 最終行) = "合計" Then
Range("H" & 最終行 & ":k" & 最終行).Select
Selection.ClearContents
Selection.Interior.ColorIndex = 34
最終行 = Range("h65536").End(xlUp).Row
合計行 = 最終行 + 1
Else
合計行 = 最終行 + 1
End If

Range("H" & 合計行 & ":k" & 合計行).Select
Selection.Interior.ColorIndex = 38
Range("h" & 合計行) = "合計"
Range("i" & 合計行) = WorksheetFunction.Sum(Range("i4:i" & 最終行))
Range("j" & 合計行) = WorksheetFunction.Sum(Range("j4:j" & 最終行))
Range("k" & 合計行) = WorksheetFunction.Sum(Range("k3") + Range("i" & 合計行) - Range("j" & 合計行))

End Sub

合計を表示するプログラムです。

合計を表示した後、次に入力したい場合
合計をクリアしてあげます。
そのプログラムが

Sub Macro1()
Dim 最終行
Dim 合計行
最終行 = Range("h65536").End(xlUp).Row
合計行 = Range("h65536").End(xlUp).Row + 1
If Range("h" & 最終行) = "合計" Then
Range("H" & 最終行 & ":k" & 最終行).Select
Selection.ClearContents
Selection.Interior.ColorIndex = 34
合計行 = 最終行
End If

End Sub

です。合計クリアのボタンを押すと
空白になり入力が出来ます。

それでは動きをテストしてみましょう。
合計ボタンを押します。
エクセルマクロ(VBA):マクロと関数

合計が表示されました。

クリアボタンを押してみます。

エクセルマクロ(VBA):マクロと関数

合計行がクリアされました。

7番目のデータを消して合計が
正しく表示されるか見てみます。

エクセルマクロ(VBA):マクロと関数

合計ボタンを押します。

エクセルマクロ(VBA):マクロと関数

正しく表示されました。

次に、7番目から3件データを追加してみます。

エクセルマクロ(VBA):マクロと関数

合計ボタンを押します。

エクセルマクロ(VBA):マクロと関数

正しく表示されました。

これが、「ボタン一つで!」という
便利な所ですよね。

エクセル関数とマクロを使い分けて・・・と、言うか
良い所を組み合わせて作業の効率化をどんどん
図っていきましょう。






同じカテゴリー(VBA)の記事

Posted by ミール at 16:08│Comments(0)VBA
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。