SSブログ

エクセル幼稚園:ばかよけ2 [コンピューター]

6/12の記事で、選択された複数のセルに今日の日付(例:2012/6/12) を代入するマクロを紹介しました。

今日は、ばかよけ(フールプルーフ)と呼んでいいものか、分からないのですが。
エクセルがセルへの代入とか、削除とか、重要なこと(恋人にフラれるよりマシ?)をしようとしたとき、人間様に確認を求めるようにプログラムを作ったとします。

人間様がいつでも完璧な存在なら、正しい選択をするでしょう。
しかし、酒におぼれ、女におぼれ、権力の虜になり。。そんな人間様が間違った選択をすることは、まま、あることでございます。

そこで、重要な決断を人間様に迫るときは、重大な結果をもたらす方の選択肢を選びずらくしておく。。今回は、そのようなしかけを『ばかよけ』と呼ばせていただきます。

例えば、ガス栓を開けるとき、ただひねっただけでは開かず、一度押し込まないと開きませんよね。これも、『ばかよけ』の一種です。

前置きが長くなってしまいました。
6/12のマクロでは、日付の代入する前に、次のようなメッセージボックスを表示して、人間様に判断を求めます。

001.jpg

ここでは、『いいえ』の方をデフォルトにして、『はい』を選びづらくしています。
ろくに確認もせず、Enterキーをペシッと押されても、選択されたセルに日付が代入されないようにしています。この『ばかよけ』を実現するためのコードを示します。

01: ' 文字列を生成
02: str1(0) = Format(Now(), "現在:yyyy/mm/dd(aaa) hh:mm:ss")
03: ' ActiveCell.Addressでは、単一セルしか代入できないので、Selectionを使う
04: str1(1) = str1(0) & vbCrLf & Selection.Address
05: str1(1) = str1(1) & "セルに今日の日付を代入しますか?"
06: ' 選択されているセルに今日の日付を代入するか、確認
07: ans1 = MsgBox(str1(1), vbYesNo + vbExclamation + vbDefaultButton2)
08: ' 場合分け
09: Select Case ans1
10:   Case vbYes ' 「はい」
11:     ' 選択されているセルに今日の日付を代入
12:     For Each objRANGE In Selection.Cells
13:       objRANGE.Value = Format(Now(), "yyyy/m/d")
14:     Next
15:     'Range(ActiveCell.Address) = Format(Now(), "yyyy/m/d") ' 単一セルへの代入
16:   Case vbNo ' 「いいえ」
17:     ' 何もしない
18:   Case Else '「はい」でも「いいえ」でもない
19:     ' 何もしない
20: End Select

02 - 05行目:メッセージボックスに表示するメッセージの文字列をstr1(1)変数に代入する。
 ・vbCrLfは、メッセージの途中で改行するためのコード。
07行目:メッセージボックスを表示して、代入するか、否か、人間様に選ばせる。選んだ結果は、ans1変数に代入される。
  ・vbYesNoで、[はい]ボタンと[いいえ]ボタンを表示する。
  ・vbExclamationで、注意メッセージ アイコンを表示する
  ・vbDefaultButton2で、第2ボタンを標準ボタンにする。

※ここでの味噌は、vbDefaultButton2です。このコードにより、標準ボタンが[いいえ]になります。メッセージボックスが表示されて、何も考えずにEnterキーが押されても、[いいえ]が選ばれます。これが、ばかよけになります。
09 - 20行目:ans1の値によって、処理の仕方を変える。
10 - 15行目:「はい」が選ばれていたら、今日の日付を代入
16 - 17行目:「いいえ」が選ばれていたら、何もしない
18 - 19行目:「はい」でも「いいえ」でもないときも、何もしない

参考URL:
Excel(エクセル) VBA入門:対話型処理1(MsgBox関数)

最近、読んだ本:
・UNBOWEDへこたれない ~ワンガリ・マータイ自伝 [単行本]
・憂鬱でなければ、仕事じゃない [単行本(ソフトカバー)]
タグ:エクセル VBA
ヤバイぜ!(3)  コメント(1)  トラックバック(0) 
共通テーマ:日記・雑感

ヤバイぜ! 3

コメント 1

cheese999

nice! ありがとうございます。
(*_*)ノ
by cheese999 (2012-07-15 20:11) 

Facebook コメント

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。