Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1077 / 2272 ツリー ←次へ | 前へ→

【8869】コンボボックスで条件をつけたSQLでの転記 浅川 06/12/6(水) 21:53 質問[未読]
【8870】Re:コンボボックスで条件をつけたSQLでの転記 たん 06/12/7(木) 11:17 回答[未読]
【8881】Re:コンボボックスで条件をつけたSQLでの転記 浅川 06/12/8(金) 9:35 質問[未読]
【8883】Re:コンボボックスで条件をつけたSQLでの転記 たん 06/12/8(金) 10:58 発言[未読]

【8869】コンボボックスで条件をつけたSQLでの転記
質問  浅川  - 06/12/6(水) 21:53 -

引用なし
パスワード
   --------------------------------------------
 winXP/Access 2003/Spread Sheet 10.0 使用
※VB6.0とExcelVBAを少し触った事があります。
--------------------------------------------

今回、AccessVBAを使って一覧表を"見るだけ"の機能
(出力されたデータをここで触る事はありません。)を作ろうとしています。

■機能概要等
コンボボックスで"区分"、"年"、"月"を選択してコマンドボタンを押すと
選択された条件に一致した内容(件数)をスプレッドシートに表示させます。

スプレッドシートの行・列の項目は「画像」になっていて、
実際スプレッドで作ってる部分は内容のみです。
#データを表示させるのに作りやすいかなと思いそういう形にしました。


■データ等について
【スプレッドシートの表示の仕方】

 | 1 2 3 ・・・・  29 30 31  ←日付(本当は画像)
―+―――――――――――――――
A | 0| 0| 0 ・・・・  2| 1| 1|
B | 1| 3| 1 ・・・・  3| 0| 4|
C | 0| 6| 0 ・・・・  2| 1| 1|  ←件数を表示(ここだけデータ)
D | 9| 0| 0 ・・・・  2| 1| 5|   

↑名前(本当は画像)

【フォーム1にある物】
コンボボックス1(cbo_Kubun) ・・・区分が選択できる。
コンボボックス2(cbo_Year)  ・・・年が西暦で選択できる。
コンボボックス3(cbo_Month) ・・・月が選択できる。
コマンドボタン(cmd_Go)
スプレッドシート(ssDate)

【データのあるテーブル(TBL_datex)】
 [区分]エリア1:1、エリア2:2 (名称:コード番号)
 [名前]A:1、B:2、C:3、D:4、 (名称:コード番号)
 [アイテム]01、02・・・32、33
 [年月日]yyyymmdd

※区分〜アイテムまではテキスト型、年月日は日付型です。
※件数は大体1000件位。固定ではありません。

・・・大体の作りは上記の情報で作ってあります。


■テーブルのデータについて
例えば
「エリア1で2001年11月02日にAの01を取得した。」
・・・・という情報があったら
------------------------------------------
[区分][名前][アイテム][年月日]
 1   1     01  2001/11/02
------------------------------------------
という形でテーブルに登録されているものとします。

そしてこのデータを、
「いつの年・月で、どの区分のアイテムが日別で何件あるか」
を出したいと思います。

区分・年・月はコンボボックスからデータを取得し、
SQL文で対象データを絞る形です。※DAOを用いています。

[エリア1]選択時では[名前]A〜Dの件数を、
[エリア2]選択時では[名前]A〜Cまでの件数を表示させます。
後者の時、エリア2のDの行はHeight=0にして隠しています。

出力したデータを最終的には
件数が33(アイテムが日で33個揃ってる状態)の時スプレッドシートの背景が青
1件〜32件までの時は背景が赤、0件の時は白、と色をつけたいです。

-----------------

やりたい事、といいますかお聞きしたい事は
テーブル(TBL_datex)から値を拾い横方向へデータを埋めていく部分の作り方です。

ループで1件ずつ処理してくと考えてみたので、
その中で背景の色を一緒に切り替える部分も作りたいです。


考えてみたコードですが、
///////////////////////////////////////////////////

Private Function mblnCreateWorkTable()

dim Kubun As String
dim YearDay As String
dim strSQL as String

Kubun = cbo_kubun
YearDay = cbo_Year & cbo_Month

-ループ ここから

[1] strSQL = "SELECT TBL_datex.名前,TBL_datex.年月日, Count(TBL_datex.年月日) AS カウント" & _
    "FROM TBL_datex" & _
    "WHERE (((TBL_datex.区分)=" & Kubun & ") AND ((TBL_datex.年月日)=" & YearDay & "))" & _
    "GROUP BY TBL_datex.名前, TBL_datex.年月日, TBL_datex.区分" & _
   "ORDER BY TBL_datex.名前;"

[2] countで出た値(件数)を横向きにセルに転記する。
    ssDate.Range([名前],mid([年月日],7,2)).Value = 件数
  
