- ベストアンサー
VBAの行変更について
例 (1)sheet1のセルA1,B1を入力専用(シート名:入力)とする (2)入力する (3)sheet2のA1,B1に転記される (4)(1)を繰り返す (5)sheet2の行が変わる(A2,B2) (6)(4)と(5)を繰り返す (7)(5)がA5,B5まで転記されると自動的にC1,D1に転記される (8)(7)がC5,D5まで転記されると『データがいっぱいです』のメッセージがでる この説明でわかりますでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
入力用シートのシートモジュールに Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range With Target If .Address(0, 0) <> "B1" Then Exit Sub If .Value = "" Or Range("A1").Value = "" Then Exit Sub Set r = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp) If r.Row = 5 Then Set r = Worksheets("Sheet2").Range("C" & Rows.Count).End(xlUp) If r.Row = 5 Then MsgBox "データがいっぱいです": Exit Sub End If If r.Value <> "" Then Set r = r.Offset(1) r.Resize(, 2).Value = .Offset(, -1).Resize(, 2).Value End With End Sub ではどうでしょうか?
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
入力用シートのシートタブを右クリックして、シートモジュールを呼び出し、以下のコードを試してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range If Intersect(Target, Range("A1:B1")) Is Nothing Then Exit Sub Set c = Worksheets("Sheet2").Cells(Rows.Count, Target.Column).End(xlUp) If c.Row = 5 Then Set c = Worksheets("Sheet2").Cells(Rows.Count, Target.Column + 2).End(xlUp) If c.Row >= 5 Then MsgBox "データが一杯です!", vbCritical, "Σ( ̄ロ ̄lll)" Exit Sub End If End If If c = "" Then c = Target Else c.Offset(1, 0) = Target End If Set c = Nothing End Sub
- hallo-2007
- ベストアンサー率41% (888/2115)
>この説明でわかりますでしょうか。 だからといって、何をご希望なのでしょうか。 途中まででもできているのであれば、コードを表示してみてください。
お礼
ありがとうございます。