- ベストアンサー
VBAでセルに値が入ったときにイベントを起こしたい
VBAでタイトルのことをやりたいのですがどうやったらいいのか全く思いつきません。どなたかヒントをいただけないでしょうか? B列の10行目から2000行までの間限定で、5行ごとのセルに値を入れたときに動くようにしたいんです。 例としてB10に値が入ったらA10から下に連番をふります。(1から5) B15に値が入ったらその続きを入れたいんです(6から10) どのようにしたらいいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
セル系のイベント制御は、標準モジュールではなく、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
その他の回答 (1)
- Craford
- ベストアンサー率50% (1/2)
一つ追記しておきます。 修正範囲の判定をしていないので、複数範囲を指定して値を入れたりするとエラーになってしまうので、Rangeの使用範囲まで見た方がいいかもしれません。
お礼
ありがとうございます!こんなやり方があるんだーと分かりました。 そのため自分でちょっと仕様を変えてしまいました。(結局手詰まりになってしまいましたが・・・)もしよかったらヒントをいただけるとうれしいです。 http://oshiete1.goo.ne.jp/oshiete_new.php3