[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『【マクロ】指定の列を軸に、空白がある列の最終行までを範囲選択してコピーする』(トイレの女神)
こんにちは(*^^*)
シート1の行「D2:G2」の最下行までをコピーしたいのですが
最下行までにいくつか空白セルがあり、
最下行まで選択することが出来ないため、
空白がないA列の最下行と同じ行まで
D2:G2の最下行まで選択し、コピーがしたいです。
(空白があるデータを使うなって話はおいといて...)
いろいろ考えてみたのですが
うまくコード化出来ず、、、
(マクロの記録も使いましたが有効な手立て見つからず)
ご教示いただけますと幸いです。。
(Cells(Rows.Count, "A").End(xlUp)を使ったり
A列最終行を変数や、Forで最終行まで調べて...とか?
となんとなくで思いつくのですが全くコードが思いつかず...
5日もかけてこれなので正直お手上げです...)
マクロ勉強中でして自分で読んで
意味が理解できるようになりたいので
可能であればインデント等
付け加えていただけると助かります。
お手数ですがお力添えください(;_;)
< 使用 Excel:Excel2013、使用 OS:Windows7 >
Sub 最終行1() Dim Lr As Long With ThisWorkbook.Sheets("Sheet1") Lr = .Range("A1").End(xlDown).Row '又は Lr = .Cells(.Rows.Count, "A").End(xlUp).Row .Range(.Range("D2"), .Cells(Lr, "G")).Copy End With End Sub
End(xlDown) が シート上で Ctrl + ↓
End(xlUp) が シート上で Ctrl + ↑
です。
データに空白がある場合は End(xlDown) は NG。 シートの下のほうにぽつんと消し忘れデータがあったりすると End(xlUp) はNGです。
また範囲選択は色々やり方がありますが、 変数を使うなら Range(始点セル , 終点セル) の書き方がわかりやすいと思います。
(TAKA) 2018/09/04(火) 10:33
ないときにエラーになるのと、2行目からってのが気になりますけど With Sheets("Sheet1") Intersect(.Range("D:G"), .UsedRange).Offset(1).Copy End With と、すればどうでしょうか? (SoulMan) 2018/09/04(火) 10:37
.Range("A1").End(xlDown).Row
A1 から Ctrl + ↓ を押して止まったセルの 行番号
.Cells(.Rows.Count, "A").End(xlUp).Row
Rows.Count は Excelの行の数(Excel2013なら1048576)です。 つまり A1048576 から Ctrl + ↑ を押して止まったセルの 行番号
という意味になります。
(TAKA) 2018/09/04(火) 10:41
(mm) 2018/09/04(火) 10:48
DからG列でどの列が最終行か分からない
ってことかなと、、、
Intersectは重なる範囲 UsedRangeは名の通り使用した範囲 つまりD:G列と使用した範囲の重なる範囲 をコピーすればいいんじゃないかと、
でも、UsedRangeは不安定なのであまりお勧めはできませんけどね(^^;
後は、Findで逆から検索するとか、
列が少ないのであれば一列づつ下からUPして最大行を取得する
とかでしょうか?
そういえば昔、苦戦したのを思い出しましたよ(笑) [[20180316060737]] (SoulMan) 2018/09/04(火) 10:54
別案なぞ。ステップ実行する事で、ロジックは理解できるかと思います。
Sub test() Dim cw As String Dim iw As Long
With Sheets("Sheet1") cw = .Range("A:A").SpecialCells(xlCellTypeConstants).Address iw = InStrRev(cw, "$") iw = Mid(cw, iw + 1) .Range("D2", .Cells(iw, "G")).Copy End With End Sub (???) 2018/09/04(火) 11:10
すみません 見逃してました^^; >空白がないA列の最下行と同じ行まで
(SoulMan) 2018/09/04(火) 11:15
>2行目からってのが気になりますけど
上記に関して、このマクロを用いて
表から表へデータを追記していくマクロを作成しております。
1行目には見出しが入るので
2行目のデータからコピーしたいと思ってました。
今回はTAKAさんに提示して頂いたコードで
続けてみようと思います!
(別のコードでWithステートメントを使用していたため親近感?が\(^o^)/)
TAKAさん
丁寧な解説ありがとうございます。
なんとなく仕組みがわかったような気がします。
頂いたコードを実行したところ、
はじめのうちは問題なく動作していたのですが
何回か使ったところ、下記部分が黄色くなり、エラーになってしまいました。
Lr = .Range("A1").End(xlDown).Row
エラーは↓
実行時エラー ‘424’: オブジェクトが必要です。
はじめの数回は問題なく動いていたのに、、、(・・?
(トイレの女神) 2018/09/04(火) 13:38
TAKAさん
コピペしてそのまま貼り付けていたので
おそらくご提示いただいたコードと差異ないかもしれませんが
念の為、、、、
Dim Lr As Long
With ThisWorkbook.Sheets("Sheet1") Lr = .Range("A1").End(xlDown).Row 'ここが黄色くなります。。 '又は Lr = .Cells(.Rows.Count, "A").End(xlUp).Row .Range(.Range("D2"), .Cells(Lr, "G")).Copy End With
mmさんので動くか試してみます!!
(トイレの女神) 2018/09/04(火) 15:34
でもなぜTAKAさんのだと動かないのでしょうか。。。
初心者ですが拝見した感じでは
問題なさそうなのに...
(トイレの女神) 2018/09/04(火) 15:41
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.