[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.129 Access いろいろとクエリーでグループ集計をしてみる

Access いろいろとクエリーでグループ集計をしてみる

メルマガ発行内容

<Access いろいろとクエリーでグループ集計をしてみる>

どうも、三流プログラマーのKen3です。 最近、質問もらうけど、 なかなか、解答できてない三流プログラマーのKen3です。 ※私のレベルで手に余る高度な質問が多くて。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba129.lzh にdb129.mdb(Access2000版)が保存されています。 ※クエリーをいじって、遊んでみてください。

/* * 1. 今回のキッカケ */

郵便番号の集計システムを現在やってます。 前回、ExcelのシートをAccessにインポートしました。 今回は、データを集計してみたいと思います。 集計方法(集計ルール) ^^^^^^^^^^^^^^^^^^^^^^ In message "[VBAで楽しく No.127] - 要求を聞き、疑問点をつぶし、仕様書を書く", >2.集計処理 > 郵便番号をカウントする > 郵便番号が7桁そろっているものを集計する > 同様に、3桁しかないもの,2桁しかないもの,その他 > を集計する。 > 集計結果が10以下(1〜9)のデータは、最後に△で集計する。 --- なんて、ルールより、ほしい結果を見た方がわかり易いかな。 (※だったら、このわかりにくい設計書は失敗ってことでは?) シート1(7桁正しいデータ) 郵便番号 集計数 000-0001 20 000-0002 19 000-0003 18 000-0004 11 シート2(7桁以外のデータ) 郵便番号 集計数 郵便番号 集計数 561 15 98 13 562 16 97 56 ←郵便番号が2桁しかないもの、なおかつ 563 20 78 35  集計数が10以上のものを番号順に並べる 564 36 565 29 2 15 ←郵便番号が1桁しかないもの、なおかつ 566 39 3 20  集計数が10以上のものを番号順に並べる 567 11 568 22 △△△ 1045 569 44 ↑ 郵便番号の集計で1〜9までのモノがあれば 570 33 △△△として郵便番号が何桁であろうが 571 55 この部分に計上することになる。 572 66 ↑ 郵便番号が3桁しかないもの、なおかつ 集計数が10以上のものを番号順に並べる

/* * 2.単純に集計を行う */

早い話が、インポートされた、 MOTO_DATA テーブルを同じ郵便番号で集計して(数を数えて) それぞれの条件で扱いやすければいいって感じで。 MOTO_DATAテーブル内のテストデータ 郵便番号 氏名 住所 電話番号 194-0012 三流 東京都町田市 070-9999-8888 228 タコスケ 神奈川県相模原市 070-9999-8889 220-0021 金城 神奈川県横浜市西区 070-9999-8890 220-0021 内川 神奈川県横浜市西区 070-9999-8891 220-0021 鈴木尚 神奈川県横浜市西区 070-9999-8892 ・ ・ ・ まずは、単純に集計してみます。 クエリーで、MOTO_DATAを選択後、郵便番号を選び、 メニューの表示を選択、集計にして、 グループ化とカウントを入れます ↑操作イメージ すると、郵便番号でカウントされた値が集計されたクエリーができます。 郵便番号 郵便番号のカウント 194-0012 1 220-0021 14 228 1 232 11 700-0941 1 ↑クエリー結果イメージ

/* * 3.文字数を数えてみる(演算フィールドの追加) */

結果が、 郵便番号 郵便番号のカウント 194-0012 1 220-0021 14 228 1 232 11 700-0941 1 と、なったけど、このままでは、使いにくいです。 194-0012 1 220-0021 14 700-0941 1 と 228 1 232 11 の2つに分けたいんだけど、何か、方法は無いのか・・・ 当たり前の話、文字数が違うので、Len関数を使って、文字数を求めてみます。 桁数:Len([郵便番号])とクエリーの演算フィールドを作成してみます。 フィールドに桁数:Len([郵便番号]) 集計を演算にしたフィールドを作成します。 ↑演算フィールド作成イメージ このクエリーを実行すると、 郵便番号 郵便番号のカウント 桁数 194-0012 1 8 220-0021 14 8 228 1 3 232 11 3 700-0941 1 8 上記のような結果が得られます。 ↑実行結果イメージ

/* * 4.大きく3つのパターンに分ける */

郵便番号 郵便番号のカウント 桁数 194-0012 1 8 220-0021 14 8 228 1 3 232 11 3 700-0941 1 8 ここまで、なんとか、クエリーでもってこれました。 これを パターン1 郵便番号7桁(−付で8桁)、カウント10以上 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 郵便番号 郵便番号のカウント 桁数 220-0021 14 8 パターン2 郵便番号7桁以外(−付で8桁以外)、カウント10以上 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 郵便番号 郵便番号のカウント 桁数 232 11 3 パターン3 カウント数が10以下(1〜9)※郵便番号が何桁であろうが ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 郵便番号 郵便番号のカウント 桁数 194-0012 1 8 228 1 3 700-0941 1 8 に分けてみたいですね。 元のクエリーに条件を付けて、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3つのクエリーを作成してみたいと思います。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ パターン1 Q_YUBIN_7 郵便番号7桁(−付で8桁)、カウント10以上 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 郵便番号 郵便番号のカウント 桁数 220-0021 14 8 --- 条件は >=10(10以上) で =8(桁数は8桁) ↑設定・実行結果イメージ パターン2 Q_YUBIN_ETC 郵便番号7桁以外(−付で8桁以外)、カウント10以上 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 郵便番号 郵便番号のカウント 桁数 232 11 3 --- 条件は >=10(10以上) で <>8(桁数はNot 8桁) ↑設定・実行結果イメージ パターン3 Q_YUBIN_1to9 カウント数が10以下(1〜9)郵便番号が何桁であろうが ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 郵便番号 郵便番号のカウント 桁数 194-0012 1 8 228 1 3 700-0941 1 8 --- 条件は <10 (10以下) で (桁数の条件は無し) ↑設定・実行結果イメージ

/* * 5.終わりの挨拶 */

今回は、 グループ化の集計方法 を探ってみました。 3つのグループを作成することが出来ました。 あとは、この集計結果をExcelへ出力です。 なんか、あまりスマートじゃなかったけど、 こんな方法もあるってことで。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba129.lzh にdb129.mdb(Access2000版)が保存されています。 ※クエリーをいじって、遊んでみてください。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.129を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・