[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA A4から始まる表のデータをコピー』(みー)
初歩的かもです、すみません。
A4から始まる表のデータをコピーしたいのですが、
マクロの記録でやると、
Sub Macro1()
'
' Macro1 Macro
'
'
Range("A4:BF369").Select Selection.Copy End Sub
となるのですが、これだと表があとから追加された場合でも、369までのデータをコピーするという意味だと思うんです。
どうすればあとから追加されたデータも、もれなくコピーできるのでしょうか?
すみません、よろしくお願いします。
< 使用 Excel:Office365、使用 OS:Windows10 >
質問とは関係ないですが、VBAの世界では基本的にシートやセルなど(オブジェクトといいます)を明示すれば、いちいち選択したりアクティブにしたりする必要はありません。
したがって、提示のコードは
Sub 実験 Range("A4:BF369").Copy End Sub
という感じでも同じことになります。
また、セル範囲を表すには、【1つの文字列】で表すほかに、↓のように【2つ】のセルで表すことも可能です。
Range(Range("A4"),Range("BF369")).Copy
さらに、↑のように【2つ】のセルで表現する場合、中のRangeは↓のように省略することも可能です。
Range("A4","BF369").Copy Range("A4",Range("BF369")).Copy
これを踏まえて、質問の「あとから追加されたデータ」について、例えば"A4"〜BF列の最終行と考えて見た場合
Sub 実験01() Range("A4", Cells(Rows.Count, "BF").End(xlUp)).Copy End Sub
みたいな方法もあるのではないかとおもいます。
このほか、BF列は歯抜けがあって最終行を調べるのに使えないということであれば、歯抜けのない別の行の最終行をしらべて使うというのも手ですね。
Sub 実験02() Dim 最終行 As Long
最終行 = Cells(Rows.Count, "B").End(xlUp).Row Range("A4:BF" & 最終行).Copy End Sub
したがって、まずはどの列をみれば「あとから追加されたデータ」も含むことになるのか考えてみてはいかがでしょうか?
(もこな2) 2020/05/05(火) 16:00
教えてもらったワードを検索してトライアンドエラーで動きました♪
Selection.Cells(4, 1).CurrentRegion.Copy
ただ・・・解決したのにちょっと疑問が・・・(笑)
表よりも上の行か表の中を選択しているときは動くんですけど、表よりも下を選択しているときは動かないんですよねー・・・なんでだろ?
Cells(4, 1)って、一番左上のセルA1から数えて下に4、右に1って事だからA4と同じって事ですよね?
調べたネットの記事をそのまま載せると
「一番左上のセルを始点として、下へ2つ、右へ3つ進むという指示がCells(2, 3)と考えるとわかりやすいでしょう。」
って書いてあったから間違ってないと思うんだけどなぁ・・・
(みー) 2020/05/05(火) 16:11
もこな2さん、詳しくありがとう!^^
じっくり読んでみます♪
(みー) 2020/05/05(火) 16:14
>Selection.Cells(4, 1).CurrentRegion
日本語にすると、選択したセルを1として、下に4つ右に1つの セル(単に3つ下のセル)を基準としたCurrentRegion。 A4固定なら、Cells(4, 1).CurrentRegion
CurrentRegion 表内の1つのセルを選択して、Ctrl + * を押した時の範囲。 (BJ) 2020/05/05(火) 16:27
BJさん、ありがとう!^^
解決!(笑)
(みー) 2020/05/05(火) 17:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.