忙しい現代人の腰&肩のお悩み対策!

access 2010 複数フィールドの集計について

access初心者なので教えて下さい。
車の整備をやっております。

1)テーブルの構成
テーブルは一つだけです。
主keyは修理受付番号です。
ただしリーレションはありません。

約150車種の車種フィールド、別フィールドに修理工程1〜10があり、約100種類の修理工程よりメカニックが選んだ最大10種類までの修理工程がテキスト型式にてテーブル化されている。

2)テーブルのイメージ
フィールド1 フィールド2 フィールド3...
車種 修理工程1 修理工程2...
フィット オイル交換 バッテリー交換
プリウス タイヤ交換 アルミ交換
ノート 板金塗装 ヘッドライト交換
エスティマ ワイパー交換 板金塗装
アクア オイル交換 タイヤ交換
フィット アルミ交換 バッテリー交換
ノート タイヤ交換 アルミ交換
ノート タイヤ交換 null

約10万行続く

3)得たい結果
フィットは2台でオイル交換1、バッテリー交換2、アルミ交換1。

ノートは3台で板金塗装1、ヘッドライト交換1、タイヤ交換2、アルミ交換1。

のように、車種が何で修理工程の何がいくつあったかを集計したいです。

4)エクセルにてピボットテーブルを組んだのですが、150車種及び100種類の修理工程から不規則に選ばれた、修理工程1から10が入っており、行側列側ともに大きく広がってしまい、集計内容が見づらくなってしまいます。

accessのクロス集計も指定出来る限度を超えてしまいます。

修理工程1から10までひとつのフィールドにし、他のフィールドは単純に同じものをコピーしカウントしたら、車種、修理工程以外のレコードが10倍になってしまいます。

5)テーブルは別システムからcsvで出力したものをaccessに取り込んだものです。

3)のような集計結果を出したい場合、どのようにしたら可能かお知恵を下さいますようお願い致します。

質問者からの補足コメント

  • お世話になります。ユニオンクエリ結果まで出ました。ありがとうございます。
    その後の手順のクロス集計にてクエリ1を選択しますと。

    選択したテーブルまたはクエリは、クロス集計クエリにデータを提供するためのフィールド数が足りません。数値型、日付型、テキスト型フィールドが最低でも3つあるテーブルまたはクエリを選択してください。

    作成したクエリ1がフィールドとして2つしかないからでしょうか?

    「access 2010 複数フィールドの」の補足画像1
      補足日時:2016/07/03 07:09

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ユニオンクエリで 横方向のデータを縦に変換したものをクロス集計します。


「access 横 縦」でググってみてください。

元テーブルを「テーブル1」と仮定します。

SELECT 車種, 修理工程1 AS 修理工程
FROM テーブル1
WHERE 修理工程1 Is Not Null
Union All
SELECT 車種, 修理工程2 AS 修理工程
FROM テーブル1
WHERE 修理工程2 Is Not Null
Union All
SELECT 車種, 修理工程3 AS 修理工程
FROM テーブル1
WHERE 修理工程3 Is Not Null
  ・・・・・

データとしては必要ありませんが、
[修理受付番号] も加えた方が、デバッグし易いですね。

上記クエリを「クエリ1」として
それを元にクロス集計します。

添付図を参照のこと。

右端のフィールドは
台数: First(DCount("*","テーブル1","車種='" & [車種] & "'"))
です。

テーブル名、クエリ名は 、実際の 名前に修正してください。
「access 2010 複数フィールドの」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答下さり、ありがとうございます!引き続き初心者の質問となってしまうのですが、クエリ1を作る際に、元テーブル1から選択フィールドを車種、修理工程1〜10を選択するのでしょうか?ご記載頂いたSELECT文はクエリ画面の抽出条件: 欄に修理工程1から10全てのフィールドに水平に同じ言葉を書けば良いのでしょうか?
すいません、画面コピーと命令文までご記載下さりありがとうございます。

お礼日時:2016/07/02 18:32

あ、そこからですか ^^;



ユニオンクエリは「デザインビュー」では作れません。
「SQLビュー」 に切り替えてズラズラっと入力してください。

