• ベストアンサー

エクセルで、VBマクロを使い、cellの内容が変更されたタイミングでマクロを実行したいです

エクセル上のVBマクロで、cellの内容が変更されたときに、マクロを実行し、同時にどのセルが変更されたかを取得したいです。 よい方法があれば教えて頂きたいです。 よろしくお願いします。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

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 と表示されてしまいます。 ということで、同じ内容を上書きしても変更したのと同様に扱われます。

hogehogeninja
質問者

お礼

どうもありがとうございます。 変更の検出の点は、とても参考にしていただきました。

その他の回答 (2)

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

他の質問に答えた時のものですが、ご参考に。 (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に関するプロパティが使えます。

hogehogeninja
質問者

お礼

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

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 各シートのChangeイベントですね。 変更されたセルは、引数Targetで取得出来ます。 こんな感じで。 Private Sub Worksheet_Change(ByVal Target As Range)   MsgBox "セル:" & Target.Address(False, False) & "が変更されました。" End Sub

hogehogeninja
質問者

お礼

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

関連するQ&A

  • VB2005.NETプログラムから、エクセル2007へのマクロ実行を無効にしたい。

    <PC1 動作環境> ・OS :Vista Business ・ソフト:office2007 Excel <PC2 動作環境> ・OS :Vista Ultimate ・ソフト:office2007 Excel <目的> VB2005.NETで開発したプログラムから、 エクセルのセルに値を入れるソフト開発しており、 エクセル側にマクロを仕込み動かしています。 VB側から、エクセルのマクロを動かしたくない場合があります。 セキュリティセンター⇒マクロの設定⇒警告を表示して全てのマクロを無効にするを選択しました。 <問題> PC1では、VB側から、エクセルのマクロが実行できなくなりますが、 PC2では、VB側から、エクセルのマクロが実行できてしまう。 PC2でも、VB側から、エクセルのマクロを実行しないようにしたいのですが、どなたか解決方法を知っている方いませんでしょうか。 宜しくおねがい致します。

  • エクセルでセルの値が変更されたらマクロを実行

    エクセルで、セルの値が変更されたらマクロを実行したいと考えています。 具体的には、A1のセルに何か値が入力されるか、変更されたら、 作成したマクロを実行したいと考えています。 どうしたらいいのでしょうか。 ご教授ください。 よろしくお願いします。

  • VBからエクセルマクロを実行したい

    VB2008で コマンドボタンを押すと 現在開いているエクセルファイル(test.xls)のマクロ1を実行させることは可能でしょうか? できればコードを教えていただける助かるのですが、、、 よろしくお願いします。

  • EXCELで”+100"を実行するマクロ

    EXCELで、マクロを実行するたびに、そのセルに入っている数に100プラスされるマクロを作りたいのです。 意味がよく分からないかもしれませんが、 例えば、あるセルに"100"という数値が入っていて、 1回実行すれば100+100で"200"に、もう1度実行すると、200+100で"300"に。…という感じです。 私的に考えたのは、 別のセルに"そのセル+100"をする式を書き込み、 コピー&元のセルに値貼り付けをし、 式の入った別のセルをDELする… というのをマクロにしてみたのですが、 イマイチうまくないというか… よい方法があったら、アドバイスください。

  • VB.Net2002からExcelマクロは実行できますか?

    VBからExcelを起動しシートに値を書き込みます.(ここまではOK) その後,そのExcelのマクロを実行させたいのですが可能でしょうか? また,マクロのセキュリティレベルは「中」なのですが,マクロの含んだExcelを起動させる際のメッセージ画面を非表示(暗黙的に「OK」を押す)ということは可能なのでしょうか?

  • VB6 OLE内のEXCELマクロを実行するには

    お願いします。VB6です。 (1)フォーム上に、OLEオブジェクトを配置してEXCELシートを埋め込みました。 OLE1.CreateEmbed vbNullString, "Excel.Sheet" (2)そのEXCELの標準モジュールに Sub TestMacro() Cells(1, 1) = "ABC" End Sub というマクロを記述しています (3)下記の様にそのマクロを実行させようとすると ★「実行時エラー'1004' cellsメソッドは失敗しました。'_Global'オブジェクト」 というエラーが出てしまいます。★ Private Sub Command1_Click() Dim wb As Workbook Set wb = OLE1.object wb.Application.Run "TestMacro" End Sub ★このエラーの回避方法をご教授ください なお ・エクセルのマクロを変える事はできません ・OLE右クリックでExcelを開いた状態なら正常実行されるので VBでOLEのExcelを開く方法がわかればそれでもOKです。

  • VBからマクロの実行について

    下記のようにVBよりエクセルマクロの実行を行っています。 マクロに引数を持たしたいのですが、以下のように記述すると 記述エラーが発生します。 引数をもっているマクロはVBから呼び出すことはできないのでしょうか? よろしくお願いいたします。 引数を持たせない場合はエラーが起こらない objExcl.Run ("Macro1.xls" & "!" & "Macro1") マクロ側に引数を持たして、以下のように記述するとエラーになる objExcl.Run ("Macro1.xls" & "!" & "Macro1(引数)")

  • VBからPowerPointのマクロを実行する方法

    代記の通りなのですが、VBを利用して、PowerPointのマクロを実行したいのですが、開くところは分かるのですが、実行する記述が分かりません。 どなたかヒントになることを教えていただけないでしょうか? また、マクロの内容なのですが、EXCELで作ったサンプルデータの内容のグラフを表示したいのですが、マクロ機能を使ってデータのインポートを行ったところ、インポート部分のマクロのみ記述されませんでした。 こちらの方もどなかたヒントになることをご存知の方がおりましたアドバイスをいただけると幸いです。 よろしくお願いします。 環境:WIN_XP VB6 POWERPOINT 2000

  • VB6からEXCELマクロの終了を判断する方法を教えてください。

    VB6からEXCELマクロの終了を判断する方法を教えてください。 VB6とEXCEL(VBAも含む)を使って次のような流れの処理を行うソフトを作っています。 そこでどうしてもEXCELマクロの終了をVB6から判断する必要があり、方法を教えて頂けないでしょうか。 1)VB6でEXCELファイルを起動 2)VB6からセルA1に10,A2に20を代入 3)VB6からEXCELファイル内のマクロをコール 4)マクロはA1+A2の計算を行いA3に代入(30) 5)VB6からA3の値を読み込む (実際にはマクロは複雑な処理をします。) 1)~5)の処理を5000回程度行います。 VB6から送られるデータは毎回変わり、EXCELとマクロで計算させたデータを回収してテキストファイルに書き出します。 一通りのプログラムは完成したのですが、計算したデータを見ると10+20が1.99999とか15.51414とかおかしい結果になっています。 もしかしたらマクロの実行が終わっていない段階でVB6がデータを拾ってしまっている??と考え、マクロの終了をVB6で判断してからデータを回収するようにしたいと思っています。 何か方法はないでしょうか。(または他に間違っているところがあるのでしょうか。) 長文ですみません。よろしくご教示ねがいます。

  • ExcelのVBAマクロCELL関数について・・・

    CELL関数を使って今いるセルを返したいのですが そのマクロの組み方がわかりません。 教えてください。マクロで書いてもらえるとうれしいです。 至急願います。

専門家に質問してみよう