- ベストアンサー
Excel VBAで移動するセルを範囲指定したい
VBA初心者です。よろしくお願いします。 外部データの取入れで取得したデータを必要なだけコピーして使いたいのですが、毎回データの量が増えてきます。増えても増えた分だけ増やしていける方法はありませんか? データの最後から100個分だけ範囲指定してコピーしたいのです。 それと外部データを取り込んだときにマクロを実行したいのですがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
データの最終行を取得する方法ですが Range("A65536").End(xlUp) で可能です。 以下は、 'データの最終の行の1列目から、5行下の5列目までをコピィ GYOU = Range("A65536").End(xlUp).Row Range(Cells(GYOU, 1), Cells(GYOU - 5, 5)).Copy 'Sheet2の最終行より1行上から貼り付けです。 参考にして下さい。 Sheets("Sheet2").Select Range("B65536").End(xlUp).Offset(1,0).Select ActiveSheet.Paste
その他の回答 (2)
- hallo-2007
- ベストアンサー率41% (888/2115)
No1です。 GYOU = Range("A65536").End(xlUp).Row の説明しておきます Range("A65536") はエクセルで使用できるシートの最大行数 End(xlUp) は、最大行から上方向へ移動でして空白で無い行へ Row は、その行番号です。 質問に、データの最後の行からとありますので、必要では。 コマンドの意味を理解してみてください。 貼り付ける側でも、使用すると思います。
お礼
不幸があり遠方へ出かけておりました。遅くなりましたが ありがとうございました。 プログラムを理解することが出来ました。 おかげさまで便利に使うことが出来ますた。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 データの最後から100個分という意味が良く分からないです。100行分ということではないのでしょうか? >外部データを取り込んだときにマクロを実行したい というのは、Excelが外部に抜けるので、マクロが待機状態にはなったとしても、その時にイベントが働かないので、無理というか、そういうマクロをわざわざ考える人はいないと思います。外部データ自体の取り込むマクロを考えるのが自然だと思います。 >取得するsheets名を指定しなければいけないのでしょうか? マクロが標準モジュールにある限りは、必要ないとは思います。 以下は、100行の場合 例: Sub Test1() Dim r1 As Range Dim r2 As Range Dim r As Range Set r1 = Range("A65536").End(xlUp) Set r2 = r1.End(xlUp) If r1.Row - r2.Row = 0 Then MsgBox "データがありません。", 48 Exit Sub ElseIf r1.Row - r2.Row < 100 Then Set r = Intersect(ActiveSheet.UsedRange, Range(r1, r2).EntireRow) r.Select 'r.Copy Worksheets("Sheet2").Range("A65336").End(xlUp).Offset(1) Else Set r = Intersect(ActiveSheet.UsedRange, Range(r1, r1.Offset(-100)).EntireRow) r.Select 'r.Copy Worksheets("Sheet2").Range("A65336").End(xlUp).Offset(1) End If End Sub
お礼
判りやすく、ありがとうございました。
お礼
ごめんなさい。 回答への補足を書きましたが、今、欲しいデータ数に書き換えて、やってみましたら、きちんとできましたありがとうございました。 Range("A65536").End(xlUp)これはいらなかったのですね。 助かりました!!!
補足
ありがとうございます。 貼り付けて実行しました。.Endでコンパイルエラーになります。 取得するsheets名を指定しなければいけないのでしょうか?