実際には 「メモ帳」などで1つ分作り、数字の部分を変えながら
「SQLビュー」にコピペしていくのが簡単でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。大変失礼しました、超のつく初心者です。デザインビューではないのですね、でも教えて下さりありがとうございます。やってみます。何度もありがとうございます。

お礼日時:2016/07/02 19:08

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessで複数のフィールドから抽出・集計するには?

初めまして。Accessを勉強しながらデータベース作成中です。
見様見まねで作っていて、行き詰まってしまったので教えて下さい。

以下のようなデータがテーブル「T試合結果」にあるとします。
-------------------------------------
対戦相手,1試合目日時,1試合目勝敗,1試合目場所,2試合目日時,2試合目勝敗,2試合目場所,3試合目日時,3試合目勝敗,3試合目場所,・・
Aチーム,2005/01/01,勝ち,a会場,2005/02/01,負け,c会場,2005/03/01,引分,b会場,・・
Bチーム,2005/02/01,勝ち,b会場,2005/03/01,負け,d会場,2005/04/01,勝ち,a会場,・・
Cチーム,2005/03/01,引分,c会場,2005/04/01,勝ち,b会場,2005/05/01,勝ち,d会場,・・


-------------------------------------
この「T試合結果」をもとしたクエリ「Q試合結果」から
データを追加していけるよう単票形式でフォーム「F試合結果」を作成しました。
このフォーム上にボタンを2つ置き、クリックで次のような結果を出したいのです。

(1)チームごとの最新対戦結果表示

 対戦相手,日時,勝敗,場所
 Aチーム,2005/**/**,勝ち,a会場
 Bチーム,2005/**/**,負け,b会場
 Cチーム,2005/**/**,引分,c会場
 ・
 ・

(2)日別の勝敗数集計

 日時,勝敗,勝敗数
 2005/01/01,勝ち,1
 2005/01/01,負け,0
 2005/01/01,引分,0
 2005/02/01,勝ち,1
 2005/02/01,負け,1
 2005/02/01,引分,0
 ・
 ・

どうすればよいでしょうか?根本的に何か間違っているかもしれませんが…
マクロやVBAについては、サンプルデータをいじって若干作り変えている程度の素人です。
良い方法がありましたらよろしくお願いいたします。

初めまして。Accessを勉強しながらデータベース作成中です。
見様見まねで作っていて、行き詰まってしまったので教えて下さい。

以下のようなデータがテーブル「T試合結果」にあるとします。
-------------------------------------
対戦相手,1試合目日時,1試合目勝敗,1試合目場所,2試合目日時,2試合目勝敗,2試合目場所,3試合目日時,3試合目勝敗,3試合目場所,・・
Aチーム,2005/01/01,勝ち,a会場,2005/02/01,負け,c会場,2005/03/01,引分,b会場,・・
Bチーム,2005/02/01,勝ち,b会場,2005/03/01,負...続きを読む

Aベストアンサー

>テーブル「T試合結果」
対戦相手,1試合目日時,1試合目勝敗・・
とありますが対戦相手,1試合目日時,1試合目勝敗・・という横にずっと並んだ複数のフィールドなのでしょうか?
テーブルT試合結果は
対戦相手・日時・勝敗・試合場所 の4つのフィールドにした方が入力も集計も簡単に済みます。
各フィールドが横にずっと続くようなテーブルはユニオンクエリを使ったりしないと集計等が出来ません。

>(1)チームごとの最新対戦結果表示
上記で書いた4つのフィールドであれば簡単にやるには2つのクエリを作ればできます。
まず対戦相手と日時の2つのフィールドがあるクエリを作り集計クエリにし対戦相手をグループ化・日付を最大にします。
そのクエリを元にもう一つクエリを作りテーブル追加でT試合結果を追加し集計クエリとT試合結果の対戦相手同士と日付の最大と日付をリレーションで結合しT試合結果の勝敗のフィールドをクエリに追加します。
2つ目に作ったクエリを開けば最新対戦結果を表示出来ます。
複数のフィールドから・・となると
SELECT T試合結果.対戦相手, T試合結果.1試合目日時
FROM T試合結果
UNION SELECT T試合結果.対戦相手, T試合結果.2試合目日時
FROM T試合結果
UNION SELECT T試合結果.対戦相手, T試合結果.3試合目日時
FROM T試合結果
  ・
  ・
