プロが教えるわが家の防犯対策術!

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

A 回答 (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
    • good
    • 1
この回答へのお礼

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

http://oshiete1.goo.ne.jp/oshiete_new.php3

お礼日時:2009/01/22 23:22

一つ追記しておきます。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A