• ベストアンサー

ACCESSで2種類に分類してカウントするクエリを作りたいのですが…

1~29までの数字が書かれた29枚のカードから5枚を同時に引き、 記録していくデータベースを作成するとき、 1~29が何回出てきたかを以下の種類によってカウントしたいのですが… ・同じレコードの他の数字の上一桁(一の位、十の位)の数が  「単数(1つ)」か「複数(2つ以上)」かによって  別カウントとして集計していきたいのですが。 (記録テーブル[全て数値型]) 回数 1枚目 2枚目 3枚目 4枚目 5枚目 ------------------------------------------ (1)    1    2    3    4    10 (2)    1    2    3    10    11 (3)    1    10   11    12   20 (各番号テーブル) フィールド名「各番号」 レコード数=29 上記のような記録のとき 回数(1)は一の位が4個出現(1.2.3.4)なのでカウントは複数      十の位が1個出現(10)なのでカウントは単数 回数(2)は一の位が3個出現(1.2.3)なのでカウントは複数      十の位が2個出現(10.11)なのでカウントは複数 回数(3)は一の位が1個出現(1)なのでカウントは単数      十の位が3個出現(10.11.12)なのでカウントは複数      二十の位が1個出現(20)なのでカウントは単数 要約すると一の位と十の位と二十の位に分けて 同時に引いた5枚のうち それぞれの位が1つなのか複数なのかによって カウントを別に分けて集計したいのですが… ・作りたいもの (単数複数カウントクエリ) カード   単    複 ←単、複ごとに出た数をカウント ----------------------- 1      1      2 2      2 3      2 : 10      1      2 11            2 12            1 : 20      1 : 上記のようなクエリはどうやれば作れるのでしょうか? ご回答、よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
noname#15703
noname#15703
回答No.1

 テーブル1つと、クエリ2つでやってみました。  テーブル「T_n枚目」にテキストフィールド「n枚目」を作り、その内容は、 [1枚目] [2枚目] [3枚目] [4枚目] [5枚目] の5文字5レコードとします。かぎカッコの中身は、記録テーブルのフィールド名と同じにします。  次にクエリ「Q_単複」を作ります。その内容は、 SELECT 記録テーブル.*, 10^([1枚目]\10)+10^([2枚目]\10)+10^([3枚目]\10)+10^([4枚目]\10)+10^([5枚目]\10)+1000 AS 各枚数, DLookUp([n枚目],"記録テーブル","[回数]=" & [回数])+0 AS カード, IIf(Mid([各枚数],Len([各枚数])-[カード]\10,1)=1,"単","複") AS 単複 FROM 記録テーブル, T_n枚目; とします。  最後に、クロス集計クエリで TRANSFORM Count(Q_単複.単複) AS 単複のカウント SELECT Q_単複.カード FROM Q_単複 GROUP BY Q_単複.カード PIVOT Q_単複.単複; を実行すればよいと思います。

kintetsu
質問者

補足

回答ありがとうございます。 いただいた回答の通りテーブル1つとクエリ2つで 思ったとおりの結果を得ることが出来ました! いただいた回答を応用して30番台を含むときと 40番台を含むときの2種類を作ろうとしましたが 上手く行きませんでした。 「Q_単複」クエリをいじればよいと思うのですが 30番台を含む場合、 40番台を含む場合の クエリにするには「Q_単複」の文のどこを変更すれば出来るのでしょうか?

その他の回答 (4)

noname#15703
noname#15703
回答No.5

 No.1とNo.4の訂正です。  もともと+1000は不要でした。+1000も+100000もつけないでください。  すみませんでした。

kintetsu
質問者

お礼

了解しました。 自分でもやってみましたが +1000なしでもいけました。 何度もご回答いただきありがとうございました。

noname#15703
noname#15703
回答No.4

 No.1の続きです。 >30番台を含む場合、 >40番台を含む場合の >クエリにするには「Q_単複」の文のどこを変更すれば +1000 の部分を +100000 に変更してください。

noname#192382
noname#192382
回答No.3

No2の追加です。下記のプログラムを先のプログラムの跡に追加しますと単数は111ね複数は999と表示されます Select Case Cells(yy, xx) Case 1 Cells(yy, xx) = 111 Case 2 To 9 Cells(yy, xx) = 999 End Select Next xx Next yy

noname#192382
noname#192382
回答No.2

まず9以下、10から19まで、20以上の3つに数を調べることを考えました。それを回答します。当方xpでえくせる97です。 回数 1枚目 2 3 4 5 1 1 5 6 15 3 2 1 2 3 10 11 3 1 10 11 12 20 4 1 0 3 2 0 1 3 1 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2006/2/19 ユーザー名 : ' ' Dim xx, yy As Integer For yy = 2 To 4 Cells(yy, 8) = 0: Cells(yy, 9) = 0: Cells(yy, 10) = 0 For xx = 2 To 6 Select Case Cells(yy, xx) Case 1 To 9 Cells(yy, 8) = Cells(yy, 8) + 1 Case 10 To 19 Cells(yy, 9) = Cells(yy, 9) + 1 Case 20 To 29 Cells(yy, 10) = Cells(yy, 10) + 1 Case Else End Select Next xx Next yy End Sub 上の段のデータに対し計算結果が下の団の様に出ます。 このあとの単数複数の計算は容易と思います。

kintetsu
質問者

お礼

回答ありがとうございます。 EXCELは今手元にないのですが 帰ったら試してみます