;
のように必要フィールド分SQLで記述して試合日時を同一のフィールドに結合してそのユニオンクエリから抽出するようになります。
ユニオンクエリを作るのが大変ならT試合結果のフィールドの変更をお勧めします。

>(2)日別の勝敗数集計
同様に4つのフィールドであれば
クエリを1つ作り集計クエリにし試合日付と勝敗の2つのフィールドを作り日付と勝敗でグループ化し勝敗数というフィールドを作りフィールドに勝敗を指定し集計をカウントにすれば出来ます。
複数ある場合はユニオンクエリを作り元にして同様に集計クエリを作れば出来ます。

T試合結果のフィールドの持ち方を変更した方が良いと思います。データベースとしてのテーブルの概念とちょっと違うと思います。

>テーブル「T試合結果」
対戦相手,1試合目日時,1試合目勝敗・・
とありますが対戦相手,1試合目日時,1試合目勝敗・・という横にずっと並んだ複数のフィールドなのでしょうか?
テーブルT試合結果は
対戦相手・日時・勝敗・試合場所 の4つのフィールドにした方が入力も集計も簡単に済みます。
各フィールドが横にずっと続くようなテーブルはユニオンクエリを使ったりしないと集計等が出来ません。

>(1)チームごとの最新対戦結果表示
上記で書いた4つのフィールドであれば簡単にやるには2つのクエリ...続きを読む

Qアクセスのクエリ フィールドの合計

フィールドの合計

アクセスのクエリでいくつかのフィールドの合計を出そうとして

クエリのフィールドに以下の式をいれております。

⇒合計:([A])+([B])+([C])
(例えば[A][B][C]のフィールドの合計を出すとして)

しかし、[A]の値が1、[B]の値が2、[C]の値が2と入っている場合は5と合計値が当然でますが
例えば[C]のフィールドが空欄の場合、合計値欄が空欄で表示されます。

非常に簡単な質問かと恐縮ですがおしえてください!

Aベストアンサー

まあ、クエリだけであれば、 

合計:Nz([A])+Nz([B])+Nz([C])

で解決する訳ですが、これでOKと考えるのは問題ありです。
まぜなら、<ヌル値を発生させない>が基本だからです。
置換という手もありますが、入力段階で対策を取ったがいいです。
その上で、バグ対策としてNz関数を使うのは構わないと思います。

QAccess 複数のクエリの結果をひとつの表にまとめたいのですが

Access2002の初心者です。
健康診断の結果の個別の検査数値から異常値の人数を、部署ごとにカウントするクエリを検査の数だけつくりました。これをひとつの表としてクエリでまとめたいのですが、うまくいきません。
イメージとして

クエリ1 血圧
A部署  2人
B部署  1人
C部署  3人

クエリ2 血糖値
A部署  4人
B部署  2人
C部署  1人

↓↓このようにまとめたいのですが
    体重 血糖値
A部署 2人  4人
B部署 1人  2人
C部署 3人  1人

よろしくおねがいいたします。

Aベストアンサー

クエリ1、クエリ2をクエリデザインビューに取り込み、部署で結合するだけで
目的のものは得られますが

クエリ1、クエリ2と分けて結果を出さなくとも
クロス集計クエリで大元のテーブルからいきなり最終結果がでるはずですよ
クロス集計クエリについて勉強してみてください

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?

お世話になります。現在大量にデータを前に悩んでいます。

テーブルに以下のようなデータがあります。

| 薬剤名 | 効果 |
-----------------------
| A剤  | 頭痛 |
| A剤  |生理痛 |
| A剤  | 発熱 |
| B剤  | 歯痛 |
| B剤  |生理痛 |
| C剤  | 頭痛 |

これを、薬剤名ごとにまとめ効果を横へ並べる。

| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤  | 頭痛 |生理痛| 発熱 | |
| B剤  | 歯痛 |生理痛|   | |
| C剤  | 頭痛 |   |   | |

ことって出来るのでしょうか?
効果の数はいくつになるか分かりません。現在は最大7つですが、今後それ以上の物が出る可能性もあります。

ACCESSでは無理なことでしょうか?

また、ACCESSのバージョンは2002です。なお、ACCESSについては、使用法を含め初心者に毛が生えたくらいの知識しかありません。申し訳ありませんが「サル」にもわかるくらいの優しさでご指導願えれば幸いです。

よろしくお願いします。

お世話になります。現在大量にデータを前に悩んでいます。

テーブルに以下のようなデータがあります。

| 薬剤名 | 効果 |
-----------------------
| A剤  | 頭痛 |
| A剤  |生理痛 |
| A剤  | 発熱 |
| B剤  | 歯痛 |
| B剤  |生理痛 |
| C剤  | 頭痛 |

これを、薬剤名ごとにまとめ効果を横へ並べる。

| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤  | 頭痛 |生理痛| 発熱 ...続きを読む

Aベストアンサー

こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?

・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。

一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。

*少し、ADO を利用することになります。コードはサワリだけ。

薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤   3    頭痛   生理痛  発熱

このように、<薬剤別効果一覧>テーブルにデータを登録するコードは以外と簡単です。

Private Sub コマンド_薬剤別効果一覧追加_Click()
  Dim isOK  As Boolean
  Dim strSQL As String
  
  isOK = CnnExecute("DELETE FROM 薬剤別効果一覧")
  If isOK Then
    strSQL = "INSERT INTO 薬剤別効果一覧 " & _
         "(薬剤名, 効果総数, 効果名_1, 効果名_2, 効果名_3)" & _
         " Values " & _
         "('A剤', 3, '頭痛', '生理痛', '発熱')"
    isOK = CnnExecute(strSQL)
    If isOK Then
      MsgBox "[薬剤別効果一覧] にデータを追加しました。"
    End If
  End If
End Sub

僅かに、CnnExecute()を自作ライブラリに追加するだけで、このように読めば判るコードが書けます。
これならば、質問者にとっても別に難しいことではないと思います。
SQL文は、Accessプロジェクトのそれですので Jetとは違うかも知れませんが基本は同じです。
課題は、strSQL の生成にあります。
ここが一つにハードルです。
まあ、それも含めて書くと、一つのプロシージャ全体を請け負うことになりますのでチョットです。

質問レベルからして、いずれ、この領域に踏み込む必要ありと感じましたので・・・。

Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & CnnErrors.Description & Chr$(13) & _
      "・Err.Number=" & CnnErrors.Number & Chr$(13) & _
      "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
      "・SQL Text=" & strSQL, _
      vbExclamation, " ADO関数エラーメッセージ"
End Sub

Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
   Dim isOK As Boolean
   Dim cnn As ADODB.Connection
  
   isOK = True
   Set cnn = CurrentProject.Connection
   With cnn
     .Errors.Clear
     .BeginTrans
     .Execute strSQL
     .CommitTrans
   End With
Exit_CnnExecute:
On Error Resume Next
   cnn.Close
   Set cnn = Nothing
   CnnExecute = isOK
   Exit Function
Err_CnnExecute:
   isOK = False
   If cnn.Errors.Count > 0 Then
     ErrMessage cnn.Errors(0), strSQL
     cnn.RollbackTrans
   Else
     MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
        vbExclamation, " 関数エラーメッセージ"
   End If
   Resume Exit_CnnExecute
End Function

こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?

・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。

一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。

*少し、ADO を利用することになります。コードはサワリだけ。

薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤   3    頭痛   生理痛  発熱

この...続きを読む

Qクエリで合計を出したい。。

こんにちは。
初歩的な質問で申し訳ありませんが、回答お願いします。
アクセスで売上をつけています。
地区ごとのクエリで合計を出したいのですが

社名  地区  売上
A社 ○○地区 1000
B社 ○○地区 2000 
C社 ○○地区 3000
D社 ○○地区 4000
E社 ○○地区 5000

