- 締切済み
行挿入(行数は場合により様々)
エクセル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で行挿入させるにはどうすればよいですか? 長文でしかも分かりにくい質問ですみません。 不可解なところは指摘していただけたら捕捉させていただきます。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- denbee
- ベストアンサー率28% (192/671)
非常に単純な方法ですが >Range("売上帳最終行").Offset(-1, 0).EntireRow.Insert '入力セルの上に1行挿入 この行の後に、sheet2に対し sheet("sheet2").Range("売上帳最終行").Offset(-1, 0).EntireRow.Insert '入力セルの上に1行挿入 としておけば、sheet1で挿入されたタイミングでsheet2にも挿入が行われて、 sheet2の行数が増えるため、コピーしても収まると思いますが。 (ただし、sheet2に"売上帳最終行"か、それに対応するセルが必要になります)
お礼
回答ありがとうございます。 この方法は、sheet1でも自動で行を挿入するようにしたうえで、sheet1での入力時と同時に、sheet2で同じだけの行を挿入させるということですか? 出来れば、コピーの時点での、sheet2の自動挿入の方法が知りたいのです。 わがまま言ってすみません。 でもそういう方法もあるということは、思いつかなかったので、勉強になりました。