• ベストアンサー

VBAでセルに値が入ったときにイベントを起こしたい

VBAでタイトルのことをやりたいのですがどうやったらいいのか全く思いつきません。どなたかヒントをいただけないでしょうか? B列の10行目から2000行までの間限定で、5行ごとのセルに値を入れたときに動くようにしたいんです。 例としてB10に値が入ったらA10から下に連番をふります。(1から5) B15に値が入ったらその続きを入れたいんです(6から10) どのようにしたらいいでしょうか?

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

  • ベストアンサー
  • Craford
  • ベストアンサー率50% (1/2)
回答No.1

セル系のイベント制御は、標準モジュールではなく、Microsoft Excel Objects の「Sheet1」とかの処理をしたいシート名のところをダブルクリックしてコードを書きます。 試しにコードを書いてみました。おそらくこの動作で期待した動作を実現しているかと思います。 Target には、変更されたセルのRange値が入っているので、そこの列(Column)と行(Row)をみて変更されたセルを判断してます。 値が入ったとき、となっていたので、あえて trim() して値があった場合、という判定にしてます。 ※インデントを見やすくするため、全角空白文字を使用していますので、コピー&ペーストする場合は注意してください。 以下ソースコード '============================================================ ' ワークシートのセルが変更された時に発生するイベント Private Sub Worksheet_Change(ByVal Target As Range)   Static iCount As Integer   Dim i As Integer      ' 初期化処理   If iCount = 0 Then     iCount = 1 ' Staticは0に初期化されるので1に初期値を変更   End If        ' 変更したセルに値が入った場合条件成立   If Trim(Target.Value) <> "" Then          ' 行番号が2000以内のとき条件成立     If Target.Row <= 2000 Then                    ' B列で、5の倍数の行のとき条件成立       If (Target.Column = 2) And (Target.Row Mod 5) = 0 Then                  ' A列に値をセット         For i = 0 To 4           ' 値のセット           Cells(Target.Row + i, "A") = iCount           ' 1件ごとにカウンタを加算           iCount = iCount + 1         Next       End If     End If   End If End Sub

komarimono
質問者

お礼

ありがとうございます!こんなやり方があるんだーと分かりました。 そのため自分でちょっと仕様を変えてしまいました。(結局手詰まりになってしまいましたが・・・)もしよかったらヒントをいただけるとうれしいです。 http://oshiete1.goo.ne.jp/oshiete_new.php3

その他の回答 (1)

  • Craford
  • ベストアンサー率50% (1/2)
回答No.2

一つ追記しておきます。 修正範囲の判定をしていないので、複数範囲を指定して値を入れたりするとエラーになってしまうので、Rangeの使用範囲まで見た方がいいかもしれません。

関連するQ&A