プロが教えるわが家の防犯対策術!

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
:

上記のようなクエリはどうやれば作れるのでしょうか?
ご回答、よろしくお願いします

A 回答 (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_単複.単複;

を実行すればよいと思います。

この回答への補足

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

補足日時:2006/02/19 15:35
    • good
    • 0

 No.1とNo.4の訂正です。


 もともと+1000は不要でした。+1000も+100000もつけないでください。
 すみませんでした。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/19 20:39

 No.1の続きです。


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

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
    • good
    • 0

まず9以下、10から19まで、20以上の3つに数を調べることを考えました。

それを回答します。当方xpでえくせる97です。


回数1枚目2345
1156153
21231011
3110111220

410
320
131

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



上の段のデータに対し計算結果が下の団の様に出ます。
このあとの単数複数の計算は容易と思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/19 20:42

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