- ベストアンサー
エクセルで、VBマクロを使い、cellの内容が変更されたタイミングでマクロを実行したいです
エクセル上のVBマクロで、cellの内容が変更されたときに、マクロを実行し、同時にどのセルが変更されたかを取得したいです。 よい方法があれば教えて頂きたいです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Worksheet_ChangeイベントとTarget引数を使うと良いでしょう。 例えば、使用しているシートのシート名タブを右クリックして「コードの表示」で 開いたコードウィンドウに下記コードをコピーして貼り付けます。 これで、内容を変更したときに、そのアドレスを表示します。 例えば、A1:A10を選択し、"abc" をキー入力し、Shift+Ctrl+Enter を押すと 範囲内に"abc"が入力され、メッセージボックスに "A1:A10" が表示されます。 Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Address(False, False) End Sub 但し、実際に本当に内容を変更したかどうかを検出するには、常に現シートの 写しを作っておいて、双方の内容比較する必要があります。 例えば、何も入力されていない A1:A10 を選択し、DELキーを押すと、何も変更 していないのに、A1:A10 と表示されてしまいます。 ということで、同じ内容を上書きしても変更したのと同様に扱われます。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
他の質問に答えた時のものですが、ご参考に。 (1)問題にしているワークシートを開く。 (2)メニユーのツール-マクロ-VBEをクリック。 VBEの画面になります。 (3)左側のフレーム(四角い部分)に「プロジェクト」と表題に部分にある問題のシート名をWクリック。 コードウインドウ(1番大きいフレームが白く出る。) (4)右側のフレーム(コードウインドウ)の上部の「General」と出ている欄の右の▼をクリックして「Worksheet」をクリック。 (5)Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub がでますが、Changeのイベントプロシージュアーを書きたいから無視。 (6)SelectionChangeが出ている欄の▼をクリックして 「Change」をクリック。 (7)Private Sub Worksheet_Change(ByVal Target As Range) End Sub となります。 (8)この真中に、回答のVBAプログラムをコピペします(通常は自分で作ります)。最初行と最後行はダブらないよう、コピペ対象から外すこと。 (9)表示-オブジェクトをクリックして、ワークシート画面に戻り、操作をする。 Targetと言うRangeの引数を渡してくれるので、 Target.ValueやTarget.AddressやRangeに関するプロパティが使えます。
お礼
詳しい説明ありがとうございます。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 各シートのChangeイベントですね。 変更されたセルは、引数Targetで取得出来ます。 こんな感じで。 Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "セル:" & Target.Address(False, False) & "が変更されました。" End Sub
お礼
どうもありがとうございます。 うまくいきました。
お礼
どうもありがとうございます。 変更の検出の点は、とても参考にしていただきました。