Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No103752.列固定なしでクロス集計クエリのフォームを作りたい

タイトル列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103752
投稿日: 2007/04/21(Sat) 10:10
投稿者: ようこ
OS:xp
Access Version:2000

連日お世話になっておりますm(__)m

先日http://www.accessclub.jp/bbs3/0343/superbeg103202.htmlで質問させて頂き、解決したと思っていたの

ですが、またまた行き詰ってしまいました・・・

門戸厄神さんのおかげでこんなかんじでフォームが作れました↓

年月日 | 顧客先1 | 顧客先2 | 顧客先3 |・・・
_________________________________________
2007/04/20 | ○○ | ×× | ◇◇ |・・・
2007/04/21 | ◇◇ | ○○ | ×× |・・・

これに年月日と氏名とで検索をかけるようにして抽出すると、

年月日 | 顧客先1 | 顧客先2 | 顧客先3 |・・・
_________________________________________
2007/04/20 | | ×× | ◇◇ |・・・

こんな感じで↑空白の箇所ができてしまいます。

クロス集計クエリで列固定をしなければ常に左詰めになってくれるんですが、

列固定しなければ選択クエリを作ろうとしたとき選択可能なフィールドがなく作れません。

列固定なしでフォームを作る方法はありますでしょうか?

一応クロス集計のSQL貼っておきます。

PARAMETERS [Forms]![営業担当別訪問状況]![氏名検索] Text ( 255 ),
[Forms]![営業担当別訪問状況]![氏名検索] Text ( 255 ),
[Forms]![営業担当別訪問状況]![期間1] Text ( 255 ),
[Forms]![営業担当別訪問状況]![期間1] Text ( 255 ),
[Forms]![営業担当別訪問状況]![期間2] Text ( 255 ),
[Forms]![営業担当別訪問状況]![期間2] Text ( 255 );
TRANSFORM First(Q営業担当別訪問状況.顧客先名) AS 氏名の先頭
SELECT Q営業担当別訪問状況.年月日
FROM Q営業担当別訪問状況
WHERE (((Q営業担当別訪問状況.年月日)
Between [Forms]![営業担当別訪問状況]![期間1] And [Forms]![営業担当別訪問状況]![期間2])
AND ((Q営業担当別訪問状況.氏名)=[Forms]![営業担当別訪問状況]![氏名検索]))
OR (((Q営業担当別訪問状況.氏名)=[Forms]![営業担当別訪問状況]![氏名検索])
AND (([Forms]![営業担当別訪問状況]![期間1]) Is Null)
AND (([Forms]![営業担当別訪問状況]![期間2]) Is Null))
OR (((Q営業担当別訪問状況.年月日) Between [Forms]![営業担当別訪問状況]![期間1]
And [Forms]![営業担当別訪問状況]![期間2])
AND (([Forms]![営業担当別訪問状況]![氏名検索]) Is Null))
OR ((([Forms]![営業担当別訪問状況]![期間1]) Is Null)
AND (([Forms]![営業担当別訪問状況]![期間2]) Is Null)
AND (([Forms]![営業担当別訪問状況]![氏名検索]) Is Null))
GROUP BY Q営業担当別訪問状況.年月日
PIVOT "顧客先名" & DCount
("氏名","Q営業担当別訪問状況","年月日 =#" & [年月日] & "# AND 番号<" & [番号])
Mod 15+1 In ("顧客先名1","顧客先名2","顧客先名3","顧客先名4","顧客先名5","顧客先名6",
"顧客先名7","顧客先名8","顧客先名9","顧客先名10","顧客先名11","顧客先名12","顧客先名13",
"顧客先名14","顧客先名15");

めちゃくちゃ長くなり申し訳ないです。宜しくお願いします。



タイトルRe: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103753
投稿日: 2007/04/21(Sat) 12:31
投稿者: hatena
> 列固定なしでフォームを作る方法はありますでしょうか?

フィールド数や、フィールド名がその都度変わることになりますので、
ラベルの標題や、テキストボックスのコントロールソースをVBAで
変更することになりますね。

列見出し用のラベルの名前を、lbl1, lbl2,・・・lbl10
テキストボックスを、txt1, txt2・・・・txt10
とします。
列見出しのフィールドは2列目からとします。

フォームを開くときに、
Dim i As Integer, FN As String, c As Integer

