access2003で、シフト表を作成したいと考えております。カレンダーについて作成したことがなく、情報を絞り込めなかったためご質問させていただきます。以下がシフト表のイメージです。
| 1月 | 2月
名前| 1日|2日|3日|4日|5日|・・・・|1日|2日
鈴木| 出|休 |休|出・・・・・・
山田| 休|出 |休|出・・・・・・
といった形のマトリクス型式にしたいと存じます。
月のテーブルで日付ごとにレコードを作製し、サブフォームで埋め込むといった方法も考えたのですが、長期的な運用を考えた際に、実用的でないと思ったためほかのアイデアをお伺いできればと思いました。
ご経験がある方、アイデアをお持ちの方がいらっしゃいましたらお伺いできればと存じます。よろしくお願いいたします
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
X CNNExecute "DELETE * FROM 出勤表 WHERE ID=1;"
O CNNExecute "DELETE * FROM 出勤表 WHERE ID=1 AND 日付=XXXXXXX;"
まあ、SQL文は例示ですので、少々のミスはと思いましたが一応訂正しておきます。
訂正のついでに CNNExecute関数を紹介しておきます。
一応、ADO関係の関数の基本形に忠実に作成したつもりです。
Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & CnnErrors.Description & Chr$(13) & _
"・Err.Number=" & CnnErrors.Number & Chr$(13) & _
"・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " ADO関数エラーメッセージ"
End Sub
Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
Dim isOK As Boolean
Dim cnn As ADODB.Connection
isOK = True
Set cnn = CurrentProject.Connection
With cnn
.Errors.Clear
.BeginTrans
.Execute strSQL
.CommitTrans
End With
Exit_CnnExecute:
On Error Resume Next
cnn.Close
Set cnn = Nothing
CnnExecute = isOK
Exit Function
Err_CnnExecute:
isOK = False
If cnn.Errors.Count > 0 Then
ErrMessage cnn.Errors(0), strSQL
cnn.RollbackTrans
Else
MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
vbExclamation, " 関数エラーメッセージ"
End If
Resume Exit_CnnExecute
End Function
No.4
- 回答日時:
同様の勤務シフト の質問に 回答してます。
やって出来ないことは有りませんが相当に苦労しました。
ヒントも転がってると思いますので ご覧下さい。
工事の現場と派遣職人の予定を ガントチャートで 管理してます。
参考URL:http://oshiete1.goo.ne.jp/qa3707410.html
No.3
- 回答日時:
社員名__2008/01/01__2008/01/02__2008/01/03__2008/01/04__2008/01/05__2008/01/06
鈴木____________________0_________________0________________X________________0________________0_________________1
中村____________________X_________________0________________0________________X________________X_________________0
こういうデータ入力フォームを用意した場合、
O->Xへ
X->Oへ
で、テーブルの更新要領は違います。
前者は、DELETE文の発行、後者はINSERT文の発行。
CNNExecute "DELETE * FROM 出勤表 WHERE ID=1;"
CNNExecute "INSERT INTO 出勤表 SET (日付, 社員_ID) VALUES ('2008/01/01', 1);"
ところで、この場合、入力ではエクセル風のグリッドコントロールを利用することになろうかと思います。
確かに、現場からはかようなエクセルまがいの入力仕様を要求する向きがあります。
この場合、
[イミディエイト]
? DBSelect("SELECT 出勤表.日付, 出勤表.社員_ID, 社員.略称 FROM 社員 RIGHT JOIN 出勤表 ON 社員.ID = 出勤表.社員_ID ORDER BY 出勤表.日付, 社員.整列順位;")
2008/01/01;1;鈴木;
2008/01/02;1;鈴木;
2008/01/02;2;中村;
とデータを簡単に取得できることが課題になろうかと思います。
次に、
SetGridValue "XXX", 2, 2, "O"
SetGridValue "XXX", 2, 3, "X"
と、取得したデータに基づいて翻訳表示する関数もないと実にややこしいです。
こういう関数があれば、For ループで回すだけです。
これができりゃ、後は、CNNExecute関数の類を利用してグリッドデータの変更をテーブルに反映するだけです。
まあ、やって出来ないことじゃないでしょうが、所詮は、プログラマのマスターベーションじゃないですか?
No2さんの推奨されるやり方で事足りる訳ですから・・・。
No5のご回答含めありがとうございます。
ただ今開発環境がないため、後ほど試してみたいと存じます。
>所詮は、プログラマのマスターベーションじゃないですか?
おっしゃっていただいている事はご尤もです。現在すでにEXCELベースで複数の管理用ファイルが手元にあるのですが、作成者によって統一されていない、できない点が多々発生したため、一括管理を検討いたしました。私が担当するまで、会社の管理ファイルが統一されていなかったのが原因です。
そのため1つの機能として、今回のご質問をさせていただきました。
ソースもありがとうございました。大変助かります。
まずはお礼まで
No.2
- 回答日時:
>といった形のマトリクス型式にしたいと存じます。
これが条件ならAccessをやめExcelでやりましょう
Accessでやる場合は日付は縦に展開し
インタフェースにはメイン・サブフォームを使います
ご回答ありがとうございます。EXCELで組むのもいいのですが、すべてVBAで組むのであれば、ACCESSの方がいいかと存知ます。
表面的に使用するだけであれば、社員データのテーブルと、カレンダーの様なテーブルを作成、2つを組み合わせたクエリを作成し、横型のカレンダーのような内容はすでに作成済みですが、
定期的にカレンダー作成の作業が必要になってしまうため、長期的に使用したいとも思いません。
DAOかADOで作成可能というお話を伺ったことがあったもので、ご質問いたしました。最初の質問文が言葉足らずで申し訳ございません。
No.1
- 回答日時:
表の体裁(フォーマット)とテーブル設計は無関係かと思います。
稼動日程表:
日付:2008/01/29
曜日:1,2,3,4,5,6.7
稼動:Yes,No
社員:
ID_________:1
社員番号:101
整列順位:1
名前______:鈴木 一郎
略称______:鈴木
出勤表:
日付____:2008/01/29
社員_ID:1
出勤____:Yes, No <------ 不要!
こういうテーブル設計で事足りると思います。
この設計でエクセル風の入力と表示を実現するのはフォームとレポートの課題。
ご回答ありがとうございます。
仰っていただいた内容については存じ上げております。
フォームで、表示させたくご質問させていただきました。
以前DAOやADOを使用することで表示可能というお話をお伺いきましたもので、具体的にどうすればいいかがわからずご質問した次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- 健康保険 傷病手当金の申請について 3 2022/07/09 09:14
- Excel(エクセル) 年間仕事用シフトカレンダーに、日勤 夜勤 休み に色分けをした。 4 2022/12/09 04:12
- 会社・職場 こちら26歳販売員で店長をしており、4人で店を回してます。 シフトはかなり平等に通し、希望休は月3回 4 2022/12/21 00:48
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- 転職 転職活動中 会社選びで迷っています 3 2022/09/05 06:10
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- アルバイト・パート バイト週1の定義(数え方)について 1 2022/08/22 21:13
- Excel(エクセル) 『シフト表自動化の作成について』 1 2022/06/02 00:45
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Accessで1つのフィールドに複数の選択肢を設ける
Access(アクセス)
-
ACCESSで1月1日~12月31日までの日付を入れる方法
その他(データベース)
-
アクセスでガントチャート作成
Access(アクセス)
-
-
4
ACCESSでコントロールソースの変更
Access(アクセス)
-
5
ACCESSで工程表を作りたい
Word(ワード)
-
6
アクセス 項目毎にデータを横に並べる方法
Access(アクセス)
-
7
アクセスで月単位の抽出
Access(アクセス)
-
8
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
9
AccessのフォームのテキストボックスにLOOKUPで表示したい
Access(アクセス)
-
10
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
前のレコードの合計に現レコー...
-
Accessのデータ型の日付/時刻型...
-
Access クエリで、レコードの無...
-
BCPでCSV内の文字列をテーブル...
-
VBA 別シートの同じ日付の欄に...
-
指定日付を起点にして最新日付...
-
アクセスで月単位の抽出
-
アクセスの昇順並び替えで空白...
-
【Accessで困っています...
-
アクセス:既定値に土日含まず...
-
Access dcount 複数条件
-
ACCESSの空白をカウントする
-
エクセル-過去6カ月分の合計を...
-
Microsoft Query の抽出条件に...
-
クロス集計のユニオンクエリー...
-
access 横型カレンダーを使用し...
-
アクセス97のVBAで日付項目をヌ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
アクセスで月単位の抽出
-
BCPでCSV内の文字列をテーブル...
-
Accessの日付時刻型から日付、...
-
VBA 別シートの同じ日付の欄に...
-
Excel→Accessへの日付データの...
-
Access クエリで、レコードの無...
-
指定日付を起点にして最新日付...
-
アクセス:既定値に土日含まず...
-
【エクセル】指定した日付に一...
-
ACCESSの空白をカウントする
-
Accessで日付の比較がうまくい...
-
【vba】日付の形式が勝手に変わ...
-
前のレコードの合計に現レコー...
-
エクセル-過去6カ月分の合計を...
-
Accessのデータ型の日付/時刻型...
-
【Accessで困っています...
-
アクセス97のVBAで日付項目をヌ...
おすすめ情報