|
|
| Excel VBA Macro ・ セル制御 ・ FAQ |
|
ワークシート関数(Dcount)をVBAの中で使うには?
|
|
|
|
Question 20.1 |
|
 |
 |
|
|
VBAの中でDcount関数を使用したいのですが、うまく動きません。
エクセル上で、「database」という名前で登録したデータを、「集計条件」という名前で登録した集計条件をもとに、集計したときのコーディング例です。
dim x1 as variant
x1 = application.dcount(database,"年",集計条件)
(スペルは少し間違っているかも知れません。) Excel97を使っています。教えて下さい。
|
|
Answer |
Copyright (C) 1999.6.13 永井善王 |
|
|
DCOUNT関数とは、Excelのデータベースの計算に使用する12種類のワークシート関数の1つですね。
「データベース」と言われて、特殊な難しいものを想像する必要はありません。Excelのワークシートでリスト形式のものは、データベースとして扱えます。よって、このDCOUNT関数が理解できれば、ほかのデータベース関数の理解が進み、思いがけない用途が広がるかも知れませんね。
前置きが長くなりますが、データベース関数について、Excelのヘルプから要点をまとめましたので、再確認しておきましょう。
|
| 関 数 |
機 能 |
| DAVERAGE |
条件を満たすレコードの平均値を返す
|
| DCOUNT |
条件を満たすレコードのうち、数値が入力されているセルの個数を返す
|
| DCOUNTA |
条件を満たすレコードのうち、空白でないセルの個数を返す |
| DMAX |
条件を満たすレコードの最大値を返す |
| DMIN |
条件を満たすレコードの最小値を返す |
| DPRODUCT |
条件を満たすレコードの積を返す |
| DSUM |
条件を満たすレコードの合計を返す |
| SUBTOTAL |
リストまたはデータベースの集計値を返す |
| ほかに、DGET、DSTDEV、DSTDEVP、DVAR、DVARP、GETPIVOTDATA (97以上) があります |
|
この中にある DSUMは時折見かけますね。より詳細が知りたければ、[ヘルプ]−[トピックスの検索]で、[キーワード]に「データベース関数一覧」と入力して表示させて、見てください。
回答に入りましょう。
DCOUNT関数は、データベースの指定されたフィールド列を検索し、条件を満たすレコードのうち、数値が入力されているセルの個数を返します。そして、その書式は、DCOUNT(Database, フィールド, Criteria) です。
引数 Database には、データベースを構成するセル範囲を指定、
フィールド には、関数の中で使用するフィールドを指定、
Criteria には、データベースの検索条件が設定されているセル範囲を指定します。
あなたが書いたコードを、これに照らしてみると、引数 Database は「database」、フィールド は「年」、Criteria は「集計条件」となりますね。
次に、VBAでワークシート関数を使う場合のコーディング方法を確認しましょう。
VBAからワークシート関数を呼び出す場合は、Applicationオブジェクトを使うか、Excel97以上ではWorksheetFunctionを使います。あなたのコードには、Applicationオブジェクトが正しく書かれているので、問題はありません。
ですが、「引数にセル範囲の参照を必要とするワークシート関数を使う場合は、Range オブジェクトを指定しなければならない」というルールがあるので、
DCOUNT関数の引数 Database と Criteria には、Range オブジェクトを指定することになります。
これで、わかりましたね。あなたは、引数に
セル参照の名前
を書いてしまいました。
|
マクロを修正する前に、ワークシート上で動作確認してみよう
あなたのワークシートのレイアウトが不明のため、右図のシートを作ってみました。シート名は「リスト」です。
このシートの仕組みとしては、A1:C5セルがデータベース、A7:C8セルが集計条件です。
D10セルには、あなたが書いたDCOUNT関数を記入しておきました。
引数は、セル参照の名前のままです。
このDCOUNT関数の働きは、データベースの中から年が 3であるセルの個数を集計します。
この場合は丑年と午年がそうですから、答えは 2になり、D10セルのDCOUNT関数の引数に名前を使っても、正しく動作していることがわかります。
|
|
|
|
マクロを修正してみよう
引数に記入したセル参照の名前を消して、Rangeオブジェクトを記入します。修正後のマクロを、下記にまとめておきました。
Sub リストデータをDCOUNT関数で集計する()
Worksheets("リスト").Select
該当数 = Application.DCount(Range("A1:C5"), "年", Range("A7:C8"))
MsgBox 該当数
End Sub
4行目の MsgBoxのコーディングは、動作確認のために、あえて入れたものです。
修正したマクロを動作確認しよう
サンプルブックのダウンロードは
ここをクリック
(YNxv957_dcount.xls.xls 20KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
|
|
| |
|
|