• ベストアンサー

総合勤務管理表を作ろうとしています。

勤務管理表を作成しようと考えています。 エクセルは初歩のマクロが使える程度、アクセスはまったくの素人です。 今現状は、社員用月間勤務予定表、アルバイト用月間勤務予定表、日別作業配置表、勤怠チェック表を独立したエクセルファイルでやっています。 将来的には、相互をリンクさせてひとつのファイルで管理したいと考えています。 (例えば、Aが月間勤務表で公休のなっていれば、日別作業配置表、勤怠チェック表にも公休と表示させたいです。) 会社では、僕以上にエクセル&アクセスの知識がない方がほとんどで、せっかく作ってもエクセルの計算式を削除されることが多々ございまして、できるのなら、トップ画面でパスワード認証を行うことや、新規アルバイトを登録するようなこと、入力項目以外は管理者以外には変更できないようにしたいのです。 PC歴も浅く何から手をつけていけばわからない状態です。 このようなケースはアクセスを使ったほうが便利なのでしょうか? このようなことが詳しく書かれているURLや本がございましたらご伝授していただきたいのでが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

>エクセルの計算式を削除されることが多々ございまして... 何を言っているのか分からない場合、とりあえず下記VBAコードを貼り付けて実際に試して見て下さい。 計算式のあるセルは保護をかけましょう。ユーザーが入力するセルは保護がかからないようにします。 マスタ登録などは、パスワードを知る人のみが可能で、パスワードを入力しないと保護されていないセルの編集しかできないよう設計します。 管理者パスワードは標準モジュールの冒頭で記載のある abcde です。変更する場合、ここを書き直します。 あと、プロジェクトをロックしておくと、なお良しです。 【VBAコード1:場所=ThisWorkBoookモジュール】 'ブックを開いた直後の処理 Private Sub Workbook_Open()   Call パスワード認証(True) End Sub 'ブックを閉じる直前の処理 Private Sub Workbook_BeforeClose(Cancel As Boolean)   Call シート保護(False) End Sub 【VBAコード2:場所=標準モジュール】 '管理者パスワード設定 Public Const cstPassword As String = "abcde" Sub パスワード認証呼び出し()   Call パスワード認証(True) End Sub Public Sub パスワード認証(Dummy As Boolean)   Dim strInput As String   'パスワード入力   strInput = Application.InputBox( _     Prompt:="管理者以外の方は何も入力せず [ OK ] をクリック.", _     Title:="Password?", Type:=2)   'パスワード照合   If strInput = cstPassword Then     '一致 --> 管理者 保護解除     Call シート保護(True)     MsgBox "管理者モードで開きました", vbInformation   Else     '不一致 --> 一般ユーザー シート保護     Call シート保護(False)   End If End Sub '全シートをパスワード付きで保護/保護解除 Public Sub シート保護(Flag As Boolean)   For Each Sh In ThisWorkbook.Sheets     If Flag Then       Sh.Unprotect Password:=cstPassword     Else       Sh.Protect Password:=cstPassword     End If   Next Sh End Sub

sinkichi
質問者

お礼

お礼が遅れまして、申し訳ございません。 ご丁寧に教えていただきありがとうございました。 なんとか教えていただきました構文を理解できるように勉強します。

その他の回答 (3)

  • at121
  • ベストアンサー率41% (85/206)
回答No.3

「ご利用の注意」シート から メニュー操作 シート: シート名 を シートの機能-ログイン名 の形で用意  例 data-aa、data-bb  シート「ご利用の注意」 のメニューとして "data-表"、 "認証登録" などを セルに入力 動作 bbで ログインし 「ご利用の注意」 のメニューの "data-表"を選択すると data-bb シート飛ばされる。 "認証登録"の権限がなければ"認証"シートにいけず「ご利用の注意」に戻される。 aa でログインすれば「ご利用の注意」のメニューの "data-表"を選択すると data-aa シート 、"認証登録"にて "認証"シートにいける。 ↓ThisWorkbookのモジュールに追加↓ Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name <> "ご利用の注意" Then Exit Sub Select Case Target Case "data-表" On Error Resume Next 移動先シート = "data-" + ログインユーザー Worksheets(移動先シート).Select If Err Then MsgBox (ログインユーザー + " さんの「data-表」がないので管理者に相談してね。") End If Case "認証登録" 移動先シート = "認証" Worksheets(移動先シート).Select If Err Then MsgBox ("「認証」シートがないので管理者に相談してね。") End If Case "月次予定表" '・・・必要に応じて作成・・ End Select End Sub

sinkichi
質問者

お礼

お礼が遅れまして、申し訳ございません。 皆さん、すごすぎて自分が無知に感じられます。 ご丁寧に指導していただきまして、ありがとうございました。

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

