[[20210128131908]] 『選択しているセルの範囲をオートフィルしたい』(K) ページの最後に飛ぶ

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

 

『選択しているセルの範囲をオートフィルしたい』(K)

選択している範囲のセル(可変)を下にオートフィルしたいのですが、最後の処理の書き方がわかりません。

Rows("2:2").Select

    Selection.End(xlDown).Offset(1).Select
    ActiveCell.EntireRow.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("Q2").Select
    Selection.End(xlDown).Select
    Range(ActiveCell, ActiveCell.Offset(0, 14)).Select

↑ここまでで、オートフィル開始地点の選択はできていますが
↓がうまくかけずにエラーを突破できません。

    Selection.AutoFill Destination:=Range(??)

ご教授いただけたら幸いです。

< 使用 Excel:Office365、使用 OS:Windows10 >


 >オートフィル開始地点の選択はできていますが

 終了地点の説明が見当たらないですが、それはどうなっているんでしょうか?

(半平太) 2021/01/28(木) 15:00


お返事ありがとうございます。

選択した範囲の真下に1行のみオートフィルしたいです。
ただ、終了地点は都度異なる(アクティブセルの↓)になるので固定はできないんですよね。

(例)アクティブセル(D4:G4)をアクティブセルの1個下(D50:G5)にオートフィル

といった感じになります。
(K) 2021/01/28(木) 15:13


すみません、↑の例は(D5:G5)の誤りです。
(K) 2021/01/28(木) 15:14

 >選択した範囲の真下に1行のみオートフィルしたいです。

 なら、2行分にすればいいんじゃないですか?

 Selection.AutoFill Destination:=Selection.Resize(2)

(半平太) 2021/01/28(木) 15:24


お返事ありがとうございます。

 Rows("2:2").Select
    Selection.End(xlDown).Offset(1).Select
    ActiveCell.EntireRow.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("Q2").Select
    Selection.End(xlDown).Select
    Range(ActiveCell, ActiveCell.Offset(0, 14)).Select
    Selection.AutoFill Destination:=Selection.Resize(2)

このようにしたのですが、やはり最終行で失敗しましたと出てきてしまいます。
(K) 2021/01/28(木) 15:49


 >ここまでで、オートフィル開始地点の選択はできていますが
  ↑
 と言うことでしたよね。なら、エラーになる理由が分かりません。

 理屈として、下記コードがエラーになるって話ですよ? あり得ないんじゃないですか?

 Sub test()
     Range("D4:G4").Select
     Selection.AutoFill Destination:=Selection.Resize(2)
 End Sub

(半平太) 2021/01/28(木) 16:17


全体のコードや、レイアウトが示されていないので、お困りのポイントは分かりませんが、気づきの点で

■1
VBAの世界では基本的にシートやセル(オブジェクトといいます)を明示すれば、いちいちアクティブにしたり選択したりする必要はありません。

■2
セル範囲を対象にEndプロパティを使用しても、左上に該当するセル以外無視されます

 Rows("2:2").End(xlDown).Offset(1).Select
           ↓
 Range("A2").End(xlDown).Offset(1).Select と解釈される

■3
 Endプロパティの引数に「xlDown」を使用していますが、指定したセルより下にデータが無い場合、最大行まで行ってしまうので注意が必要です。

■4
提示のコードについて、■1と■2を踏まえて整理すると↓のようになります。

    Sub 整理()
        Range("A2").End(xlDown).Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        With Range(Range("Q2").End(xlDown), Range("Q2").End(xlDown).Offset(0, 14))
            Debug.Print .Address(False, False)
            .AutoFill Destination:=.Resize(2)
        End With
    End Sub

↑を実行すると、イミディエイトになんと出力されますか?
結局のところ、■3でコメントしているように、最大行が返ってきていて、それより下に拡張しようとして実行時エラーになってるんじゃないですか?

(もこな2) 2021/01/29(金) 09:34


 >選択した範囲の真下に1行のみオートフィルしたいです。
 >ただ、終了地点は都度異なる(アクティブセルの↓)になるので固定はできないんですよね。

Sub test()

    '選択したものの1行下の行全体にセル挿入
    Selection.Offset(1).EntireRow.Insert
    '選択したものを2行分に拡張してフィルコピー
    Selection.AutoFill Selection.Resize(2), xlFillCopy
End Sub

いろいろグズグズ書いてあるのは不要なのでは?
マクロの記録はどの操作がどの命令になるかの参考までにとどめておいて、
各行、各単語の意味を理解して、文章を組み立ててください。

※注意
シート上で選択できるものはセルだけではないので、
選択したもの(Selection)がセル範囲ではない場合は、
現状のコードでは当然エラーになります。
(まっつわん) 2021/01/29(金) 09:59


もしかして、↓みたいなことだったのではないでしょうか。
    Sub さんぷる()
        Dim 行 As Long

        行 = Cells(Rows.Count, "A").End(xlUp).Offset(1).Row

        Rows(行).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("Q2:AD2").AutoFill Destination:=Range("Q2:AD" & 行)
    End Sub

(もこな2) 2021/01/29(金) 10:32


コメント返信:

[ 一覧(最新更新順) ]


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