[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択しているセルの範囲をオートフィルしたい』(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
>選択した範囲の真下に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.