[[20210909162052]] 『範囲指定方法について』(kouji) ページの最後に飛ぶ

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

 

『範囲指定方法について』(kouji)

はじめまして、よろしくお願いします。
BOOK間コピーについて教えてください
以下のようなマクロを利用しようとしていますが、1つ分からないヵ所があり質問です
wbMoto.Worksheets("集計").Range("O1:P" & Cells(Rows.Count, "P").End(xlDown).Row).copy
上記の End(xlDown)を End(xlUp) にすると 1行目しか貼り付けできません
End(xlDown)ならコピーできます
範囲指定の仕方が、良くないのでしょうか?
マクロ初心者なのでアドバイスお願いします。

Sub ハリツケ()

    Dim SetFile As String		
    Dim wbMoto, wbSaki As Workbook		

    Set wbMoto = ActiveWorkbook		

    Application.DisplayAlerts = False		
    SetFile = "D:\office\帳票2021.xlsm"  'マスターデータファイルの取り込み場所をセット(取り込み先)		

    Workbooks.Open fileName:=SetFile 'マスターデータファイルを開きます()		
    Set wbSaki = Workbooks.Open(SetFile) '開いたマスターブック名とセット(取り込み先)		

     wbMoto.Worksheets("集計").Range("O1:P" & Cells(Rows.Count, "P").End(xlDown).Row).copy		
  wbSaki.Worksheets("概要").Range("T1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _		
        :=False, Transpose:=False '取り込み元 シート名「概要」T1から貼り付け		

        Application.CutCopyMode = False  'コピー切り取りを解除		
    Application.DisplayAlerts = True		
End Sub		

コピー元データ

	O列	P列
1	○○	空白
2	○□	500
3	△△	200
4	△□	150
5	○×	20
6	×○	100
7	□△	
	以下可変	

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


 Cells(Rows.Count, "P").End(xlDown).Row
 ↑の対象となるシートは?
 Workbooks.Open fileName:=SetFile 	
 Set wbSaki = Workbooks.Open(SetFile)
 同じBookを開くの?
(どん) 2021/09/09(木) 16:52

(どん)さん
ありがとうございます。以下は不要みたいです。
Workbooks.Open fileName:=SetFile
(kouji) 2021/09/09(木) 17:15

 >↑の対象となるシートは?
の回答が有りませんが
Cells(Rows.Count, "P").End(xlDown).Row
の値を調べて下さい
複数のBookやシートを処理する場合対象となる
Bookやシートを明確にする必要が有ります
(どん) 2021/09/09(木) 17:21

Range("O1:P" & Cells(Rows.Count, "P").End(xlDown).Row)
P1048576からEndキー下矢印キーを押したセル(1048576行が最後なので変わらずP1048576)からO1までの範囲
Range("O1:P" & Cells(Rows.Count, "P").End(xlUP).Row)
P1048576からEndキー上矢印キーを押したセル(通常はP列入力済みセルの一番最後の行のセル)からO1までの範囲

(砂糖) 2021/09/09(木) 17:26


1つ目

.End(xlDown) は、Ctrlキー+↓キー の操作のこと
.End(xlUp) は、Ctrlキー+↑キー の操作のこと

なので手動でやってみてどうなるか確認してみてください。
なんなら、マクロの記録で、
その操作がどんなコードで表せられるか確認。

2つ目

wbMoto.Worksheets("集計").Range("O1:P" & Cells(Rows.Count, "P").End(xlDown).Row).copy

↑この行にブレークポイントを設定した後に、
マクロを実行。
マクロが止まったところで、
イミディエイトウィンドウに
Cells(Rows.Count, "P").End(xlDown).Addoress(,,,true)[Enter]
([Enter]はエンターキー押下の意)
とやってみるとなにが返ってくるか確認。
続いて同じく
Cells(Rows.Count, "P").End(xlUp).Addoress(,,,true)[Enter]
とやってみてなにが返ってくるか確認。

3つ目

Sub test()

    Dim wbkFrom As Workbook, wbkTo As Workbook
    Dim rngFrom As Range, rngTo As Range
    Const csPath As String = "D:\office\帳票2021.xlsm"

    Set wbkFrom = ThisWorkbook
    Set wbkTo = Workbooks.Open(csPath)
    With wbkFrom.Worksheets("集計")
        Set rngFrom = .Range(.Range("O1"), .Cells(.Rows.Count, "P").End(xlUp))
    End With

    MsgBox rngFrom.Address(, , , True)  '意図したセル範囲か確認用。本番では削除

    Set rngTo = wbkTo.Worksheets("概要").Range("T1")

    rngFrom.Copy
    rngTo.PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False
End Sub

このコードだと動作がどうなるか確認。
期待の結果が得られるなら、ご自分のコードと違いを確認。
期待の結果と違う結果になるならばどうなるか、教えてください。

注)
まさか、書いてないけど、行が非表示になってるとかありますか?

(まっつわん) 2021/09/09(木) 17:30


参考URL>>

http://www.ken3.org/vba/excel-help.html
(まっつわん) 2021/09/09(木) 17:31


(どん)さん
>Bookやシートを明確にする必要が有ります
了解しました。

(砂糖)さん
ありがとうございます。
>P1048576からEndキー上矢印キーを押したセル(通常はP列入力済みセルの一番最後の行のセ>ル)からO1までの範囲
私もそのように思いCells(Rows.Count, "P").End(xlUp).Row).copy としたのですが
貼付がうまくできませんでした?何が違うのか・・・

(まっつわん)さん
ありがとうございます。
Sub test() マクロで完璧です
自分のと比較してみます、おかしいな?未熟ですね
(kouji) 2021/09/09(木) 17:45


 >何が違うのか・・・
Cells(Rows.Count, "P").End(xlUp).Row
↑は帳票2021.xlsmのアクティブシートが対象
(まっつわん)さんのは
 .Cells(.Rows.Count, "P").End(xlUp)
先頭に.が有るので
wbkFrom.Worksheets("集計")
が対象です
(どん) 2021/09/09(木) 18:21

(どん)さん
なるほど.ですか
ありがとうございました。
(kouji) 2021/09/10(金) 13:40

コメント返信:

[ 一覧(最新更新順) ]


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