アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

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



ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Cells(1, 1).Resize(2, 2).Value
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/07/11 19:12

ブック,シートを指定していない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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/07/11 19:14

(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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/07/11 19:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!