エクセルマクロのchangeイベントについて

このQ&Aのポイント
  • エクセルマクロのchangeイベントについての質問です。マクロを作成しましたが、動作しません。
  • 質問者は「Private Sub Worksheet_Change」イベントを使用してマクロを作成しましたが、うまくいきません。
  • アドバイスをいただきたいと思います。なぜ動かないのか理由がわかりません。
回答を見る
  • ベストアンサー

エクセルマクロのchangeイベントについて

こんばんわ changeイベントを使ってみようと思い、下記のマクロを作ってみたのですが、どうしても動きません。 Private Sub Worksheet_Change(ByVal Target As Range) Set Target = Range("b4") Application.DisplayAlerts = False Dim i As Long Workbooks.Open Filename:="c:\osaruPKsarch\sarch.xls"  For i = 1 To 5 Step 1   Cells(3, i + 50) = Cells(7, i + 50)  Next i End Sub なぜ動かないのかもわかりませんToT アドバイスの程よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

Private Sub Worksheet_Change(ByVal Target As Range)  Dim i As Long  dim w as workbook  if Target.address <> "$B$4" then exit sub  set w = Workbooks.Open(Filename:="c:\osaruPKsarch\sarch.xls")  with w.worksheets("シート名") 'またはシート番号。試す前に正確に直すこと   ' For i = 51 To 55   '  .cells(3, i) = .cells(7, i)   ' Next i   .range("AY3:BC3").value = .range("AY7:BC7").value  end with End Sub 言わずもがなですが,起動させたいシートのシート名タブを右クリックしてコードの表示を選んで現れたシートに書かなければダメです。

osarusan0214
質問者

お礼

fmfm~ ちょっと使い方がわからない構文がいくつかあるので、示していただいたコードを解析する所からやってみます^^ ありがとうございます~^^

その他の回答 (2)

  • Azzz___
  • ベストアンサー率40% (9/22)
回答No.2

こんにちは。 No1さんの回答にもありますが、イベントが発生していないのは 恐らく該当するアクションがシート上で行われてないからだと思います。 もしくは、(今回は可能性が低いと思いますが)イベント自体は発生しているが、 途中で止まっていることも考えられると思います。 このような場合は、コードに仕掛けを入れることで、問題がどの部分で起こっているのか 突きとめる方法がいくつかあります。 ・ブレークポイントを入れる エディタ画面のコードに例えば「Private Sub Worksheet_Change(ByVal Target As Range)」に カーソルを置いて「F9」を押します。 この状態でプログラムが動くか確認します。 ・MsgBoxを入れる。 任意の場所にMsgBoxを入れます。例えば「MsgBox "ここまで処理"」などと入れておくと いいです。後はそれをずらしていけば、どこに問題があるのか分かります。 ・STOPを入れる 上記と同じで、コードの中に「STOP」文を入れます。 これも処理が流れていればSTOPの部分で止まりますので、どこまで処理が進んでいるか 分かります。 上記の方法で探すとどこに原因があるか分かると思います。 慣れてなければ、標準モジュールに簡単なプロシージャを作成し、それで試すと 上記がどのような働きを持っているのか分かると思います。 (説明を理解するより実際に試してみた方が直感的に分かると思います) 文法エラーは「実行時エラー」と表示されるので、問題はすぐに発見できますが、 質問者さんのような場合、いわゆる論理エラーの場合は上記の方法を使うことで より短い時間でどこに問題(バグ)があるのか発見できて、やりやすいです。

osarusan0214
質問者

お礼

ありがとうございます^^ atopやMsgBoxは入れてみたんですが、動きがおかしくどこが悪いか見つからなかったですToT >慣れてなければ、標準モジュールに簡単なプロシージャを作成し、それで試すと これを試してみますね^^b ありがとうござました!

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

質問異は、何がしたいのか文章ではっきり書くこと。初心者の場合突拍子もない方法(コードややり方)でやるときがあるので。例 Set Target = Range("b4")   がそれらしい。 質問には、コードしか挙げてない。 多分「B4セルの値が変わったら何々したい」だろう。その場合 If Target。Address="$B$4" Then ・・・ End If End Sub この方式を使う場合$やBを追う文字にすることに気をつけて。

osarusan0214
質問者

お礼

たしかに^^; 書き方下手で申し訳ありません^^; なるほど$をちゃんと指定しないといけないんですね! やってみます! ありがとうございます!

関連するQ&A

  • エクセル イベントマクロ Changeイベントを複数作りたい

    Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど

  • エクセル95のマクロ

    エクセル95で Private Sub Worksheet_Change(ByVal Target As Range)  というのは使えるんでしょうか? リターン押したときに移るセルを操作したいので 代わりになるものでもあれば教えて頂きたいです。 よろしくお願いします。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • Changeイベントについて

    エクセル2003のPrivate Sub Worksheet_Change(ByVal Target As Range)の上で Targetの指定方法ですが 1 単一セル 2 単一セルを複数(かなり多数) 3 セル範囲 4 セル範囲を複数(かなり多数) と4種に分けて、1と3はわかりましたが、2と3がわかりません どなたかご教授ください また、セルの値が変化したときに、マクロを起動させたいのですが、入力セルごとに(入力する値が同じ場合でも)、違うマクロを起動させる場合、どのように振り分ければいいでしょうか

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • エクセル デバッグできるのとできないのがある

    シートイベントについて教えてください。 シートモジュールに --------------------------------------------------------- Option Explicit Private Sub Worksheet_Activate() MsgBox "" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "" End Sub --------------------------------------------------------- と記載した時に、 F8で動かせるのは、Worksheet_Activateだけなのですがなぜでしょうか? ほかのイベントは、F8で実行させても、OSの音が鳴るだけで、マクロの実行はされません。 ご回答よろしくお願いします。

  • Worksheet_changeイベントが動作しない

    Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$D$224" If Target.Value = "" Then Range("D224").Value = "-" End If End Select End Sub DeleteキーでD224をクリアした場合、D224に"-"が入力されません。 D224はD225と結合してあります。 select~caseを使ってdeleteキーで"-"が入力されるような動作を教えてください・・よろしくおねがいします。。。

  • ワークシートのChangeイベントについて

    シート1のA1セルの値を変更したらシート2のA1・A2・A3と変更内容を順に記録するような以下のようなコードがありますが、うまく動作しません。問題点を指摘していただければ大変助かります。 【Worksheet】 Private Sub Worksheet_Change(ByVal Target As Range) Static r Dim s As Range Set s = Sheets("sheet1").Range("$a$1").Value If s Is Nothing Then Else If r = "" Then r = 1 Sheets("sheet2").Cells(r, 1) = Sheets"sheet1").Range("$a$1").Value r = r + 1 End If End Sub

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

専門家に質問してみよう