[[20150702231907]] 『最終の行の上に50行挿入して数式をコピーペースト』(Mina) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『最終の行の上に50行挿入して数式をコピーペーストする』(Mina)

はじめまして。
こちらでいろいろと検索させていただきましたが、
ナカナカ自分に合ったことが見つからず
思い切って質問させていただきます。

B1:E30の表があります。
最終B30の上に50行挿入して、挿入した50行に最終行のD30:E30の数式を
コピーしたいと思っています。
現在はA30にENDという文字を入れておいてCTRL+↓で最終行を求め
手動で行挿入&コピペをしているのですが、マクロを上手に使って
手早くできる方法はないでしょうか?
マクロの記述でやってみたのですが上手にできません。
アドバイスをしていただきたくお願い致します。

Sub Macro5()
'
' Macro12 Macro
' マクロ記録日 : 2015/7/2 ユーザー名 : Minako
'

'一番下の行を求める

    Range("A1").Select
    Selection.End(xlDown).Select

'行を50行挿入する

    Selection.EntireRow.Insert  ←1行しかできない

'B31:E31をコピーして行挿入した分だけ数式の貼り付けを行う

    Range("B31:E31").Select  ←ここから下はメチャメチャです
    Selection.Copy
    Selection.End(xlUp).Select
    Range("B30").Select
    ActiveSheet.Paste

'コピーモードの終了

    Application.CutCopyMode = False

'データの最終行へ移動する

    Selection.End(xlUp).Select

End Sub

列のDとEには関数が入っています。

< 使用 Excel:Excel2003、使用 OS:Windows7 >


どちらかわからないので試してみて下さい

 Sub test()
    With Range("B1").End(xlDown)
        .Offset(1).Resize(50, 4).Insert xlDown
        With .Offset(, 2).Resize(, 2)
            .AutoFill .Resize(51)
        End With
    End With 
 End Sub

 Sub test2()
    With Range("B1").End(xlDown)
        .Resize(50, 4).Insert xlDown
        With .Offset(, 2).Resize(, 2)
            .AutoFill .Offset(-50).Resize(51)
        End With
    End With
 End Sub

(マナ) 2015/07/03(金) 00:03


↑がだめなら

 Sub test3()
    With Range("d1").End(xlDown)
        .Offset(1, -2).Resize(50, 4).Insert xlDown
        With .Offset(, 2).Resize(, 2)
            .AutoFill .Resize(51)
        End With
    End With
 End Sub

 Sub test4()
    With Range("d1").End(xlDown)
        .Offset(, -2).Resize(50, 4).Insert xlDown
        With .Offset(, 2).Resize(, 2)
            .AutoFill .Offset(-50).Resize(51)
        End With
    End With
 End Sub

(マナ) 2015/07/03(金) 19:39


 こんにちは。
 Macro5を少し変えてみました。

 Sub Macro5_2() 
  ' Macro12 Macro 
  ' マクロ記録日 : 2015/7/2 ユーザー名 : Minako 

     dim i as long

 '一番下の行を求める 
     Range("A1").Select
     Selection.End(xlDown).Select

 '行を50行挿入する 
     for i = 1 to 50                   ←50回繰り返す
         Selection.EntireRow.Insert  ←1行しかできない
     next i

     Range("B30:E30").Select
     Selection.Copy
     range(range("B30"),range("A10000").End(xUp)).Select ←範囲はここでいいのか?
     msgbox ""                         ←範囲を見たいので ちょっと止めてみる
     ActiveSheet.Paste
 end sub

 セルをコピーする方法は、お書きになった
 範囲選択→コピー→貼付先選択→貼付 のほかに
 範囲選択→コントロールキーを押さえて→選択範囲を貼付先までドラッグ とか
 コピー元セルのフィルハンドルをダブルクリック などもありますので
 記録して研究してみてください。
 (記録後にヘルプを読むのがお勧めです。読める範囲で構いませんから。)

( 佳 ) 2015/07/04(土) 09:28


マナさん、佳さん お返事をいただきありがとうございますm(_ _)m

50行挿入できるところまでは上手く出来ました。

質問することが上手くお伝えすることができなくて申し訳ないのですが、
肝心なのは30行目のセルなんです。
フツーだと下へコピーしていけば良いと思うのですが、
タイトル行に各列1〜30のsumとかsumuifとかの関数が入っているので
一番下のセルの位置情報を変えたくないんです。
(常に最終の行をタイトル行の関数に反映させたい)
なので、行挿入の後、一番下になってる行の関数の情報なんかを・・・

すみません、自分で何が質問したいのかか判らなくなってきてしまいました^^;
もしかしたら作表の仕方が悪いのかもしれません。
もう一度よく考えて作表しなおしてから再度質問させていただきます。
よろしかったら、その時にまた教えていただければ嬉しいです。
お手数をおかけしました、ありがとうございました。

(Mina) 2015/07/04(土) 18:24


ごめんなさい。間違えていました。

 Sub test5()
    With Range("d1").End(xlDown)
        .Offset(, -2).Resize(50, 4).Insert xlDown
        With .Resize(, 2)
            .AutoFill .Offset(-50).Resize(51)
        End With
    End With
 End Sub

(マナ) 2015/07/04(土) 20:17


マナさん いろいろありがとうございます。

やはり私の作った表が悪いようです。
最終行に執着しすぎちゃって・・・^^;
標題に入る関数を見直してから
再質問させていただきますね。
いろいろと勉強になりました。
ありがとうございました。
(Mina) 2015/07/06(月) 23:34


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.