|
--------------------------------------------
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で取得できると思うのですが、
この方法でセル番地を決める方法ではあまり良くないのでしょうか?
※試しに、転記の部分で適当な値を入れ実行してみたのですが、
シートに値が挿入されずエラーも起きていないようでした。
以上です。
|
|