アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル上のVBマクロで、cellの内容が変更されたときに、マクロを実行し、同時にどのセルが変更されたかを取得したいです。

よい方法があれば教えて頂きたいです。
よろしくお願いします。

A 回答 (3件)

こんにちは。

maruru01です。

各シートのChangeイベントですね。
変更されたセルは、引数Targetで取得出来ます。
こんな感じで。


Private Sub Worksheet_Change(ByVal Target As Range)

  MsgBox "セル:" & Target.Address(False, False) & "が変更されました。"

End Sub
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
うまくいきました。

お礼日時:2003/11/12 11:26

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 と表示されてしまいます。

ということで、同じ内容を上書きしても変更したのと同様に扱われます。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

変更の検出の点は、とても参考にしていただきました。

お礼日時:2003/11/12 11:27

他の質問に答えた時のものですが、ご参考に。


(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に関するプロパティが使えます。
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございます。

お礼日時:2003/11/12 11:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!