プロが教える店舗&オフィスのセキュリティ対策術

下記のマクロでコピーをして貼付ける部分が
"L3:L130"になっている為、130行を超える部分は
空白になってしまいます。
データの最終行を取得して貼付るようにしたいのですが
どなたか、教えていただけないでしょうか??

Sub マクロ①()
'
' マクロ① Macro
'

'
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("ファイル出力").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ファイル出力").Sort.SortFields.Add2 Key:=Range( _
"D3:D3140"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("ファイル出力").Sort
.SetRange Range("A2:AB3140")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("L1").Select
Selection.Copy
Range("L3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("L3:L130")
Range("L3:L130").Select
Range("AA1").Select
Selection.Copy
Range("AA3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("AA3:AA130")
Range("AA3:AA130").Select
Range("F2").Select
End Sub

A 回答 (3件)

こんばんは


>"L3:L130"になっている為、130行を超える部分は空白になってしまいます。
>データの最終行を取得して貼付る(AutoFill)

可変のセル範囲を取得する方法は色々あるのでこの機会に覚えるのが良いと
https://www.niji.or.jp/home/toru/notes/8.html

L列最終行を取得する場合、
Cells(Rows.Count, "L").End(xlUp).Row (一例)

これを既存のコードに組み込むと
変える場所が2か所で長めになるので、記録マクロではない 変数を使う方法を参考コードにしてみます

該当部分を添削すると

Range("L1").Select
Selection.Copy
Range("L3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
’上記既存部分

Dim lastRow As Long
lastRow = Cells(Rows.Count, "L").End(xlUp).Row
Range("L3").AutoFill Destination:=Range("L3:L" & lastRow)
Range("AA1").Copy Range("AA3")
Range("AA3").AutoFill Destination:=Range("AA3:AA" & lastRow)
Range("F2").Select

End Sub

不要な.Selectも消しました(ここも参考になるかも)

注意:ありえないと思いますが、L列及びAA列の4行目以降に値がない場合
単セルに対してAutoFill出来ない為、エラーになると思われます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
リンクも貼っていただいているので
勉強してみます。
丁寧なご回答、ありがとうございました。

お礼日時:2022/04/07 13:34

こんばんは



>"L3:L130"になっている為、130行を超える部分は
>空白になってしまいます。

必ずL3セルより後に最終行が存在すると仮定しても良いのなら・・

Range("L3") = Range("L1")
Range("L3").AutoFill Destination:=Range(Range("L3"), Cells(Rows.Count, "L").End(xlUp))

でL1セルのコピーとL3以降へのオートフィルが可能になると思います。

※ 最終行がL2だったりする場合は、L2:L3 の範囲にオートフィルされます。
※ AA3:AA130の部分も同様であれば、同様の記述で可能です。
※ ご提示のコードから、不要な Selection 等の記述は省いてあります。
    • good
    • 0
この回答へのお礼

いろんな方法があるのですね。
ありがとうございます。

お礼日時:2022/04/07 13:40

Range("D3:D3140"),Range("A2:AB3140")は


Range("D3:D140"),Range("A2:AB140")かい?

最終行はRange("A65536").End(xlUp).Rowで取得

Range("D3:D140")なら
Range("D3:D" & Range("A65536").End(xlUp).Row)

解りずらければ EN=Range("A65536").End(xlUp).Row
として
Range("D3:D" & EN)

他全て同じ様に修正。Range("L3:L" & EN)の様に
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
マクロは難しいですね。。。
勉強しなければ!!と思っております。

お礼日時:2022/04/07 13:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A