詳しい事情が分かりませんので断言はいたしませんが、ご希望を実現なされるためにはAccessを利用する方がよいでしょう。 ただ、今からACCESSを勉強してどうのこうのとするよりは、多少は利用できると仰られているExcelで十分実現可能な話だと思います。私はアプローチを少々させていただきます。 1) Workbook_Open() イベントを利用しましょう。 ファイルを開く瞬間にやりたいことは、ここに書きます。 トップ画面での認証が単に誤入力を防ぐものであり、悪意を持ったデータの改変の防止などといった目的でないのなら、このイベントにて、「InputBox」を利用します。 で、InputBoxに社員番号を入力してもらい、OKをクリックすると、その人が入力しても良い部分以外のセルをロックしてしまうなどという方法や、触られたくないシートを非表示にしてしまうとか、色々なことができます。 2) シートの保護や非表示を利用しましょう。これらをマクロ化してもよいですね。 http://okweb.jp/kotaeru.php3?q=1225586 http://okweb.jp/kotaeru.php3?q=1212034 は、私が以前回答したものですが、シートの保護や非表示もマクロで書くことができます。 3) その他のイベントも利用しましょう。 「作業者がある操作をしたときに、自動的にあることを実行したい」ということがありますね。それを実現するための各種イベントがあります。 セルの値が変更された瞬間にある操作を実行したい、とか、以下 選択範囲を変更した時に・・・ あるシートを表示させた時に、(あるいは隠した時に)・・・ 印刷する直前に・・・ ブックを閉じる直前に・・・ など、色々な状況で発生するイベントをマクロ上で表記できますので、これらを利用すると、入力時にマクロが動作していることを意識させません。(入力時に特別な操作を必要としないということです) 4) If Else、For Next、Do Loop を覚えましょう 「マクロの自動記録」と「VBA」の最も大きな差が、これらの命令文です。左から「もし~なら~という処理をする(これは関数でも似たようなものがありますが)、「決められた回数だけ、ある処理を繰り返す」、「ある条件を満たしている間、ある処理を繰り返す」という処理のことで、大抵のVBAの教則本の比較的冒頭に記載されています。これを使いこなせるかどうかが、「マクロができる」と「VBAができる」との違いといえます。 5) もう少し具体的な質問だと、誰かがそのものズバリのものを作ってくれます。 私をはじめ、ここにはおせっかいがたくさんいますので、例えば、「あるセルにこういう値を入力したら自動的に表を作成して欲しい」とか、シート名やセル範囲込みで質問すると、誰かが作ってくれますよ。 ボリュームが大きければ、部分部分に分割して質問すればよいですから。 6) いっそお金を払って作ってもらう http://www.paw.hi-ho.ne.jp/sunfish/feemenu.htm#program http://www5f.biglobe.ne.jp/~hatano/pc_soft.htm など、ExcelVBAやAccessのプログラムを請け負ってくれる人がたくさんいます。お急ぎならこういうのを利用するのもアリかもしれませんね。 最後に参考図書ですが、定番は「できるシリーズ」でしょう。 http://dekiru.impress.co.jp/news/2002/06/14/ex_mv02.htm 自分で読んでもいないのにお勧めするのもなんですが、こんな本は参考になりませんかね。 http://www.gihyo.co.jp/books/syoseki.php/4-7741-2251-3

sinkichi
質問者

お礼

お礼が遅れまして、申し訳ございません。 ありがとうございました。

  • at121
  • ベストアンサー率41% (85/206)
回答No.1

何から手をつけていけば・・ シートの保護とデータ範囲の書き換え許可は ツール>保護で・・・ ログイン・アクセス制限 シート名 認証、data、ご利用の注意 を用意 シート(認証)には 隣りあわせで 名前 アクセス権レベル 1, 2 などの数字   例 aa 1   bb  2  を設定 動作 ログインにて aa を設定すると 全てアクセス可 bbで ログインすると  dataシーのみアクセス可。それ以外は「ご利用の注意」シート に飛ばされる。 応用すれば、入力すべきシートに飛ばせる。 認証シートに登録していない名前でログインインすると「ご利用の注意」シート に飛ばされる。 ↓ThisWorkbookのモジュールに貼る↓ Public ログインユーザー As String Public アクセス権 As String Private Sub Workbook_SheetActivate(ByVal Sh As Object) Application.EnableEvents = False If ログインユーザー = "" Then 'ログイン処理 ログインユーザー = InputBox("きっ・・君の名は? ..", "ログイン") If Worksheets("認証").Cells.Find(ログインユーザー) Is Nothing Then Worksheets("ご利用の注意").Select Worksheets("ご利用の注意").Protect MsgBox ("ごめん 人違いだった・・  【アクセス禁止】") Else '認証成功 アクセス権 = Worksheets("認証").Cells.Find(ログインユーザー).Offset(0, 1).Value Worksheets("ご利用の注意").Select End If End If Select Case アクセス権 'チェック Case 1 If Sh.Name Like "*" Then '全て許可 Sh.Unprotect End If Case 2, 3, 12 If Sh.Name Like "data*" Then 'データシートを変更許可 Sh.Unprotect Else Sh.Protect 'このシートに対してはアクセス禁止 Worksheets("ご利用の注意").Select Worksheets("ご利用の注意").Protect End If Case Else '許可シート以外へのアクセスは戻る Worksheets("ご利用の注意").Select Worksheets("ご利用の注意").Protect End Select Application.EnableEvents = True End Sub

sinkichi
質問者

お礼

お礼が遅れまして、申し訳ございません。 何とかご回答のお陰で光がうっすら見えてきました。 ありがとうございました。

関連するQ&A