With Me.Recordset
c = .Fields.Count
If c > 10 Then c = 10
For i = 1 To c
FN = .Fields(i).Name
Me("lbl" & i).Caption = FN
Me("txt" & i).ControlSource = FN
Next
End With

というようなイベントプロシージャを設定します。

タイトルRe^2: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103757
投稿日: 2007/04/21(Sat) 13:59
投稿者: ようこ
お返事ありがとうございます!土曜なんで無理かな思ってたので すごく嬉しいです^^

> 列見出し用のラベルの名前を、lbl1, lbl2,・・・lbl10
> テキストボックスを、txt1, txt2・・・・txt10
> とします。
> 列見出しのフィールドは2列目からとします。

このテキストボックスは非連結ですよね・・・?クロス集計クエリの列見出しをはずして

フォームのレコードソースにしました

hatenaさんのプロシージャをコピペしたんですが


> FN = .Fields(i).Name

この部分で"このコレクションには項目がありません。"とでました

内容を全然把握できてないので あれなんですが・・・すみませんm(__)m

タイトルRe^3: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103761
投稿日: 2007/04/21(Sat) 16:55
投稿者: hatena
> > FN = .Fields(i).Name
>
> この部分で"このコレクションには項目がありません。"とでました

ちょっとミスしてました。

Dim i As Integer, FN As String, c As Integer

With Me.Recordset
c = .Fields.Count - 1 '※修正
If c > 10 Then c = 10
For i = 1 To c
FN = .Fields(i).Name
Me("lbl" & i).Caption = FN
Me("txt" & i).ControlSource = FN
Next
End With

ですね。1 は、行見出し の列数にしてください。

タイトルRe: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103762
投稿日: 2007/04/21(Sat) 17:13
投稿者: kitasue
 DCountの所は、

DCount("氏名","Q営業担当別訪問状況","年月日 =#" & [年月日] & "# AND 番号<" & [番号]
& " AND [氏名] Like Nz([Forms]![営業担当別訪問状況]![氏名検索],'*')")

ではないでしょうか。

タイトルRe^2: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103764
投稿日: 2007/04/21(Sat) 17:46
投稿者: ようこ
hatenaさん、kitasueさん、どうもありがとうございますm(__)m

hatenaさんのコードでデバックしなくなりました。でも今度はフォームを開こうとすると

パラメータが出てきます。列見出しの指定を消してから出るようになっているようなんですが・・・

フォームに抽出条件をいれてクエリを開いてみたら クエリの方はちゃんと抽出できてたんですけど・・・

>  DCountの所は、
>
> DCount("氏名","Q営業担当別訪問状況","年月日 =#" & [年月日] & "# AND 番号<" & [番号]
> & " AND [氏名] Like Nz([Forms]![営業担当別訪問状況]![氏名検索],'*')")

これにしたら '指定した式に含まれる名前 forms!営業担当者別訪問状況が見つかりません。'

とでました。なんかどつぼ入ってる気がします。すみませんが宜しくお願いしますm(__)m

タイトルRe^3: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103765
投稿日: 2007/04/21(Sat) 17:58
投稿者: kitasue
> これにしたら '指定した式に含まれる名前 forms!営業担当者別訪問状況が見つかりません。'

 フォームの名前が違うのではないでしょうか。

タイトルRe^4: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103767
投稿日: 2007/04/21(Sat) 18:27
投稿者: ようこ
名前は合ってるとおもうんですが・・・これもフォームを開いた状態でクエリを開くと

ちゃんと抽出していますσ(^_^;)

この→"年月日 =#" & [年月日] & "# AND 番号<" & [番号] & " 部分が

理解していないんですけど教えていただけますか?って使っているコードなのにお恥ずかしいんですが(泣)

タイトルRe^5: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103768
投稿日: 2007/04/21(Sat) 18:33
投稿者: kitasue
> これにしたら '指定した式に含まれる名前 forms!営業担当者別訪問状況が見つかりません。'

 最初の投稿では、「営業担当者別訪問状況」でなく「営業担当別訪問状況」ですが。

タイトルRe^6: 列固定なしでクロス集計クエリのフォームを作りたい
記事No: 103769
投稿日: 2007/04/21(Sat) 18:39
投稿者: ようこ
あ すいません!'営業担当別訪問状況が見つかりません' って出てますσ(^_^;)

でもやっぱりどっか間違えてるんでしょうね・・・自分でも頑張ってみますm(__)m

[次頁]

 

ページの先頭へ 前ページへ戻る