重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

エクセルVBAで売上帳を作っています。
シートを2つ使い、sheet1を入力用、sheet2を売上帳保存版として作っています。
今sheet2では、

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'イベント発生を一時止める
On Error GoTo line 'エラーが発生したらline:へ飛ぶ
If Not Intersect(Target, Range("売上帳最終行").Offset(-1, 0)) Is Nothing Then '入力セルが「売上帳最終行」の1行上だったら以下を作動
Range("売上帳最終行").Offset(-1, 0).EntireRow.Insert '入力セルの上に1行挿入
Range("売上帳最終行").Offset(-2, 0).Value = Range("売上帳最終行").Offset(-1, 0).Value '挿入された行に入力値を代入
Range("売上帳最終行").Offset(-1, 0).ClearContents '値が重複する最終行の1行上をクリア
r = Range("売上帳最終行").Row - 1 '売上帳最終行の1行上の行番号取得しrに代入
Range("M4").AutoFill Destination:=Range("M4:M" & r) 'M4セルから最終行の1行上までM4セルの式をAutoFill
End If
line:
Application.EnableEvents = True 'イベント発生を回復
End Sub

というコードで、下から2行目に入力されると自動的に1行増えるという表になっています。

今回入力用のsheet1に複数行入力しsheet2にコピーしようとした場合、sheet2の最終行の2行手前で納まった場合は、問題ないのですが、それをオーバーすると、表からはみだしてコピーされます。

コピーする際に、sheet1での入力行数と同じだけ、sheet2で行挿入させるにはどうすればよいですか?
長文でしかも分かりにくい質問ですみません。
不可解なところは指摘していただけたら捕捉させていただきます。
宜しくお願いします。

A 回答 (1件)

非常に単純な方法ですが


>Range("売上帳最終行").Offset(-1, 0).EntireRow.Insert '入力セルの上に1行挿入

この行の後に、sheet2に対し
sheet("sheet2").Range("売上帳最終行").Offset(-1, 0).EntireRow.Insert '入力セルの上に1行挿入
としておけば、sheet1で挿入されたタイミングでsheet2にも挿入が行われて、
sheet2の行数が増えるため、コピーしても収まると思いますが。
(ただし、sheet2に"売上帳最終行"か、それに対応するセルが必要になります)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
この方法は、sheet1でも自動で行を挿入するようにしたうえで、sheet1での入力時と同時に、sheet2で同じだけの行を挿入させるということですか?

出来れば、コピーの時点での、sheet2の自動挿入の方法が知りたいのです。
わがまま言ってすみません。
でもそういう方法もあるということは、思いつかなかったので、勉強になりました。

お礼日時:2008/10/29 15:33

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