- ベストアンサー
エクセルでキーボードロック
エクセルで、キーボードの任意のキー以外を ロックする方法はあるのでしょうか? キーボードをロックするマクロは、ネット上で発見したのですが、全てのキーがロックされてしまい、そのマクロを 応用すれば何とかなりそうなのですが、うまくいきません。 どなたか、良い方法をご存じないでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 私も、かつての会社員として思うことですが、そういうやり方は、あまり好きではありません。 まず、従業員さんたちと、話しあってみることが必要だと思います。従業員で度が過ぎるものに関しては、訓戒など必要でも、ある程度のことは知っていて見ぬふりをすることも、もし、経営者側だったら必要だと思います。先日、テレビで大阪府の水道局のある従業員さんが、解雇された話を聞いたけれども、管理側の一方的なやり方は、あまりにもひどすぎると思いました。社保庁みたいなところもあるけれども、もしも、民間の会社でしたら、何も言わないままに行ったら、かなり感情的なシコリが残ってしまいます。実情や実態を良く調べて、その上で、従業員さんたちに、そういう問題は、正せるかどうかは確認してもよいのではないかと思います。 確かに、そのキーの組み合わせ以外は入力できないようなことは簡単に出来ます。以下のようにすればよいです。しかし、この程度のExcelのマクロですと、それを上回る悪知恵を働かせる人はいくらでもいます。もちろん、そのような悪知恵が働く人は、少数派ですから、それをした人には、厳罰化は免れませんが。以下のマクロは、手入力した場合は、隠しシートを作れば、その記録は残りません。「Ctrl + : 」で初めて、両方に入ります。 入力に必要な部分は、ツール--保護--シートの保護で、予め、セルのロックを外してください。 時間を入力する場所は、「Ctrl + :」 のみしか受け付けません。そのブックを再起動すると、設定が始まります。 ''標準モジュール Sub Auto_Open() With Worksheets("Sheet1") .Unprotect Password:="PWS" .Protect Password:="PWS", UserInterfaceOnly:=True End With 'Worksheets("隠しシート").Visible = xlSheetVeryHidden '隠しシートを隠す Application.OnKey "^:", "TimeSet" End Sub Sub TimeSet() Dim i As Integer If ActiveSheet Is Sheet1 Then i = ActiveCell.Column If i > 1 And i < 6 Then 'B列~E列まで ActiveCell.Value = Time 'Worksheets("隠しシート").Range(ActiveCell.Address).Value = Time End If Else ActiveCell.Value = Time End If End Sub もう少し、手の込んだことをするなら、入力した画面と別に、隠しシートに、記録が残るようにすれば、シート保護しなくても、手で入れたものには隠しシートには出てきませんから、手で入れたことがすぐに分かってしまいます。なお、隠しシートは、通常のマニュアルでも隠すことは可能ですが、マクロ側から行うと、その存在は、通常では分かりません。 隠しシートは、名称は何でもよいですが、ここでは、「隠しシート」という名前になっています。ひとつ、別にシートを作っておく必要があります。マクロのコードは、「'(コメントブロック)」を外します。 もちろん、マクロのプロジェクトは、ロックしておく必要があります。VBEditor 側を書き換えられたら、アウトです。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#4 さんの方法、参考になりました。 ただ、数式は、 =B2=NOW()-TODAY() でどうでしょうか。タイミングというものがありますから、 「Ctr + :」以外は、手入力では入れられなくなります。 なお、Excel VBAで、キーボードの監視は出来ますが、かなり重くなってしまうと思います。一種のAPIタイマー・イベントなのですが、他のマクロも使えなくなりそうです。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
キーボードの任意のキー以外を ロックする方法では無いのですが、 B2セルに時間を入力するとして、 入力規制で、 設定 入力値の種類→ユーザー設定 空白を無視する にチェック 数式→=B2=TIME(HOUR(NOW()),MINUTE(NOW()),0) エラーメッセージ 不正なデータが入力されたらメッセージを表示する にチェック スタイル→停止 タイトル→打刻エラー(ご自由に) エラーメッセージ→ズルはいけません(ご自由に) 後はB列C列D列E列にコピーする。 ただ、入れ忘れて後から入力は出来ません。 (不正かどうか判断不明のため) とりあえず、これでご要望に叶うと思います。
- hallo-2007
- ベストアンサー率41% (888/2115)
>ところが、作業者が、自分で数字のキーを入力して、 >休憩時間をごまかしている人が一部存在するようで、 VBA案ですが、物理的にキーボードを外しておいて、マウスのみつけておく。 マウスをダブルクリックすると時刻が入ります。 シートの名前のタブを右クリック コードの表示をクリック VBエディターを起動させる。 以下をコピィして閉じる Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column > 1 Then If Target.Column < 6 Then ActiveCell.Value = Now End If End If End Sub シートのB~E列のセルをダブルクリックすると日付と時刻が入る。 書式で 時刻を選択しておくと時刻だけ表示されます。 別案ですが、バーコードリーダーはいかがでしょうか? 数字(社員番号など)印刷したネームプレート渡して、それをバーコードリーダーにかざすと社員番号と時間が入る バーコードリーダーも安くなって数千円からあります。
- imogasi
- ベストアンサー率27% (4737/17069)
大雑把過ぎてどの程度のことを考えているかわからない。 特にExcelの場合なので、どういう場合にどのような必要性があるのか 常識で判ることではないと思うので、丁寧に、実例でも挙げて説明が必要では。 「ロック」とは? 許すまたは禁止するキーは少数(数個)か? セルの値の入力に関してなら、少数なら入力規則で出来るが。 シートの保護との関連は? Excelの操作やVBA程度では出来ないし、VBAでも正面から取り上げることではない。 APIが必要なような事項は、この質問コーナーの範囲外と、個人的には、思うが。
お礼
ご意見ありがとう御座います。 具体的な説明として下記文章ご参考お願い致します。 生産工場にて、ライン作業者の休憩時間管理をエクセルを使用して 管理しています。作業者達の名前をA列に各行 入力し、 B列には10時休憩の休憩はじめ、C列には10時休憩の休憩終り、 D列には12時休憩の休憩はじめ、E列には12時休憩の休憩終り、の 時間をそれぞれショートカットキー(Ctrl+:)で休憩に行く時と 休憩から帰ってきたときに作業者に入力してもらっています。 ところが、作業者が、自分で数字のキーを入力して、 休憩時間をごまかしている人が一部存在するようで、 それを阻止する為に、B列C列D列…の休憩時間を入力するセルに対して キーボードのCtrlと:のみ入力できるように出来ないものか?と考えた 次第です。 私自身、エクセルについて余り詳しくなく、簡単に出来ること、なのか どうかもわからない、手探り状態なので、説明不足と思われるかもしれませんが、何卒、ご配慮お願い致します。
お礼
貴重なご意見、ありがとう御座います。 どの方法が良いか、検討させていただきたいと思います。 いくつかのご回答いただきましたが、このお礼回答を皆様へのお礼とさせていただきます。