[[20200510052705]] 『Range(左上のセル,右下のセル)でセル範囲を特定』(ヨッシー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Range(左上のセル,右下のセル)でセル範囲を特定』(ヨッシー)

「基礎名簿」から必要なデータを「名簿」に取り出すために次のコードを作成しました。きちんと、実行されました。
("D4:D29")や("B2:B27")をどんなデータの量にも対応できるように、
Range(左上のセル,右下のセル)の考え方で作り直したのですが、1行目でデバックしてしまいます。考え方が間違っているのでしょうか?

Sub Macro1() '氏名・性別・生年月日・住所貼付け

With Sheets("基礎名簿")

    .Range("D4:D29").Copy Sheets("名簿").Range("B2:B27")
    .Range("E4:E29").Copy Sheets("名簿").Range("D2:D27")
    .Range("L4:L29").Copy Sheets("名簿").Range("E2:E27")
    .Range("G4:G29").Copy Sheets("名簿").Range("F2:F27")
    .Range("I4:I29").Copy Sheets("名簿").Range("K2:K27")
    .Range("J4:J29").Copy Sheets("名簿").Range("L2:L27")

    End With

End Sub

下が作り直したコードです。改行されていますが、6つのコードです。

Sub Macro1() '氏名・性別・生年月日・住所貼付け

    Sheets("基礎名簿").Range(Range("D4"), Range("D4").End(xlDown)).Copy Sheets("名簿").Range("B2")
    Sheets("基礎名簿").Range(Range("E4"), Range("E4").End(xlDown)).Copy Sheets("名簿").Range("D2")
    Sheets("基礎名簿").Range(Range("L4"), Range("L4").End(xlDown)).Copy Sheets("名簿").Range("E2")
    Sheets("基礎名簿").Range(Range("G4"), Range("G4").End(xlDown)).Copy Sheets("名簿").Range("F2")
    Sheets("基礎名簿").Range(Range("I4"), Range("I4").End(xlDown)).Copy Sheets("名簿").Range("K2")
    Sheets("基礎名簿").Range(Range("J4"), Range("J4").End(xlDown)).Copy Sheets("名簿").Range("L2")

End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 >Sheets("基礎名簿").Range(Range("D4"), Range("D4").End(xlDown)).Copy Sheets("名簿").Range("B2")
          ↓
 Sheets("基礎名簿").Range(Sheets("基礎名簿").Range("D4"), Sheets("基礎名簿").Range("D4").End(xlDown)).Copy Sheets("名簿").Range("B2")

 若しくは

    With Sheets("基礎名簿")
        .Range("D4", .Range("D4").End(xlDown)).Copy Sheets("名簿").Range("B2")
        .Range("E4", .Range("E4").End(xlDown)).Copy Sheets("名簿").Range("D2")
        .Range("L4", .Range("L4").End(xlDown)).Copy Sheets("名簿").Range("E2")
        .Range("G4", .Range("G4").End(xlDown)).Copy Sheets("名簿").Range("F2")
        .Range("I4", .Range("I4").End(xlDown)).Copy Sheets("名簿").Range("K2")
        .Range("J4", .Range("J4").End(xlDown)).Copy Sheets("名簿").Range("L2")
    End With

 若しくは "基礎名簿" をアクティブにしてシートの参照を要らなくし

    Sheets("基礎名簿").Activate
    Range("D4", Range("D4").End(xlDown)).Copy Sheets("名簿").Range("B2")
    Range("E4", Range("E4").End(xlDown)).Copy Sheets("名簿").Range("D2")
    Range("L4", Range("L4").End(xlDown)).Copy Sheets("名簿").Range("E2")
    Range("G4", Range("G4").End(xlDown)).Copy Sheets("名簿").Range("F2")
    Range("I4", Range("I4").End(xlDown)).Copy Sheets("名簿").Range("K2")
    Range("J4", Range("J4").End(xlDown)).Copy Sheets("名簿").Range("L2")

(ピンク) 2020/05/10(日) 06:17


ピンクさんありがとうございます。

 With Sheets("基礎名簿")
        .Range("D4", .Range("D4").End(xlDown)).Copy Sheets("名簿").Range("B2")
        .Range("E4", .Range("E4").End(xlDown)).Copy Sheets("名簿").Range("D2")
        .Range("L4", .Range("L4").End(xlDown)).Copy Sheets("名簿").Range("E2")
        .Range("G4", .Range("G4").End(xlDown)).Copy Sheets("名簿").Range("F2")
        .Range("I4", .Range("I4").End(xlDown)).Copy Sheets("名簿").Range("K2")
        .Range("J4", .Range("J4").End(xlDown)).Copy Sheets("名簿").Range("L2")
    End With

のコードでデータが反映されました。
I列やJ列のデータの並びに空白セルがあるときは、xldownをxlupにしてみたのですが、うまくいきませんでした。どのように変えればいいのでしょうか。
(ヨッシー) 2020/05/10(日) 08:19


 >どのように変えればいいのでしょうか。

 一番下のセルから上に

 With Sheets("基礎名簿")
    .Range("D4", .Range("D" & Rows.Count).End(xlUp)).Copy Sheets("名簿").Range("B2")
    .Range("E4", .Range("E" & Rows.Count).End(xlUp)).Copy Sheets("名簿").Range("D2")
    .Range("L4", .Range("L" & Rows.Count).End(xlUp)).Copy Sheets("名簿").Range("E2")
    .Range("G4", .Range("G" & Rows.Count).End(xlUp)).Copy Sheets("名簿").Range("F2")
    .Range("I4", .Range("I" & Rows.Count).End(xlUp)).Copy Sheets("名簿").Range("K2")
    .Range("J4", .Range("J" & Rows.Count).End(xlUp)).Copy Sheets("名簿").Range("L2")
 End With

(ピンク) 2020/05/10(日) 09:12


ピンクさんありがとうございました。すべて解決しました。
Copyの前のコードの書き方が勉強になりました。
(ヨッシー) 2020/05/10(日) 10:30

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.