• 締切済み

行挿入(行数は場合により様々)

エクセル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で行挿入させるにはどうすればよいですか? 長文でしかも分かりにくい質問ですみません。 不可解なところは指摘していただけたら捕捉させていただきます。 宜しくお願いします。

みんなの回答

  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

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

yunako0517
質問者

お礼

回答ありがとうございます。 この方法は、sheet1でも自動で行を挿入するようにしたうえで、sheet1での入力時と同時に、sheet2で同じだけの行を挿入させるということですか? 出来れば、コピーの時点での、sheet2の自動挿入の方法が知りたいのです。 わがまま言ってすみません。 でもそういう方法もあるということは、思いつかなかったので、勉強になりました。

関連するQ&A

  • ExcelVBAでのオートフィルの使い方

    Excel2003です。 Bセルに入っている値をHセルまで右方向にオートフィルするマクロを組んでいるのですが、うまく動きません。 Bセルの最終行は変動し、オートフィルはBセルの最終行と最終行の1つ手前の2つ分をオートフィルしたいのです。 Range("B1").End(xlDown).Offset(-1, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault Range("B1").End(xlDown).Offset(0, 0).Select Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault これで、オートフィルしようと思っていたのですが、 Range(ActiveCell, ActiveCell.Offset(0, 7)).AutoFill Type:=xlFillDefault この式の実行で、 実行時エラー'1004' RangeクラスのAutoFillメソッドが失敗しました と、出てしまいます。   Selection.AutoFill Destination:=Range("B23:H23"), Type:=xlFillDefault こういうマクロなら動くので、AutoFillの後に明確な範囲指定をしていないせいなのでしょうか? 最終行が変動してしまう為、このような明確な範囲指定をする事ができません。 いい解決方法はないでしょうか?

  • VBA 最終行に10行、行を挿入する作業。

    VBA 最終行に10行、行を挿入する作業。 いつもお世話になっております。 上記の通りの質問をさせていただきたいです。 最終行は With Range("A65536").End(xlUp).Offset(1) End With で取得できるのはわかります。でも挿入時には使えないらしく、 どうすればいいのか分かりません。 ちなみに最終行はその時によって代わります。 どうか宜しくお願い致します。

  • 行の挿入で数式も自動的に挿入

    C1列に=SUM(A1:B1)を入力し、オートフィルを30行目までかけました。 3行目で行の挿入をした時に 自動的にC列に数式が入力されている状態 (上の行、又は下の行のコピーを挿入) にしたいのですがどうすればよろしいでしょうか? 行をコピー  → コピーしたセルの挿入 以外の方法はあるんでしょうか? よろしくお願い致します。

  • sheetの末尾にコピーする方法

    エクセルVBAで売上帳を作っています。 ひとつのbookで、売上帳sheetと入力用sheetを作っています。 入力用sheetから売上帳sheetへコピーする際に、売上帳sheetが3行目で終わっていたら、次は4行目から、というふうにしたいのですが、できません。 下のコードで実行すると、売上帳sheetの表の最終行からの貼付けになってしまいます。 Sub 売上() 行番号 = Range("最終行").Row - 2 '入力用sheetの最終行の2行上の行番号取得し「行番号」に代入 セル = "F" & 行番号 Range("B8:" & セル).Select Selection.Copy '入力用sheetの対象部分をコピー Worksheets("売上帳").Activate '売上帳シートをアクティブにする 行 = Range("G4").CurrentRegion.Rows.Count + 1 'アクティブセル領域の行数 + 1 Range("G" & 行).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '値の貼り付け End Sub どなたか教えてください。 宜しくお願いします。

  • 関数が含まれたセルの行をマクロで挿入する

    セルD2には、IF関数が含まれている、以下の表があります。2行目に行をマクロで挿入して大きな表を作成する予定です。        A       B       C      D      1    納入数   使用m数   納入m   使用m 2                           〔=if(B2>1,C2,"")〕 マクロは、以下のようにして、2行目に行を挿入したのですが、IF文が含まれたものが 挿入できません。どのようなマクロ文にしたらよいかわからず困っています。別シートからコピーする 方法も考えられますが、同じシート内で収めたいと考えています。宜しくお願いします。 Sub 行挿入() ' ' 行挿入 Macro ' ' Range("a2:d2").Insert copyorigin:=xlFormatFromRightOrBelow End Sub

  • マクロで行挿入がうまくいかない理由は?

    XPでOFFICE2007です。マクロ未熟者です。 マクロで、行挿入だけであればうまくいきますが、行挿入した後でその行に文字を入力するマクロでは、その行ではなく1行前のセルに文字が入力されてしまいます。 変なことになるのは、マクロを作成する過程で、行挿入が上の書式をコピーすることと関連がありそうなのですが、何に注意すればうまくいくのでしょう。 とりあえず今のところは行挿入を使わずに上の行をコピーして挿入する方法でうまくいっています。しかし行挿入後の文字入力がうまくいかないのか、その理由と対処方法がわかれば教えてください

  • excel「行の挿入」するとなぜか最終行に挿入されてしまう

    昨日、 ”excel2000の表で、ふつうにただ1行挿入したいだけなのですが、「行の挿入」を選ぶと 「データの消失を防ぐ為、空白でないセルをワークシートの外にシフトすることは出来ません」 とポップアップが出て、操作できません。” という質問をし、 ”全ての行を使い切ってしまっている、あるいは最終行(65536行目)のどこかのセルにデータが入っている。そのデータを消せばよい。” と教えて頂き、確認したところ最終行まで罫線がびっしり引かれていることに気付き、そんなにいらないので400行目以降の罫線はすべてクリアーで消去しました。 それで一件落着と思ったのですが、その後1行 行(罫線)を挿入すると、なぜか途中を通り越して最終行に罫線がはみ出てしまい、しばらくしてもう一行挿入しようとするとまた 「データの消失を防ぐ為、空白でないセルをワークシートの外にシフトすることは出来ません」 となってしまいます。私は400行目以内ですべて作業を完結させたいのに・・・。 どうすればよろしいでしょうか。

  • [VBAマクロ] Private Sub

    以下のコードは、ある任意のテーブルの最終行に何か入力すると自動的に新しい行を追加します。(例えば、TotalVal をセルR5に名前定義して、4行目に何か入力するとマクロが走って5行目に新規の行が挿入されます。) 新規の行を入力するだけでなく、直前行の計算式とフォーマット形式もコピーして行の挿入をするにはどうしたらよいか、どなたかご教示していただけませんでしょうか。よろしくお願います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = [TotalVal].Row - 1 Then Application.EnableEvents = False [TotalVal].EntireRow.Insert Application.EnableEvents = True End If End Sub

  • エクセル マクロ 行

    エクセル マクロについて Sheet1にはボタンがあり そのボタンをクリックすると フォームが表示してそのテキストに記入して、記録ボタンを押すと Sheet1最終行のフォームからシートにコピーするボタン方法は出来るのですが・・それだと最終行が新しい記載になってしまいます。 Range("a65536").End(xlUp).Offset(1).Select Selection = Selection.Row - 1 例えば A1 タイトル A2  小項目 A3  挿入させたい! A列の3行目から挿入して、その後も常にA3から挿入したいです。 新しい記載は常にA3にさせたいのですが、どうすれば良いのでしょうか?記述を教えて下さい。

  • エクセルで行が可変する時、VBAの記述

    エンジニアのものです。 エクセルで売り上げ集計をVBAを使って効率化しています。 他のシートからデータをコピー、貼り付けるのですが 分量が一定ではありません。 今VBAで、データの合計と、行の挿入を自動化させようとしているのですが 分量が一定ではないために、うまく指定ができません。 Q&Aサイトを検索していると、offset関数・名前の定義をうまく使えとあり   Worksheets("Sheet1").Names.Add Name:="名前A"   RefersTo:=Range("B125")   Range("名前A").Select If ActiveSheet.Offset(-1, 0).Value = "1134 " Then .EntireRow.Resize(10).Insert shift:=xlDown End If これで 名前Aと定義したセル(集計表の一番下)の上に数値が入っていれば 10行挿入するはずだと思うのですが うまくいきません。 どなたかわかる方がいましたらアドバイスお願いします。

専門家に質問してみよう