[[20210122143920]] 『データの最終行までコピー』(Help) >>BOT

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『データの最終行までコピー』(Help)

以下の最終行で、C列の最終行までコピーしたいのですが
どうしてもC1のみしかコピーされません。

初歩的な質問で申し訳ないのですが、教えていただけると助かります。
既に数時間格闘しています…

Sub update()

    Dim SetFile As String
    Dim wbMoto, wbSaki As Workbook

    'マスターデータ取り込み元をブック名をセット(取り込み元)
    Set wbMoto = ActiveWorkbook
    Application.DisplayAlerts = False
    'マスターデータファイルの取り込み場所をセット(取り込み先)
    SetFile = "●●●●.xls"
    'マスターデータファイルを読み取り専用で開く
    Workbooks.Open Filename:=SetFile, ReadOnly:=True, UpdateLinks:=0
    '開いたマスターブック名をセット(取り込み先)
    Set wbSaki = Workbooks.Open(SetFile)

        '取り込み先のシート名の「Sheet1」のC列をコピー
        wbSaki.Worksheets("Sheet1").Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row).Copy

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


 >wbSaki.Worksheets("Sheet1").Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row).Copy

 ↑を、↓でどうでしょうか?外してたらすみません(^^;

 wbSaki.Worksheets("Sheet1").Range("C1:C" & wbSaki.Worksheets("Sheet1").Cells(Rows.Count, "C").End(xlUp).Row).Copy

(虎) 2021/01/22(金) 15:05


虎様

アプリケーション定義またはオブジェクト定義のエラーと出てしまいました。
検証がしにくい質問で大変恐縮です。
(Help) 2021/01/22(金) 15:09


 いえいえ、こちらこそ、あてずっぽうで回答してしまってすみません…。
 少し考えてみますが、その間にどなたかから適切な回答がつくと思われます(^^)
(虎) 2021/01/22(金) 15:15

ぱっと見、正常に動きそうですけどねぇ・・・・↓を実行した場合、イミディエイトにはなんと出力されますか?
    Sub 実験用()
        Dim wbMoto As Workbook, wbSaki As Workbook  '←修正しました
        Dim tmpRNG As Range

        Set wbMoto = ActiveWorkbook
        Set wbSaki = Workbooks.Open(Filename:="●●●●.xls", ReadOnly:=True, UpdateLinks:=0)

        With wbSaki.Worksheets("Sheet1")
            Set tmpRNG = .Range("C1", .Cells(.Rows.Count, "C").End(xlUp))
        End With

        Debug.Print tmpRNG.Address(External:=True)
    End Sub

(もこな2) 2021/01/22(金) 15:28


もこな2様

イミディエイトウィンドウには以下が表示されました
[●●●.XLS]Sheet1!$C$1:$C$179

範囲的には正しいです
(Help) 2021/01/22(金) 15:35


うーん。正常に取得されているとなると、ますます謎ですね。

ちなみに貼り付けるほうはどうしてるのですか?
そのまま、貼り付けてよいなら↓みたいな感じになろうかとおもいますが・・・

    Sub 実験用02()
        Dim wbMoto As Workbook, wbSaki As Workbook 
        Dim tmpRNG As Range

        Set wbMoto = ActiveWorkbook
        Set wbSaki = Workbooks.Open(Filename:="●●●●.xls", ReadOnly:=True, UpdateLinks:=0)

        With wbSaki.Worksheets("Sheet1")
            .Range("C1", .Cells(.Rows.Count, "C").End(xlUp)).Copy wbMoto.Worksheets(1).Range("A1")
        End With
    End Sub

元と先が逆のような気がしますが、そこはあっているんですよね?

(もこな2) 2021/01/22(金) 15:48


言われてみれば元と先が逆ですね…ややこしくしてしまって申し訳ないです。
一応あってます。

また、ご提示いただいたコードで無事求めていた動作ができました。

その他細かい部分も学ぶところが多くあったので本当に良かったです。
ありがとうございました!

また相談させてくださいm(__)m
(Help) 2021/01/22(金) 15:58


解決したならよかったです。一応気づきの点で2点ほど。

■1
直しちゃいましたが、↓のように書くと、型指定は最後のものしか対象になりません。(他はVariant型になります)

 Dim wbMoto, wbSaki As Workbook

なので、↓のようにそれぞれで型を指定したほうがよいです

 Dim wbMoto As Workbook, wbSaki As Workbook 

■2

 Workbooks.Open Filename:=SetFile, ReadOnly:=True, UpdateLinks:=0
 Set wbSaki = Workbooks.Open(SetFile)

↑だと同じブック2回開いちゃってます。

(もこな2) 2021/01/22(金) 16:26


すみません、追加で。
原因についてですが、もしかしてブックを開いたときにSheet1【以外】がアクティブになってませんでしたか?

標準モジュールでシートを省略した場合、↓のように解釈されるので

 ActiveSheet.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row

もしかしたら、↓みたいになっていたのではないでしょうか?

 wbSaki.Worksheets("Sheet1").Range("C1:C" & 1).Copy

(もこな2) 2021/01/22(金) 16:34


もこな2様

色々とありがとうございます。
完全に独学なので、アドバイスをいただけてうれしいです!
本当に勉強になりました!

原因についてですが、開くブックはSheet1しか存在しないです。
ただ、C1しかコピーされていなかったので、恐らく原因は近しい所にあるのかなと思います。
自分も考えてみます。

今回は本当にありがとうございました!

(Help) 2021/01/22(金) 17:08


コメント返信:

[ 一覧(最新更新順) ]


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