ExcelVBAのChangeイベントについて

このQ&Aのポイント
  • VBAのWorkSheet_Changeイベントを使用して、特定の行の変更を検知するコードを作成したいです。
  • 行数4行のうち、1行目に変更があった場合にコードが実行されるようにしたいです。
  • 行数10行目、14行目、18行目、22行目、26行目など、10の倍数行にはコードが実行されないようにしたいです。
回答を見る
  • ベストアンサー

ExcelVBAのChangeイベントについて

いつもお世話になります。 早速ですが下記の質問についてお願い致します。 VBAのWorkSheet_Changeイベントについてですが、 所定の行の場合実行する形の物を作りたいと思います。 現在表を作成しておりますが、一人の項目として4行を必要と しております。 その後、別の人・別の人と入力項目があります。 ここで聞きたいのが使用する行数4行の内の「1行目」に変更を 行った場合実行するコードを書きたいです。 起点となるのが10行目です。 ・10行目を変更したらコードが実行される。 ・11~13行目に変更を加えてもコードは実行されない。 ・14行目を変更したらコードが実行される。 ・15~17行目に変更を加えてもコードは実行されない。       ・       ・       ・ こんな感じです。 例えるなら、10・14・18・22・26と「10+4の倍数」は 実行されないコードを書くにはどの様にしたら良いでしょうか? ご教授願います。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

10・14・18・22・26・・・・ 以外は実行されない Private Sub Worksheet_Change(ByVal Target As Range)   With Target     If .Row < 10 Or .Row Mod 4 <> 2 Then Exit Sub     MsgBox .Row & "行目、実行します。"   End With End Sub

その他の回答 (3)

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

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 10 And ((Target.Row - 9) Mod 4 = 1) Then MsgBox Target.Row '本番ではMsgBox の代わりに、処理のコードを書く End If End Sub などどうですか。 ーー テストで、1行目ー30行目までのセルに入力すると 第10,14,18,22、26,30の行で、入力すると、Msgbox表示が現れました。

  • kkkkkm
  • ベストアンサー率65% (1570/2403)
回答No.2

No1です。 起点を忘れてました。 If (Target.Row - 10) / 4 = Int((Target.Row - 10) / 4) And Target.Row >= 10 Then

  • kkkkkm
  • ベストアンサー率65% (1570/2403)
回答No.1

> 10・14・18・22・26と「10+4の倍数」は 実行されないコードを 実行されるですよね。 If (Target.Row - 10) / 4 = Int((Target.Row - 10) / 4) Then End If

