こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル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

投稿日時 - 2012-07-11 09:36:51

QNo.7583859

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

Withを使ってWorkbook2.Worksheets(1)を参照する回答は出ていますので別安です。

ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Cells(1, 1).Resize(2, 2).Value

投稿日時 - 2012-07-11 11:28:12

お礼

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

投稿日時 - 2012-07-11 19:12:47

ANo.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

投稿日時 - 2012-07-11 11:21:20

お礼

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

投稿日時 - 2012-07-11 19:14:01

ANo.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

投稿日時 - 2012-07-11 09:49:35

お礼

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

投稿日時 - 2012-07-11 19:14:50

あなたにオススメの質問