• ベストアンサー

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/17068)
回答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

  • エクセル VBA セルをクリックすると色が変わる

    いつも皆様には大変お世話になっております。 早速ですが、VBAでセルをクリック(もしくはダブルクリック)するとそのセルの色が変わるといったようなマクロが組めるでしょうか。 色を変えたいのは、A1~A4までの4個のうち1個だけなのでA1がクリックされればA2~A4までは『色なし』にしたいのです。 そんなことは出来るでしょうか? よろしくお願いいたします。

  • VBA ダイアログボックス 名前をつけて保存

    お世話になります 「概要」 名前を付けて保存時に決まった文字とセル値を取得して保存させたいのですが可能ですか? 「説明」 「これは様式」は毎回決まった値で 「01」はセルA1から取得した値です 「です」は毎回決まった値です 保存後は下記になります これは様式01です.xls わかる方、よろしくお願いします

  • EXCEL VBA で VLOOKUP的な機能

    お世話になります =VLOOKUP($G6,マスタ2!$A$2:$F$27,2,FALSE) で値を取得できる状況で それを$G6が変更されたイベントで値をセルにセットするようにしたいのですがどのようにすればいいでしょうか? 複数人でコピー&ペーストしたりするので セルに式を埋め込まずに実現したい事情があります。 よろしくお願いします。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • エクセルVBAでの、結合したセルの扱いについて質問です

    エクセルVBAでの、結合したセルの扱いについて質問です A1とA2が結合されていたとします。 A1の値は、Range("A1")で取得できますが、 A2の値を取得しようとした場合、何もかえってきません 空の文字列が返ってきます。 A2がA1と結合されている、という情報を取得するにはどうしたらいいでしょうか。 ずっと困っていて、また困ったので聞いてみようと思いました。 よろしくお願いいたします。

  • エクセル A列のセルをクリックするとフォームが出て

    A列のセルをクリックするとフォームAが出てリストBOXの値をクリックするとA列のクリックしたセルに値を返す また同じようにB列のセルをクリックすると違うフォームBが出てリストBOXの値をクリックするとB列のクリックしたセルに値を返す そんなことが実現出来るのでしょうか ご指南ください。

  • エクセルVBAでセルの値を名前定義連続

    いつもお世話になってます。 エクセルVBA2013で質問です。 データ シートのC3から順次行方向にD3,E3と名前が入っています。 行方向に入る数は、下記のコードで取得できる数が上限になります。 i = Range("B4:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count + 2 そのC3から順次行方向のセルの値を名VBAで名前を定義したいと思っています。 参照範囲は、C3ならC列全体、D3ならD列全体・・・としていきたいです。 各セルに入る値は変化することがあります。C3に「あいう」と入力したり「AAA」と入力したりと変化します。その度に名前の定義を変更したいです。(イベントでなく普通にボタンを押して変更する) 名前が変わるので、同じ範囲で名前が違うものがいくつもできないようにしたいです。 すいません、色々条件ありますがどうぞよろしくお願いいたします。

  • VBA シートイベント

    シートイベントについて教えて下さい。 A3〜A100まで計算式が入っています。 そのため、A3〜A100のセルにカーソルが動いた時に注意メッセージを表示しています。シートイベントで設定しています。 ファイル保存時、入力漏れチェックのプログラムも入れています。 入力漏れチェック実行時、自動的にA列に設定したシートイベントも実行され、メッセージボックスが表示されてしまいます。 入力漏れチェック時は、A列のシートイベントを実行不可にしたいです。 良い方法はありませんでしょうか。

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • Excel VBA 条件を満たしたセル上にあるチェックボックス

    Excel2003を使用しています。 Sheet1のN4セルの値と同じ値が入力されているセルをSheet2のA列(A1:A50)から検索し、その行のB列に配置されているチェックボックスにチェックをつけたいのですが、そのチェックをつけたいチェックボックスを指定する方法がわかりません。 検索してヒットしたセルの1つ右隣のセルにチェックボックスが配置されているということで myNum = Sheets("Sheet1").Range("N4").Value Rng = Sheets("Sheet2").Range("A1:A50").Find(myNum) としたとして、Rng.Offset(, 1).Address と、チェックをつけたいチェックボックスの左上のセルアドレスを比較すればいいのかな?と思っているのですが、そのチェックボックスをどのようにしたら指定できるでしょうか? また、別の方法もありましたら、アドバイスをいただけると嬉しいです。 よろしくお願いします。

専門家に質問してみよう