関連するQ&A

  • 全てのコンボボックスに同じchangeイベント

    VBA初心者です。お知恵を貸してください。 UserForm上にある全てのコンボボックス(1つを除く)に同じchangeイベントを適応させたいです。 【動き】 1.UserForm起動 2.フォーム上のSheetComboBoxからシートを選択 3.選択したシートを参照し、フォーム上にシートにある行数分ComboBoxi(変数)_1〜3、TextBoxi(変数)を作成。ComboBoxにシートの値を参照した「文字列 数値」をセット。TextBoxは空欄。 4.ComboBoxi_1〜3が変更されるごとに、TextBoxiにComboBoxの内容の数値部分を計上する。 5.登録ボタンをクリックしてComboBoxi_1〜3の内容をシートの特定列に転記。 3までは作成することができましたが、4で行き詰まってしまいました。 コンボボックスのコントロール名は動的なので、どのようにchangeイベントを書けばいいのか、また、コンボボックスの量が多い(1行3つ*行数分)ので、すべてに対して書かなければならないのか…ということです。 何か一括でchangeできるような方法をご存知の方は教えていただけないでしょうか。どうぞよろしくお願いいたします。

  • ワークシートの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

  • Worksheet_Changeイベントでドラッグ方向の取得?

    エクセルVBA のWorksheet_Changeイベントで 例えば、A1セルをクリックしA2へドラッグした場合、Target.addressはA1:A2になりますが、A2セルをクリックしA1へドラッグした場合でもTarget.addressは同じです。 上から下へドラッグしたか、下から上なのか判定する方法はありますか?

  • VBA changeイベントを複数入れたい

    VBA changeイベントを複数入れたい VBAは初心者で、以前もこちらでお世話になりました。 F4セルに入力した際、VLOOKUPで検索し、該当がなければメッセージボックスを出し、 該当があれば、そのまま次に進む、というchangeイベントが既にあります。 ここに、E4セルに入力した数字が、同じシートのE列5行目以下と重複していた場合、 エラーメッセージを出す、とのをつけたしたいと思っています。 IFを使えばいい、ということはわかるのですが、どこに入れたらいいのかがわからず・・・。 すでにあるVBAは以下のとおりです。 Private Sub Worksheet_Change(ByVal Target As Range) '処分受託者(入力用名称)を入力して、処分業者名簿になければエラーメッセージを出す。 Dim rang1 As Range Dim rang2 As Range Dim 処分受託者名称 As String Dim LastRow As Long LastRow = Worksheets("処分業者名簿").Cells(Rows.Count, "b").End(xlUp).Row Set rang2 = Worksheets("処分業者名簿").Range("b4:b" & LastRow) Set rang1 = Range("f4") If Intersect(Target, rang1) Is Nothing Then Exit Sub On Error Resume Next 処分受託者名称 = WorksheetFunction.VLookup(Target.Value, rang2, 1, 0) If Err.Number > 0 Then MsgBox Target.Value & " はありません" Range("f4").Select Else End If End Sub この、どこに重複の場合はエラーメッセージを出す、というのを入れればいいのか、 教えてください・・・。

  • EXCEL VBA Worksheet Chang

    EXCELのシートが変更されたらWの列に更新Timeスタンプをセットします。 Worksheet_Changeイベントに以下のように配置して動作させています。 Private Sub Worksheet_Change(ByVal Target As Range) Cells(Target.Row, "W") = Now End Sub この場合、行の挿入、削除の場合、挿入前、削除後の行が更新されてしまいます。 行の挿入、削除の場合に上記コードを実行させないようにするにはどうすればよいでしょうか? よろしくお願いします。

  • Excel VBA 残りの行数を計算し、貼付けられるか、別のシートに貼り付けるかを判断し実行するマクロ

    Sheet1に二十数個の項目が列記されており、その内、必要な項目だけをコピーしてheet2に貼り付けて行きます。 一項目の行数は6行~18行とまちまちです。 必要な項目はその都度違います。 heet2の行数は50行と決まっています。 よって、あるところで50行を超えてしまいますので、Sheet3へ移動し続きを貼り付けます。 このとき、一つの項目がSheetをまたいではいけません。 (Sheet1に空白が出来てもかまいません) 要は、貼り付ける行数と残りの行数を自動で判断して、入る場合は貼付け、入らない場合はSheetを変えて貼付けるVBAのコードを具体的にご教授願いたいのです、宜しくお願いします。 Excel2000、VBAはマクロの自動記録をいじる程度のスキルです。

  • selectのchangeイベントの回数

    IE8を使用しています。jqueryで、以下のようなソースを書いています。 #alistは、selectタグにつけているIDです。selectの項目を変化させたときに、 一度だけyyy.phpを実行させたいのですが、changeイベントが2回起きてしまいます("a"のalertが2回出る。) なぜでしょうか?一度だけイベントを取得する方法を教えていただけないでしょうか? ソースコード: $(function() { alert("a"); $('#alist').change( function() { $.getJSON("php/yyy.php", XXX, function(data) { }); 以下、かっこを閉じる。

  • イベント処理のON、OFF 教えてください

    ExcelのVBAマクロのイベント処理について教えてください。 WorkSheetのあるCellの内容が変化したとき発生する イベント処理関数:Worksheet_Change(ByVal Target As Range) があります。 あるCellの内容が変化したら、このイベントを受けて、 別の場所のCell範囲をクリアしたいのですが、 「別の場所のCell範囲をクリア」しているときは、 イベント処理関数:Worksheet_Change()が起動されないように したいのですが、どのようにすればいいでしょうか?? よろしくお願いいたします。

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 エクセルのセル に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのですがセルをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 セル"A1" に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのでセルにをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

専門家に質問してみよう