• 締切済み

エクセルVBAで他のbookのセルcellsで参照

エクセルVBAで他のbookのセルの値(一定の範囲)を参照したいのですが、変数を使いたいため、cellsを使用したいのですがうまくいきません。方法はないでしょうか。 下記に例を示します。 rangeを使用すればすべてok((2)(5))(この場合はset文を使用しなくてもok(5))。同じbookならcells使用ok(4)。 他のbookをcells文使用する方法はないでしょうか(もちろんできれば、Thisbookの方もcellsを使用したい)。 よろしくお願いします。 sub test() Dim ThisBook As Workbook Dim Workbook2 As Workbook 'マクロを実行しているワークブック Set ThisBook = ThisWorkbook '他のワークブック Set Workbook2 = Workbooks("test11.xlsx") ' 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value  '(1)だめ 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range("a1:b2").Value '(2) OK 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test11.xlsx").Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value '(3) だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test1.xlsm").Worksheets(1).Range(Cells(3, 3), Cells(4, 4)).Value  '(4)だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:ii8000").Value = Workbooks("test11.xlsx").Worksheets(1).Range("a1:ii8000").Value  '(5) ok End Sub

みんなの回答

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

Withを使ってWorkbook2.Worksheets(1)を参照する回答は出ていますので別安です。 ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Cells(1, 1).Resize(2, 2).Value

goicchan
質問者

お礼

理解できました。 ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ブック,シートを指定していないrangeやcellsは,いずれも現在のアクティブシートのそのセルと指定されます。 結果してrangeはあっちのシートなのに,中のcellsがこっちの(アクティブな)シートのように不整合していて,よく失敗します。 sub 作成例() ’たとえばこちらをアクティブにしてみると  workbook2.activate  workbook2.worksheets(1).select  with thisworkbook.worksheets(1) ’↓   ↓アクティブでないシートのrangeやcellsの指定を漏れなく行う  .range(.cells(1, 1), .cells(2,2)).value = range(cells(1,1), cells(2,2)).value  end with end sub

goicchan
質問者

お礼

ありがとうございました。 よく理解できました。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

(1)は以下の様にします。 ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range(Workbook2.Worksheets(1).Cells(1, 1), Workbook2.Worksheets(1).Cells(2, 2)).Value 長いので、Withを使い簡略化するとよいです。 With Workbook2.Worksheets(1) ThisBook.Worksheets(1).Range("A1:B2").Value = .Range(.Cells(1, 1), .Cells(2, 2)).Value End With

goicchan
質問者

お礼

すぐにお返事いただきありがとうございました。 よく理解できました。 ありがとうございました。