【久しぶりにマクロ書いた】ExcelVBA 特定のセルの値を削除したときに動く処理でDeleteが効かない問題【備忘】
このブログ、せっかく「IT備忘録」カテゴリがあるのに1個も記事がないから、
ここらで、ちったーそれっぽいこと書いとくか爆
久しぶりにExcelマクロ(VBA)書いたので、それでちょっと手こずったことをメモ。
◆任意のセルを更新したときに起動する処理
たとえば、A1セルに何か入力したり削除したりしたタイミングで発火する処理を書きたかったら、ExcelVBAだと
Worksheet_Changeっていうコマンドを使いますよね~
Worksheet_Changeの具体的な使い方についてはこの辺 参照↓
このコマンドを使って、任意のセルの値を削除したタイミングで発火する処理を書こうと思ったんだけど、
ここで、ちょっと悩みました(´・ω・)
★やろうとしたのはこんなこと★
↓こんな感じの画面があったとするよ。
この画面では
ブロガーコードを入力すると、コードに紐づく基本情報(黄色の項目)を数式で取得してくれるようになっている。
緑色の項目(好きな○○)は手入力で好きな値を入力できるようになってる。
黄色の項目で取得される基本情報は、Excelの別シートに持っているよ。
↓こんな感じで
ブロガーコードを変えてみると・・・(A-01→C-01)
こんな風に黄色の項目の値も、自動取得されるよ。
みんな大好きVLOOKUP関数は👇
別シート「ブロガー情報」から、ブロガーコードに紐づく値をとっているよ。
ここまでは普通のExcelのはなし。
本題、VBAでやりたいことは、
・ブロガーコードを削除したときに、入力欄(緑色の項目)も削除
コードを消したのに、入力欄に値が残り続けたら嫌だから、一緒に消したい。
こんな感じで作ってみました👇
ブロガーコードを削除。
メッセージがでるよ。
ここで仮に「いいえ」を押すと、ブロガーコードを削除する前の状態にもどるよ。
なぜ消えた値がもどるのかというと、右側にある、退避ブロガーコードセルに
削除前のブロガーコードを退避させてあるから。
削除しますか?「はい」にすると・・・
項目が全部空になって想定通りの動きをしてくれたよ(*^-^*)
これはごくごく簡単なプログラムなんだけど、ここまでいくのにつまづいた箇所があって、
それは、
「BackSpaceキーではうまく消えてくれるけど、Deleteキーだと、削除処理が動かない」
これが分からず、30分以上消費してしまった。。。
押したキーを判断するGetAsyncKeyStateっていうAPIもあるみたいなんだけど、処理の発火のタイミング(ここでいうコードを削除したとき)にそれを発動する方法が分からないし、処理が煩雑。。。
いろいろ試した結果こんな方法で解決できました。
ソースコード
バックスペースキーで削除したときは
If (strCheckAddress = “$D$5”) Then 以下の処理
Deleteキーで削除したときは
ElseIf (strCheckAddress = “$D$5:$E$5”) Then 以下の処理
が動く。
ブロガーコードはD5とE52つのセルの結合セルなんだけど、どうやらDeleteキーをWorkSheet_Changeのトリガーにしたい場合は、結合セルの全部の範囲をターゲットに取得してあげないと動かないらしい。
これは知らなかった・・・
覚えとこっと。
WorkSheet_ChangeでDeleteが効かなくて困ってる人の役にたちますように。。。
それにしてもExcel嫌いだ。VLOOKUPみんな大好きだけど、オイラは大嫌い。自分より左のセルでしか検索備忘六効かないなんて、う〇こすぎるじゃないか爆
コメントを残す