- ベストアンサー
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 : 上記のようなクエリはどうやれば作れるのでしょうか? ご回答、よろしくお願いします
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
テーブル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_単複.単複; を実行すればよいと思います。
その他の回答 (4)
No.1とNo.4の訂正です。 もともと+1000は不要でした。+1000も+100000もつけないでください。 すみませんでした。
お礼
了解しました。 自分でもやってみましたが +1000なしでもいけました。 何度もご回答いただきありがとうございました。
No.1の続きです。 >30番台を含む場合、 >40番台を含む場合の >クエリにするには「Q_単複」の文のどこを変更すれば +1000 の部分を +100000 に変更してください。
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
まず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 上の段のデータに対し計算結果が下の団の様に出ます。 このあとの単数複数の計算は容易と思います。
お礼
回答ありがとうございます。 EXCELは今手元にないのですが 帰ったら試してみます
補足
回答ありがとうございます。 いただいた回答の通りテーブル1つとクエリ2つで 思ったとおりの結果を得ることが出来ました! いただいた回答を応用して30番台を含むときと 40番台を含むときの2種類を作ろうとしましたが 上手く行きませんでした。 「Q_単複」クエリをいじればよいと思うのですが 30番台を含む場合、 40番台を含む場合の クエリにするには「Q_単複」の文のどこを変更すれば出来るのでしょうか?