Subject: チェックボックスにチェックする人を限定する方法は? ======================================== From: Yon Date: 2000/08/02(水) 13:46:57 教えて下さい。 Excel97を使用しています。 Excelのファイルで活動予定表を作り、定期的に部内に回覧しています。 そのファイルをメールで回覧しているわけですが、 活動予定表を見た人は、自分の名前が入力されているセルの下にある、 チェックボックスにチェックを入れるキマリにしました。 ですが、チェックボックスは誰でもチェックを入れることができてしまうので、 正確性に欠けます。 チェックボックスにチェックを入れる人を限定することはできないでしょうか? どなたか教えて下さい。 また、不可能なことでしたら、「できないよ」と教えて下さい。 よろしくお願いします。 ======================================== From: わらびし Date: 2000/08/02(水) 16:55:20 こんにちは。 チェックする人が本人かどうかのチェック、いわゆるセキュリティについて、 どの程度シビアに管理しないといけないかによりますが、比較的安直なもの でも良いということなら、こういう方法はいかがでしょう。 閲覧を許可されている人を、あらかじめ登録しておきます。 この例では、一行目に登録者の氏名を記入しています。 二行目は閲覧チェック用(未/済)に空けておきます。 ● 準備 1.登録者にパスワードを申請してもらい、シートのずっと下方の、使用しない 行のセルに各々記入しておきます。 この例では、100行目、つまり、A100〜**100セルに、 それぞれ A1〜**1セルの人物に対応するパスワードを記入しておきます。 文字色を白にしておけば more better よ。(どっかで聞いたセリフ) (行を非表示にしてもいいです。101行目も一緒にね) 2.Worksheet の DoubleClick イベント・マクロを記入します。 コードは下記の通り。 "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)" Dim Nam As String ' 一行目以外を Double Click しても何も起きない If Target.Row <> 1 Then Exit Sub ' Double Click したセルが空欄でなかったら(名前が書いてあったら) " If IsEmpty(Cells(1, Target.Column)) = False Then" " Nam = InputBox(""パスワードを記入してください。"", ""Password ?"", ""*****"")" End If ' Password が正しい時 " If Nam = Cells(100, Target.Column).Value Then ' 100行目の Password" ' 閲覧済でない時 " If Cells(2, Target.Column).Value <> ""済"" Then" " Cells(2, Target.Column) = ""済""" " Cells(2, Target.Column).Font.ColorIndex = 1 ' ""済"" の文字色" " Cells(101, Target.Column) = ""済""" ' 閲覧済の時 " ElseIf Cells(2, Target.Column).Value = ""済"" Then" " Cells(2, Target.Column) = ""未""" " Cells(2, Target.Column).Font.ColorIndex = 3 ' ""未"" の文字色" " Cells(101, Target.Column) = ""未""" End If Else " MsgBox (""パスワードが違います。"")" End If Cancel = True End Sub 文字色は好みに応じて、適当に変えてください。 4.Worksheet の Activate イベント・マクロを記入します。 コードは下記の通り。 Private Sub Worksheet_Activate() Rows(11).Copy " Cells(2, 1).Select" Selection.PasteSpecial xlValue Application.CutCopyMode = False " Cells(1, 1).Select" End Sub ● 使い方 "最初にファイルを回覧する時には、A2〜**2セルには ""未"" と記入しておきます。" "文字色は ""未"" に応じた色がいいでしょう。文字配置もセル中央がいいでしょう。" "またA101〜**101セルにも ""未"" を記入し、ここの文字色も白にしておきます。" 閲覧者には、閲覧後に自分の名前をダブルクリックしてもらいます。 ======================================== From: わらびし Date: 2000/08/02(水) 18:50:24 こんにちは。 ついでにもう一つ考えました。 今度のはパスワードの入力を要求しません。 その代り、ログインした人の分しか閲覧チェックできませんので、他の人が 「おい、ついでに俺のもチェックしてくれよ。パスワード教えるからさ」 てなことはできません。 閲覧を許可されている人を、あらかじめ登録しておきます。 この例では、一行目に登録者の氏名を記入しています。 二行目は閲覧チェック用(未/済)に空けておきます。 (ここまでは同じです) ● 準備 1.登録者のログイン名を、シートの三行目に各々記入しておきます。 それぞれ A1〜**1セルの人物に対応するものを記入します。 書き終えたら、文字色を白にするか、行を非表示にしておきます。 2.そのシートに、コントロールツールボックスから、コマンドボタンを ひとつ作ります。 そのコマンドボタンの Click イベントは、下記の通りです。 Private Sub CommandButton1_Click() Call GetUserName End Sub 3.Visual Basic Editor のメニューで、[挿入]−[標準モジュール]とし、 新規に作成された標準モジュールシートに、下記のコードを貼り付けます。 Option Explicit "Declare Function WNetGetUser Lib ""mpr.dll"" _" " Alias ""WNetGetUserA"" (ByVal lpName As String, _" " ByVal lpUserName As String, lpnLength As Long) As Long" Const NoError = 0 ' 取得OK時 Sub GetUserName() Const lpnLength As Integer = 255 ' Buffer size " Dim status As Integer, m As Integer" " Dim lpName, lpUserName As String" ' lpUserName = Space$(lpnLength + 1) " status = WNetGetUser(lpName, lpUserName, lpnLength)" If status = NoError Then " lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)" Else " MsgBox ""名前を取得できません。""" End End If For m = 1 To 256 " If UCase(Cells(3, m).Value) = UCase(lpUserName) Then" ' 閲覧済でない時 " If Cells(2, m).Value <> ""済"" Then" " Cells(2, m) = ""済""" " Cells(2, m).Select" Selection.Font.ColorIndex = 1 " Cells(101, m) = ""済"" ' ← ここ" ' 閲覧済の時 " ElseIf Cells(2, m).Value = ""済"" Then" " Cells(2, m) = ""未""" " Cells(2, m).Select" Selection.Font.ColorIndex = 3 " Cells(101, m) = ""未"" ' ← ここ" End If Exit Sub End If Next " MsgBox (""あなたは閲覧者に登録されていません。"")" End Sub 文字色は好みに応じて、適当に変えてください。 4.Worksheet の Activate イベント・マクロを記入します。 コードは下記の通り。 Private Sub Worksheet_Activate() Rows(101).Copy ' ← ここ " Cells(2, 1).Select" Selection.PasteSpecial xlValue Application.CutCopyMode = False " Cells(1, 1).Select" End Sub ● 使い方 "最初にファイルを回覧する時には、A2〜**2セルには ""未"" と記入しておきます。" "文字色は ""未"" に応じた色がいいでしょう。文字配置もセル中央がいいでしょう。" "またA101〜**101セルにも ""未"" を記入し、ここの文字色も白にしておきます。" もし101行目が通常の使用範囲なら、もっと下の行にしてください。 その時には、上記3と4のコードも修正してください。(← ここ と書いた三箇所) (なおこの件は、前に書いた方法でも同様です) (しかも、前に書いたコードでは、4の分が Rows(11).Copy となっておりますが) (これは Rows(101).Copy の間違いです。どうも済みません) 閲覧者には、閲覧後にコマンドボタンをクリックしてもらいます。 ======================================== From: ミコ Date: 2000/08/03(木) 06:45:02 Yonさん、こんにちは、初めまして。ミコと申します。 わらびしさん、こんにちは。いつもお世話になります〜。(^-^) わらびしさんのマクロ、すごいですねぇ。 私は最初この質問を見つけた時、どうやるのかさっぱりでしたけど、さすがです。 わらびしさんの最初のマクロだと、こんな感じのシートですね。 A B C D 1 わらびし Yon ミコ しろくま(←特別出演) 2 未 未 未 未 *****途中省略****** 100 1111 2222 3333 4444 101 未 未 未 未 これを参考に、得意のおまけで、 こうゆうシートの場合を、考えて見ました。 A B C D E 1 わらびし Yon ミコ しろくま 2 8/1 3 8/2 4 8/4 *****途中省略****** 100 1111 2222 3333 4444 '***** ↓ぜ〜んぶ、シートタグを右クリックして出てきた所にペタッと貼ってくださいね。 "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)" Dim Nam As String ' 一行目以外を Double Click しても何も起きない If Target.Row = 1 Then Exit Sub " Nam = InputBox(""パスワードを記入してください。"", ""Password ?"", ""*****"")" ' Password が正しい時 " If Nam = Cells(100, Target.Column).Value Then ' 100行目の Password" ' 閲覧済でない時 " If Selection.Value <> ""済"" Then" " Selection = ""済""" " Selection.Font.ColorIndex = 1 ' ""済"" の文字色" ' 閲覧済の時 " ElseIf Selection.Value = ""済"" Then" " Selection = ""未""" " Selection.Font.ColorIndex = 3 ' ""未"" の文字色" End If Else " MsgBox (""パスワードが違います。"")" End If Cancel = True End Sub '******************* わらびしさんの、2つ目のマクロはむずかしいですぅ。 私じゃ解析できませ〜ん。 (^-^)/~~ ======================================== From: わらびし Date: 2000/08/03(木) 09:06:51 おはようございます。 ミコさん、夏バテ知らずで元気に頑張ってらっしゃるようですね。 私はもう、暑くて生きているのがやっとです。(-.-;; > 2つ目のマクロはむずかしいですぅ。私じゃ解析できませ〜ん。 あんなもん、アタシにも判りませんよ。 MSのHPからのパクリです。(^^;; http://support.microsoft.com/support/kb/articles/Q161/3/94.asp ======================================== From: Yon Date: 2000/08/03(木) 14:32:13 Solved: on わらびしさん、ミコさん、すごい・・・・・・・・(絶句) ありがとうございます。 早速、ためしてみました。 たしかに、思っていた感じのものができました。 つい先日、「Excel2000/97VBA 基本例題350」という本を買ってきたのですが、 まだ数ページ読んだだけなのです。この本をステップにして勉強していけば、 わらびしさんやミコさんの様になれるかなぁ・・・。(●^_^●)ポッ とても、勉強になりました。 今後ともよろしくお願い致しまーす。 ======================================== From: しろくま Date: 2000/08/03(木) 17:54:23 ウ〜ンン、残念です、参加したかったですぅ。(T_T) Yonさん、解決後にごめんなさいね。 >わらびしさん、ミコさん、すごい・・・・・・・・(絶句)ありがとうございます。 このお二人は、名物コンビです。(^^)v >つい先日、「Excel2000/97VBA 基本例題350」という本を買ってきたのですが、 >まだ数ページ読んだだけなのです。この本をステップにして勉強していけば、 >ミコさんの様になれるかなぁ・・・。(●^_^●)ポッ はい!ミコさんのようにReを頂いたら、すぐに反応してドンドン吸収してください。 がんばれば、きっとミコさんのようになれますよ。 では、ガンガン質問しましょうね。(オイオイ、お前は事務局か) >わらびしさんの様になれるかなぁ・・・。(●^_^●)ポッ これは、ご無体な...(^^;; たったぶん、近づけるかと思います。 わらびしさん、ミコさん、許してね。m(_ _)m (^0^)ノ~~~~~ ======================================== From: Yon Date: 2000/08/04(金) 09:59:51 しろくまさん。こんにちは。(^_^) ご助言ありがとうございます。 わらびしさん、ミコさんに近づけるように、 敏感な反応をして行こうと思います。 なんか、わたしはすごい方たちに助けてもらったんだなぁと 今更ながらドキドキしています。 (でも、助けてもらうのって嬉しいですね) わらびし師匠、ミコ師匠、そして しろくま師匠! これからもよろしくお願いしま〜す。m(__)m ======================================== From: わらびし Date: 2000/08/04(金) 10:17:59 おはようございます。 Yonさん、ご丁寧なお礼の言葉、恐れ入ります。 > 助けてもらうのって嬉しいですね こちらこそ、こんな風にお礼いただくと嬉しいもんなんです。 またなんでも訊きてくださいね。 なお、しろくまさんやミコさんはともかく、私はすごくありません。 ただのおせっかいなおじさんです。 しろくまさんへ 「このお二人は、名物コンビです。(^^)v」とか「黄色い看板のCMに出演」とか ミコさんと私に対して暴言(?)の数々・・・。 そんなことを言われると、私は絶対に!・・・・・喜ぶぞ。(^^) ======================================== From: しろくま Date: 2000/08/04(金) 19:21:43 すいません、少し小さくなって発言しますので... Yonさんが、あまりにも爽やかな方なので、もう一度お邪魔させてくださいね。 >わらびし師匠、ミコ師匠、そして しろくま師匠! ↑の、しろくまの部分は間違いです。しろくまは前座ですよ。 私達3人は、エクセル漫才クラブに入っています。(そんなのナイナイ!)  突撃隊長、ウリ坊のミコ  オオボケかましのしろくま  突っ込みのわらびし親分 のトリオです。(オイ!勝手に決めるんじゃねぇ!!) 時には、漫才をやっているのかReを出しているのか、わけがわからなくなるときが ありますが、そこは突っ込み役のわらびし親分がキチンと軌道修正してくれます。 基本的には、質問者の立場に立ってReしているつもりですので、もし脱線したら、 「また始まった」ってな感じで、お許しくださいね。 それから、質問される場合のポイントなんぞをお話しますね。  1.質問を出したら、優先順位一番で覗きに来る  2.回答が出てたら、すぐに反応する(回答者は、素早い反応にノッてくる)  3.わからないのなら、ここがわからないと素直に言う  4.解決したら、キチンとお礼をいう(みなさんボランティアですよね)  5.解決チェック後にも2・3日の間覗きに来る(別の方が回答を出されている場合がある) いままでのミコさんのスレッドを拝見していまして、こんな感じで対応されると、 ポスト「ミコ」もそんなに遠くありません。フフフ!! でも最近のミコさんはかなり勉強されてますので、一筋縄では肩を並べられませんよ。(^^; もし、エクセルを修行したいのならこのクラブは最高の教科書になるものと思います。 がんばってくださいね。 それから >>わらびしさんの様になれるかなぁ・・・。(●^_^●)ポッ >これは、ご無体な...(^^;; >たったぶん、近づけるかと思います。 ↑こんなコメント出しましてごめんなさいね。 でもわらびしさんは、しろくまにとっても、雲の上のそのまた上の方なんです。 上級者であることはもちろんなんですが、それ以上に的確にアドバイスしてくださる このクラブになくてはならない方のお一人なんです。 それにめっぽう優しいんですよ。わからないと噛み砕いてキチンと教えてくださいます。 と く に 若い女性の方には最高の力を発揮される方なんです。 しろくまは、そんなわらびしさんのReを拝見しまして勉強させて頂いております。 おかげさまでもう..........(ヤバイ、反論がコワイっす)(^^;; わらびし親分へ >「このお二人は、名物コンビです。(^^)v」とか「黄色い看板のCMに出演」とか >ミコさんと私に対して暴言(?)の数々・・・。 >そんなことを言われると、私は絶対に!・・・・・喜ぶぞ。(^^) あっ!やっぱり、これからもよろしくお願いいたします。m(_ _)m (^0^)ノ~~~~~ 管理人さん、つまらないことを書き込みましてごめんなさい。m(_ _)m ======================================== From: ミコ Date: 2000/08/04(金) 23:44:23 こんにちは〜。ウリ坊のミコでーす。 このスレッドも、解決後にも関わらず、ドンドン長くなってってますねぇ。 でも、これまでに私が作ったスレッドにくらべれば、まだまだ〜。 さらに、でろろ〜んと、長くしに、やってきちゃいました。 ミコ姐さん → 庄屋のおかみのおミコ様 → ミコ姫 → 巫女様 ずいぶん出世したなぁと思ったら、あれれ? 一気にウリ坊になっちゃった。 いったいどこで踏み外しちゃったんでしょうねぇ〜 >わらびしさん、ミコさん、すごい・・・・・・・・(絶句) すごいのは、わらびしさんだけですよ〜。 私のは、ほとんどわらびしさんのコピーです。 >がんばれば、きっとミコさんのようになれますよ。 そうですよ。私なんて、すぐすぐ。私なんか目標にしてちゃだめですよ。 わらびしさんはきついにしても、せめてしろくまさんくらいにしなきゃ! (しろくまさん、ごめんね) >では、ガンガン質問しましょうね さんせーい! 質問、お待ちしてマース。 >>わらびし師匠、ミコ師匠、そして しろくま師匠! >↑の、しろくまの部分は間違いです。しろくまは前座ですよ。 私のも違いますよ〜。私は、わらびし師匠の弟子です。 (いつのまにか、勝手に弟子入りしちゃった) >最近のミコさんはかなり勉強されてますので、一筋縄では肩を並べられませんよ >エクセルを修行したいのならこのクラブは最高の教科書になるものと思います ウリ坊ですからね、他のことはみ〜んな、うっちゃって、 ファンクラブにとっぷりつかってます。 (^^;; でも、その割にはそんなに大したことないんですよ。 またまた、関係ない事いっぱい書いちゃった。 管理人様、ごめんなさい。m(_ _)m