• ベストアンサー

EXCEL(VBA) セルをクリックしたときの処理

何度もお世話になります。 A5:A20のどれかをクリックしたときに クリックしたセルが値が入力済みか確認してから ファイルを名前を付けて保存したいのですが クリックしたという情報(イベント?)の取得方法が わかりません。 (1)どのようにチェックすればよいのでしょうか? (2)また、皆さんはどのようにしてこのような問題を解決してるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tamazo-
  • ベストアンサー率60% (35/58)
回答No.1

Sheet1だとして、 Sheet1のマクロで Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' If Target.Column = 1 And Target.Row >= 5 And Target.Row <= 20 Then If Target.Value <> "" Then MsgBox "入力済み" End If ' End Sub と入れると、クリックしたセルがA5からA20のどれかで かつセルに値が入っているときのみ”入力済み”とメッセージが表示されます。 このメッセージ表示の部分を、「名前を付けて保存」の処理に置き換えてはいかがでしょうか。

Fat01ton
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 ご指摘の方法で希望する動作ができました。 ご回答ありがとうございました。

その他の回答 (2)

回答No.3

シートをクリックしただけで発生するイベントは無いのではないでしょうか・・ダブルクリックなら BeforeDoubleClickイベントで取得できるのですが。できればダブルクリックやボタンでのファイル保存に仕様変更されてはいかがでしょう。 多少強引なやりかたとしては、次のような方法もあるにはあります。 (1)A5~A20全てのセルに、セルと同じ大きさテキストなしのラベル(フォームツールバーのほうです)を貼り付け、それぞれにマクロを登録する (2)登録したマクロのプロシージャ内で、クリックされたオートシェープの名前等によりクリックされたことにするセルを判断する (3)マクロプロシージャ内にセルのselectメソッドを書いておけば、見た目上はほぼセルがクリックされてイベントが発生したように見えます SelectionChangeイベントではキーボードによるセル移動などにも反応してしまったり、現在選択されているセルをクリックしても反応しないという問題があります。changeイベントはセルの値が変更されなければクリックしても反応が無い状態になってしまいます。結果としてこのように面倒な方法しか思いつかないのですが、仕様を少し変更していずれかのワークシートイベントを取得して作業させる方が良い気がします。

Fat01ton
質問者

お礼

お礼が遅くなりまして申し訳ありません。 色々な方法があるのですね。大変勉強になります。 今回は#1さんの方法で対応いたしました。 今後、変更などする際にBraveStoryさんの方法も 参考にさせていただきたいと思います。 ご回答ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

CHANGEの方が適当かなと思いまして。 Private Sub Worksheet_Change(ByVal Target As Range) a = Target.Row b = Target.Column If a >= 5 And a <= 20 And b = 1 Then If Target.Value = "" Then MsgBox "値入力なし" Else flname = InputBox("ファイル名=") ActiveWorkbook.SaveAs Filename:=flname End If Else msgbox "範囲外入力です" End If End Sub

Fat01ton
質問者

お礼

お礼が遅くなり申し訳ありませんでした。 今回のマクロは#1さんの方法で実行させていただきました Changeという新しい情報をしり今後は色々使い分けたいと思います。 勉強になりました。ご回答ありがとうございました。

関連するQ&A