[3] If 件数=33 Then
   ssDate.セル番号.Interior.ColorIndex = 青
    Else if 件数=0 then
     ssDate.セル番号..Interior.ColorIndex = 白
    Else  '1〜32件の部分↓
     ssDate.セル番号..Interior.ColorIndex = 赤
  End If

-ループ ここまで


Exit Function
///////////////////////////////////////////////////

と、解る部分やネット等で調べて作れた部分だけコード化したので実行する事ができません。

[1]で取れたデータを、[2]の位置で転記し、[3]で件数によって色を変えたいのですが、
これらを一連の流れでコードしたいので、どなたかご教授願います。


また、セル番地の値は、[名前]の1〜3と、年月日の日付1〜31で取得できると思うのですが、
この方法でセル番地を決める方法ではあまり良くないのでしょうか?
 ※試しに、転記の部分で適当な値を入れ実行してみたのですが、
  シートに値が挿入されずエラーも起きていないようでした。

以上です。

【8870】Re:コンボボックスで条件をつけたSQLでの...
回答  たん  - 06/12/7(木) 11:17 -

引用なし
パスワード
   基本機能だけで出来そうな内容を、無理矢理、難しい方法でやろうと
しているように見えるのは気のせいでしょうか?

>今回、AccessVBAを使って一覧表を"見るだけ"の機能
>(出力されたデータをここで触る事はありません。)を作ろうとしています。

サブフォーム(〜〜の許可プロパティを全ていいえ)にしたものを
表示させれば済むレベルだと思いますが。

色変更は、条件付書式で済むかと。

まあ、元テーブルの時点で、データベースで用いるには
相応しくない形式なのが一番の問題のように思えます。

>【データのあるテーブル(TBL_datex)】
> [区分]エリア1:1、エリア2:2 (名称:コード番号)
> [名前]A:1、B:2、C:3、D:4、 (名称:コード番号)
> [アイテム]01、02・・・32、33
> [年月日]yyyymmdd

を、区分、名前、アイテムNo.、アイテム件数、年月日
のような構成のテーブルにして、
列見出しを設定したクエリにするのが妥当な気がします。

【8881】Re:コンボボックスで条件をつけたSQLでの...
質問  浅川  - 06/12/8(金) 9:35 -

引用なし
パスワード
   おはようございます、質問者の浅川です。
たん様、お早い回答ありがとうございました。

>基本機能だけで出来そうな内容を、無理矢理、難しい方法でやろうと
>しているように見えるのは気のせいでしょうか?

やる事を沢山考えて、ループで全部を処理してしまおうと考えたので
自分で難しくしてしまったような気もします。
たん様のおっしゃる「条件付書式」を調べた所、
参考となるサイトも多くあり、これは解決しそうです。

>>【データのあるテーブル(TBL_datex)】
>> [区分]エリア1:1、エリア2:2 (名称:コード番号)
>> [名前]A:1、B:2、C:3、D:4、 (名称:コード番号)
>> [アイテム]01、02・・・32、33
>> [年月日]yyyymmdd
>を、区分、名前、アイテムNo.、アイテム件数、年月日
>のような構成のテーブルにして、
>列見出しを設定したクエリにするのが妥当な気がします。
 
・・・?すいません、少し理解できていません。

テーブルは、
「区分、名前、アイテム、年月日」が見出しで表示されています。
クエリは単体で実行すると、
「区分、年月日、カウント」が見出しで表示されます。

>列見出しを設定したクエリにするのが妥当な気がします。
というのは、スプレッドシートの見出しを、
画像ではなくシートに書き込めという事でしょうか?

【8883】Re:コンボボックスで条件をつけたSQLでの...
発言  たん  - 06/12/8(金) 10:58 -

引用なし
パスワード
   >テーブルは、
>「区分、名前、アイテム、年月日」が見出しで表示されています。
>クエリは単体で実行すると、
>「区分、年月日、カウント」が見出しで表示されます。

失礼、ちょっと勘違いしていました。
テーブル構成は妥当ですね。

単体のクエリは不要でしょう。
というかクロス集計クエリ1本で可能ですね。

>>列見出しを設定したクエリにするのが妥当な気がします。
>というのは、スプレッドシートの見出しを、
>画像ではなくシートに書き込めという事でしょうか?

クロス集計クエリ(列見出し含む)を直接、サブフォームとして
出力させれば、サブフォームのラベルが見出しになるのですから、
画像が何故、必要になるのか不明ですが。

# というか、何度も言うように、SpreadSheet等、Access本来の
# 機能でない部分にコダワリすぎかと。
# 基本機能で何が出来るのかをきちんと把握しましょう。

1077 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078206
(SS)C-BOARD v3.8 is Free