プロが教える店舗&オフィスのセキュリティ対策術

教えてください。

現在業務管理のためエクセルを使用しています。
タイムレコーダ(打刻ボタン・・・出社/退社)も同シートにはめ込みたいのですが
プログラムを作成するしか方法はないでしょうか?

希望は、「出社」「退社」の打刻ボタンがあり
ボタンを押すと、その日の出社/退社欄に時刻が入力されるような感じです。

よろしくお願いいたします。

A 回答 (3件)

No.1です。



> また、一度押したら確定(押し直しができない)とすることはできますでしょうか?

はできるのですが、どこまで徹底的にやるかでやり方は変わってきます。

(1)ボタンを押したらそのボタンは押せなくなり、一度ブックを閉じて再度開いても、その日の日付が入力されていたら、該当するボタンを押せないように設定する。

とするのは簡単です。しかし、これには抜け道があり、いったん入力した時刻を手動で削除し、ブックを開き直すと、またボタンが押せるようになってしまいます。

そこで、
(2)シート保護をかけて、ユーザは直接管理表のセルに入力したり削除したりできなくする。(ユーザが入力するセルだけは、セルの書式設定の「保護」からロックを解除する)
シート保護にはパスワードを設定し、ユーザが保護を解除できないようにする。

という手が考えられます。しかし、画面からシート保護をかけると、マクロの中でもセルに時刻を入力することができなくなるのです。したがって、

(3)マクロの中でパスワードでいったんシート保護を解除し、時刻を表示したら再びパスワードをつけてシート保護をかける。

という手があります。あるいは、画面からはセルの変更はできないが、マクロの中からはできる、というモードにマクロで設定することもできますが、どちらにしろマクロの中にパスワードを埋め込む必要があります。

これも、ちょっと詳しいユーザがいてVBAの画面を開いてマクロの中を覗いてしまうと、パスワードが丸見えになり、結局保護は破られます。

それで、最終手段として、

(4)マクロにパスワードをかける
ということができます。この設定をすると、マクロの中身を見ようと思っても、パスワードがないと見られなくなるので、さすがにユーザは変更できなくなると思います。

それで、どこまで徹底してやるか、というのが問題です。とりあえず(1)の段階までだけやる方法をご紹介します。

縦横が逆だったということなので、今度はA列がタイトル行で、1行目のB列より右に日付が入っており、出社時刻が2行目、退社時刻が3行目に入るものとします。

マクロをそれぞれ以下のように変更してください。

Private Sub CommandButton1_Click()
 Cells(2, Day(Date) + 1).Value = Time
 CommandButton1.Enabled = False
End Sub

Private Sub CommandButton2_Click()
 Cells(3, Day(Date) + 1).Value = Time
 CommandButton2.Enabled = False
End Sub

それから、左側のThisWorkbookという文字をダブルクリックしてください。新たに白いシートが右に出ます。
そこに、以下のマクロをコピーして貼り付けてください。

Private Sub Workbook_Open()
 With Worksheets("Sheet1")
  If .Cells(2, Day(Date) + 1).Value = "" Then
   .CommandButton1.Enabled = True
  Else
   .CommandButton1.Enabled = False
  End If
  If .Cells(3, Day(Date) + 1).Value = "" Then
   .CommandButton2.Enabled = True
  Else
   .CommandButton2.Enabled = False
  End If
 End With
End Sub

これは、ブックが開かれたときにボタンの押せる/押せないを設定するマクロです。

上に書いた(2)~(4)のうち、ここまでやりたい、というご希望があればアドバイスをしますので、補足をお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これで十分です★
感謝いたします。ちょっと(自分で作ったわけではないですが)こんなものができてしまって
興奮しております♪
本当にありがとうございました。

また、別件で(他に同じような質問がなければ)残業計算などについて
質問させていただく予定ですので
もし、また見かけましたら、ご教授戴ければ幸いです。

お礼日時:2007/03/20 19:01

直接の回答ではありませんが、


PCの時刻管理を正しく行っていないと、根底から揺らいでしまいます。
PCの時刻は徐々に狂ってくることもありますし、
PCのCMOSバッテリーがへたってきたりすると、正しい時刻が得られません。
WindowsXPでインターネットに接続できる環境なら、
1.タスクバーの右端の時間が表示されている部分で右クリック。
2.サブメニューの「日付と時刻の調整」をクリック。
3.「日付と時刻のプロパティ」ダイアログの「インターネット時刻」タブをクリック。
4.「自動的にインターネット時刻サーバーと同期する」にチェックをいれ
 サーバーに「time.windows.com」と入力し「適用」をクリックして「OK」ボタンをクリック。
これで自動的に時刻を同期してくれます。(一週間毎)
    • good
    • 0
この回答へのお礼

ありがとうございます。
早速設定しました。他のPCも同期設定しようと思います。

お礼日時:2007/03/20 14:54

VBAを使いますが、プログラムというほどのものでもないですよ。



以下の仮定でマクロを作る方法です。

・1ヶ月(1日~31日)が1シート
・1行目はタイトルで、データは2行目から始まっており、2行目が1日、3行目が2日…と続いている
・A列に日付、B列に出社時刻、C列に退社時刻を表示

●手順
・「表示」>「ツールバー」>「コントロールツールボックス」を選択して、コントロールツールボックスを出します。

・その中の「コマンドボタン」を選択し、セル上のボタンを配置したい位置でクリックするとボタンが作成されます。

・ボタンを右クリックして「プロパティ」を選択するとプロパティウィンドウが出ます。Captionと書いてあるところの右を「出社」と書き換えて、Fontの右をクリックしてフォントを好みに指定します。

・ボタンをドラッグ&ドロップしたら移動、隅をドラッグしたらサイズ変更ができるのでお好みの位置とサイズにします。

・作った「出社ボタン」を右クリックして「コピー」を選択し、他のセルの上で「貼り付け」を行うと、もう一つ同じボタンができます。

・そのボタンの位置を調節し、プロパティウィンドウのリストボックスからCommandButton2を選択して、Captionを「退社」に変更します。

・「出社」ボタンをダブルクリックすると、VBAの画面が開き、

Private Sub CommandButton1_Click()

End Sub

と自動的に表示されるので、その間に以下のマクロをコピーして貼り付けます。

 Cells(Day(Date) + 1, "B").Value = Time

"B"は出社時刻を表示する列名に置きかえてください。データが2行目からでなく、もっと下の行から始まるのであれば、 + 1の部分を、データが始まる行より上にある行数に変えてください。

・エクセルの画面に戻り、同様に「退社」ボタンをダブルクリックすると、

Private Sub CommandButton2_Click()

End Sub

と出るので、その間に、

 Cells(Day(Date) + 1, "C").Value = Time

と入力します。"C"と + 1 は出社時刻と同様に実際の表に即して書き換えてください。

・エクセルの画面に戻り、コントロールツールボックスの青い三角定規のボタンを押し、そのボタンがへこんでいない状態にします。

これで、「出社」ボタンを押すと自動的に出社時刻が、「退社」ボタンを押すと退社時刻が、その日の行に入力されるようになります。

不明な点があれば補足をお願いします。

この回答への補足

ありがとうございます。

とても分かり易いご説明で、私でも作成できました。
感動してしまいました。

現在使用の表に適応させようと思っていますが、
時間軸が横になっています。
同じようにマクロ部分を変更してみましたが、エラーになってしまいます。
縦軸でないと無理でしょうか?

また、一度押したら確定(押し直しができない)とすることはできますでしょうか?

補足日時:2007/03/20 15:24
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています