Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
2つのプロシージャが同じ結果にならない
投稿日時: 21/03/27 23:30:18
投稿者: ぜんだまん
メールを送信

3つのブックがあり、1つ目と2つ目から3つ目の集計ブックにデータをコピペしようとプロシージャをかきましたが、1つ目のプロシージャで、事前に名古屋北店ブックと埼玉本店ブックは起動した場合は上手くいきましたが、2つ目のブックで、ファイルを自動で起動させてコピペする場合のは上手くいきません。
データの最終行は3つ目のgetmaxRowで共有することとします。
どこがおかしいのでしょうか
【使用ブック】
https://drive.google.com/drive/folders/1UgmF-fqffnvt_3A3AS8LfuZyg8V2gyEl?usp=sharing
【1つ目のプロシージャ】
 
Sub kopipe3完成() '複数book間でのコピペ
 
    
    Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook 'wb1とwb2とwb3をworkbookオブジェクトとして宣言
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet 'ws1とws2とws3をworksheetオブジェクトとして宣言
     
     
    Set wb1 = workbooks("名古屋北店8月売上.xlsm") 'wb1に名古屋北店8月売上を代入
    Set ws1 = wb1.Worksheets("sheet1") 'ws1に上記bookのsheet1を代入
    Set wb2 = workbooks("埼玉本店8月売上.xlsm")
    Set ws2 = wb2.Worksheets("sheet1") '埼玉本店
    Set wb3 = workbooks("8月売上集計.xlsm")
    Set ws3 = wb3.Worksheets("sheet1") '8月売上集計
     
 
    ws1.Activate '名古屋北店8月売上をアクティブ
 
    ws1.Range("A2").Resize(getmaxRow, 6).Copy Destination:=ws3.Range("A2") '名古屋北店8月売上のデータ部分(A2:F4)を8月売上集計にペースト
     
    ws2.Activate '埼玉本店8月売上をアクティブ
    ws2.Range("A2").Resize(getmaxRow - 1, 6).Copy '埼玉本店のA2:F7をコピー
    ws3.Activate
     
    ws3.Cells(getmaxRow + 1, 1).PasteSpecial (xlPasteAll) '8月売上集計sheet1の名古屋8月売上のデータが入っている行の下に埼玉本店のデータを貼りつける
     
    ws2.Activate
    Application.CutCopyMode = False
     
    Set ws1 = Nothing
    Set ws2 = Nothing
    Set ws3 = Nothing
 
End Sub
-----------------------------------------------------
【2つ目のプロシージャ】
Sub kopipe4()
 
    Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
     
    Set wb1 = workbooks.Open(ThisWorkbook.Path & "\名古屋北店8月売上.xlsm")
    Set ws1 = wb1.Worksheets("sheet1")
    Set wb2 = workbooks("8月売上集計.xlsm")
    Set ws2 = wb1.Worksheets("sheet1")
    Set wb3 = workbooks.Open(ThisWorkbook.Path & "\埼玉本店8月売上.xlsm")
    Set ws3 = wb3.Worksheets("sheet1")
     
    ws1.Activate
    ws1.Range("A2").Resize(getmaxRow, 6).Copy Destination:=ws2.Range("A2") '名古屋を8月売上集計へコピペ
     
    ws3.Activate
    ws3.Cells(getmaxRow - 1, 6).Copy
     
    ws2.Activate
    ws2.Cells(getmaxRow + 1, 1).PasteSpecial (xlPasteAll)
 
    ws2.Activate
    Application.CutCopyMode = False
 
    Set ws1 = Nothing
    Set ws2 = Nothing
    Set ws3 = Nothing
 
End Sub
---------------------------------------
Function getmaxRow()
 
    Dim maxRow As Long
    maxRow = Cells(Rows.Count, 1).End(xlUp).Row
    getmaxRow = maxRow
     
End Function
 

回答
投稿日時: 21/03/28 00:24:13
投稿者: simple

    Set wb2 = workbooks("8月売上集計.xlsm")
    Set ws2 = wb1.Worksheets("sheet1")
かな?
 
>ファイルを自動で起動させてコピペする場合のは上手くいきません。
それだけだと、どう上手くいかないのかわかりません。
 
こうした掲示板では、きちんと言葉にして説明することを求めるのは、
他人に伝える最低条件であること以上に、
自分が確認するための良い機会になるからです。
言葉で説明することで気づくことは案外多いのです。

投稿日時: 21/03/28 10:53:13
投稿者: ぜんだまん
メールを送信

言葉足らずで大変もうしわけありませんでした。
simple様回答ありがとうございました。
はじめ、8月売上集計ブックにはなにも貼り付けられず、名古屋北店8月売上ブックのA5セルに#REFと
入力されてましたが、simple様のご指摘を修正したところ8月売上集計のA1:F4セルに名古屋北店
の売上のデータA2:F4がペーストされるところまで修正されました。
しかし埼玉本店8月売上A2:F7がA5:F10へペーストされず、8月売上集計のA5セルに#REFとペーストされています。
記述をよくみなおしてみたら、ws3.Cells(getmaxRow - 1, 6).Copyのところの記述がおかしいことに気が付きました。ここをws3.Range("A2").Resize(getmaxRow - 1, 6).Copyにしたところすんなり同じ結果となりました
ありがとうございました。