という感じなんですが
どこかのセル(アクセスでもセルと呼ぶのでしょうか^_^;?)に売上の合計(ここでは15000です)が出るようにしたいのですが・・・。

Aベストアンサー

地区ごとの合計を出したいのなら、
クエリを作成し、該当するテーブルを選び
「地区」、「売り上げ」を選択して
右クリックして「集計」をクリックし
「地区」の集計を「グループ化」
「売り上げ」の集計を「合計」にする。

SQLビューで見ると

SELECT 地区名, Sum(売り上げ) AS 合計 FROM テーブル名 GROUP BY 地区名;

といった感じかな。

Qインポート時のエラー「データ型の変換エラー」

ACCESS2000を使用しています。
CSVファイルをマクロを使い、インポートしようとしているのですが、ある列に「33300G2」というデータがあります。
インポートのマクロを実行するとそのデータのみがインポートエラー(エラー内容は「データ型の変換エラー」)となってしまいます。
ちなみに、エラーが出る列は、「33300G2」以外全てが数字のみなのですが関係あるのでしょうか。
もし原因らしきものがわかればアドバイスよろしくお願いいたします。

Aベストアンサー

インポート定義をして下さい。
インポート→設定→データ型を変更して下さい。
何かあれば補足して下さい。
がんばれ

QMS-Accessのクロス集計クエリとピボットテーブルについて

MS-Accessでの クロス集計クエリとピボットテーブルについて教えて下さい。
1.両者の違い と その使い分け がよく理解できない
2・印刷プレビューでうまく表示されない(レイアウト)
3.Web形式で出力したいのですが
以上ですが、よろしくお願いします。

Aベストアンサー

> 1.両者の違い と その使い分け 

私は次のように考えています。

クロス集計クエリもピボットテーブルも、「クロス集計ツール」の一種。
どちらを使っても良い。
ただ、ピボットテーブルのほうが高度なクロス集計ができる。
例えばAccessのクロス集計クエリは「値」に指定できるフィールドが1つだけだが、
ピボットの場合は、仕様の限度までいくつでも、複数の「値」を指定し、
同時集計ができる。
集計の切り口をユーザーがリアルタイムに自由に変える事ができる。
クロス集計クエリではそのような部分がピボットよりも自由度が低い。
そのため、基本的にAccessのクロス集計クエリは必要箇所以外は
あまり使わない。
Accessのクロス集計を使うのは、
・どうしてもレポートやフォームのソースなどとして必要
な場合しかあまり使いません。
でもレポートもどうしてもAccessのレポートじゃないといけない場合
以外は、ピボットで代用してしまいます。
結局、「Excelにデータを落としたい」という要望が大抵出るので、
レポートやクロス集計クエリにするのが面倒ということもあります。
(ExcelピボットはAccessにつなぐ場合は、ソーステーブルが65000件
 超えててもOKなので)

ですから、
「最終的にいろんな角度から集計・分析したい」という要望がある場合は、
私はほとんどピボットテーブルを使います。
ピボットのほうが、ユーザーがあとから「こんなこともしたい」と
言ってきたときに、先に作ったものを見せ方を変えるだけで済むこともあるので。

・社内向け集計書類→ほとんどピボット。
・社外向け集計書類やどうしてもAccessのクロス集計クエリでないとマズイ場合
  →クロス集計クエリ。
・システムの中で、どうしてもAccessのクロス集計クエリでないとマズイ場合
(クロス集計の結果をさらに加工してサブシステムなどで使いたいとき
など。)
  →クロス集計クエリ。

という感じでしょうか?

要は
「ピボット」>「クロス集計クエリ」という感じ。

ピボットでできないのは、出力結果をネストさせてAccessのレコードセット
にすることくらいではないでしょうか?
最終結果出力としてなら、レイアウト的には、「クロス集計クエリで
できることはすべて、ピボットの中に含まれてしまう・・・」
というイメージでとらえています。



