[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『最終行へのコピペ』(める)
コピーして別シートに貼り付ける時に変数を使うと上書きされてしまします。
この原因教えてください。
Dim i As Long
i = Cells(Rows.Count, 1).End(xlUp).Row
Sheets("1").Range("a3:V5").Copy Sheets("all").Cells(i, 1).Offset(1, 0)
Sheets("2").Range("a3:V5").Copy Sheets("all").Cells(i, 1).Offset(1, 0)
変数を使わないと上手くいきます
Sheets("1").Range("a3:V5").Copy Sheets("all").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Sheets("2").Range("a3:V5").Copy Sheets("all").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
< 使用 Excel:Excel2016、使用 OS:Windows10 >
i = Cells(Rows.Count, 1).End(xlUp).Row
シートの指定がないので、アクティブシートの最終行が取得されています。 (OK) 2019/06/12(水) 18:48
i = Sheets("all").Cells(Rows.Count, 1).End(xlUp).Row Sheets("1").Range("a3:V5").Copy Sheets("all").Cells(i, 1).Offset(1, 0) i = Sheets("all").Cells(Rows.Count, 1).End(xlUp).Row Sheets("2").Range("a3:V5").Copy Sheets("all").Cells(i, 1).Offset(1, 0)
(マナ) 2019/06/12(水) 18:51
(1)
BJさんが指摘されているように、【標準モジュール】で、対象となるシートを省略すると、アクティブシートを指定したものとして扱われます
例 i = Cells(Rows.Count, 1).End(xlUp).Row ↓ i = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
(2)
【Cells(Rows.Count, 1).End(xlUp)】【.Row】
↑は前半部分で「セル」が取得されていて、後半でその「セル」の行番号を得ています。
そして、
Cells(i, 1)
↑でセルに組み立て?ています。
これをよく考えてみてください。
上手い表現が思いつきませんが、一度A列の最終行のセルが取得できているのに、わざわざ行番号に分解して、再度同じセルに組み立てなおしています。これって無駄じゃないですか?
なので、変数「i」に行番号をいったん格納せずとも
Sheets("1").Range("a3:V5").Copy Sheets("all").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Sheets("2").Range("a3:V5").Copy Sheets("all").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
のように記述しても同じことになります。
(3)
コピー対象のセル範囲はいつも同じ番地だということならループ処理で記述することもできます。
また、対象のセル範囲や、シートなどを一度オブジェクト変数にセットしてやれば、以降はどこの所属なのかという記述は要らなくなってシンプルになると思います。
Sub さんぷる() Dim dstRNG As Range Dim tmp As Variant
With Sheets("all") Set dstRNG = .Cells(.Rows.Count, 1).End(xlUp).Offset(1) End With
For Each tmp In Array("1", "2") With Worksheets(tmp).Range("a3:V5") .Copy dstRNG Set dstRNG = dstRNG.Offset(.Rows.Count) End With Next tmp
End Sub
(もこな2) 2019/06/13(木) 04:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.