ちなみにAccessにもピボットはありますが、Excelのほうが自由度が大きいですし、
あまりAccess内にピボットを増やすと容量が肥大することもあるので、
AccessにExcelから接続して、Excelのピボットを使う場合が多いです。
それをAccess側からCOMなどで自動的に開いたり、
操作(自動レイアウト変更など)をしたりします。

>2・印刷プレビューでうまく表示されない(レイアウト)

状況がよくわかりませんのでどうお答えしてよいかわかりません。
何の何のレイアウトが印刷プレビューでうまく表示されないのでしょう?

>3.Web形式で出力したいのですが

??
ブラウザ上でピボットテーブルやクロス集計クエリを操作したいという意味でしょうか?
もしそうでしたら、ピボットテーブルならできるので、この場合は
クロス集計クエリは要らないとは思いますが、ユーザーさんのご要望が
どうなのかよくわからないのでなんともいえませんが・・・。

> 1.両者の違い と その使い分け 

私は次のように考えています。

クロス集計クエリもピボットテーブルも、「クロス集計ツール」の一種。
どちらを使っても良い。
ただ、ピボットテーブルのほうが高度なクロス集計ができる。
例えばAccessのクロス集計クエリは「値」に指定できるフィールドが1つだけだが、
ピボットの場合は、仕様の限度までいくつでも、複数の「値」を指定し、
同時集計ができる。
集計の切り口をユーザーがリアルタイムに自由に変える事ができる。
クロス集計クエリではその...続きを読む

Qアクセスで複数列にまたがる同一名義の個数を集計出来ますか?

例えば(1)(2)(3)(4)と4つのフィールドがあるとします。
それぞれのフィールドにランダムにレモンと入力されているとします。
その際にクエリでカウント集計を使うと、それぞれのフィールド事には個数を出せるのですが、4つのフィールド上のレモンの合計を集計する事は出来ません。
これを可能にする事は出来ますか?
アドバイスお願いします。

Aベストアンサー

> レモンの部分を代数にしてフォーム中の別の非連結コントロールの言葉と同じ物を
> カウントするという風に変えられますか?

出来ます。

品名を指定するフォーム名を 「フォーム1」とし、コントロール名を「品名」と
した場合、下記の計算式になります。

=Dcount("[(1)]","TBL1","[(1)]='" & Forms![フォーム1]![品名] & "'")+Dcount("[(2)]","TBL1","[(2)]='" & Forms![フォーム1]![品名] & "'")+Dcount("(3)","TBL1","[(3)]='" & Forms![フォーム1]![品名] & "'")+Dcount("[(4)]","TBL1","[(4)]='" & Forms![フォーム1]![品名] & "'")

この「計算式を設定するコントロール」と「参照先コントロール」が同じフォーム上にある
の場合は、フォーム名を書く必要はなく、下記のようになります。

=DCount("[(1)]","TBL1","[(1)]='" & [品名] & "'")+DCount("[(2)]","TBL1","[(2)]='" & [品名] & "'")+DCount("(3)","TBL1","[(3)]='" & [品名] & "'")+DCount("[(4)]","TBL1","[(4)]='" & [品名] & "'")


参考:

参照する[品名]が文字列なので、Dcountの第3引数は、
 "[(1)]='" & Forms![フォーム1]![品名] & "'") のようにして ='みかん' と両側に
 ' が付くようにします。

もし、数値フィールドをカウントする場合は、' は必要なく =5 のようになり、
フォーム上のコントロールの数値を参照する場合は、
 "[(1)]=" & Forms![フォーム1]![数量]) のように記述します。

> レモンの部分を代数にしてフォーム中の別の非連結コントロールの言葉と同じ物を
> カウントするという風に変えられますか?

出来ます。

品名を指定するフォーム名を 「フォーム1」とし、コントロール名を「品名」と
した場合、下記の計算式になります。

=Dcount("[(1)]","TBL1","[(1)]='" & Forms![フォーム1]![品名] & "'")+Dcount("[(2)]","TBL1","[(2)]='" & Forms![フォーム1]![品名] & "'")+Dcount("(3)","TBL1","[(3)]='" & Forms![フォーム1]![品名] & "'")+Dcount("[(4)]","TBL1","[(4)]='" ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング