• ベストアンサー

異なるブック間でのセル範囲のコピー/VBA

異なるブック間でクリップボードを経由せず直接コピーしたいため 下記のマクロを記述していますが、実行エラーが発生します。 どうしてでしょうか。 ThisWorkbook.Worksheets(3).Range(Cells(3, 1), Cells(3 + a, 1)).Value = Workbooks("excel.xls").Worksheets(1).Range(Cells(11, 3), Cells(11 + a, 3)).Value (補足) (1)VBA実行中のThisWorkbook、excel.xlsは別のブック ですが、同じフォルダにあります。 (2)aは数値が入る変数です。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

Cells(3, 1)や他のCellsが参照エラーになるためです。 ブックとワークシートを特定できないためエラーになってしまいます。 正しくは ThisWorkbook.Worksheets(3).Range(ThisWorkbook.Worksheets(3).Cells(3, 1), _ ThisWorkbook.Worksheets(3).Cells(3 + a, 1)).Value _ = Workbooks("excel.xls").Worksheets(1).Range(Workbooks("excel.xls").Worksheets(1).Cells(11, 3), _ Workbooks("excel.xls").Worksheets(1).Cells(11 + a, 3)).Value

saladman
質問者

お礼

実行エラーがなくなりました! 各Cellsのブックとシートを指定しないといけなかったのですね。 貼り付けるだけの簡単な処理なので、すぐ解決できるエラーだと思っていましたが、簡単なようで難しかったです。 ありがとうございましたm(_ _)m

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

"excel.xls"を開いていますか? >同じフォルダにあります。 という記述からすると、もしかして開かずに処理しようとしている?それは無理です。

saladman
質問者

お礼

ご回答ありがとうございます。 エクセルの「excle.xls」は開いてから処理しています。

関連するQ&A

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

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

  • Excel VBAでセル範囲のコピー、貼り付け方法

    VBA初心者です。 今、Excel VBAでセル範囲を他のBookからコピーして張り付けるマクロを記述を次のように ThisWorkbook.Worksheets(2).Range(Cells(203 + ki, 5), Cells(203 + ki, 7)) = wkd.Worksheets(3).Range("M82:082") 書くとエラーになってしまいます。 セルが範囲でなくて、1つだとうまくいくのですが、範囲にするとエラーになってしまいます。 どうしたら、解決できますか、できるだけ簡単な記述でお願いします。

  • エクセル 何故かシート間の値のコピーが出来ない

    いつもお世話になります。 開いているブックのシート「リスト1~3」に、Book1.xlsの「リスト1~3」の値をコピーする為に、下記のマクロを作成しました。 Dim SH1, SH2, SH3, SH4, SH5, SH6 As Worksheet Set SH1 = ThisWorkbook.Worksheets("リスト1") Set SH2 = ThisWorkbook.Worksheets("リスト2") Set SH3 = ThisWorkbook.Worksheets("リスト3") Set SH4 = Workbooks("Book1.xls").Worksheets("リスト1") Set SH5 = Workbooks("Book1.xls").Worksheets("リスト2") Set SH6 = Workbooks("Book1.xls").Worksheets("リスト3") 'リスト1をコピーする D = SH4.Range("A1").CurrentRegion.Rows.Count E = SH4.Range("A1").CurrentRegion.Columns.Count SH1.Range(Cells(1, 1), Cells(D, E)).Value = SH4.Range("A1").CurrentRegion.Value 'リスト2をコピーする F = SH5.Range("A1").CurrentRegion.Rows.Count G = SH5.Range("A1").CurrentRegion.Columns.Count SH2.Range(Cells(1, 1), Cells(F, G)).Value = SH5.Range("A1").CurrentRegion.Value 'リスト3をコピーする H = SH6.Range("A1").CurrentRegion.Rows.Count I = SH6.Range("A1").CurrentRegion.Columns.Count SH3.Range(Cells(1, 1), Cells(H, I)).Value = SH6.Range("A1").CurrentRegion.Value 以上を実行すると、「アプリケーション定義またはオブジェクト定義のエラーです」とエラーメッセージが出てしまいます。 それぞれのシートの処理の時に、 SH1.Select SH2.Select SH3.Select を入れて、シートを選択してから実行すると問題なく動くのですが、何故このようなことが起こるのでしょう?

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • 指定セルを別ブックへ貼り付ける作業

    1.現在、見積書.xlsの見積汎用シートで以下の内容で同じブックのデータベース貼付シートに貼り付けています。 Sub データベース貼付() GYOU = Worksheets("データベース").Range("A65536").End(xlUp).Row + 1 Worksheets("データベース").Cells(GYOU, 1).Value = Range("H13").Value Worksheets("データベース").Cells(GYOU, 2).Value = Range("C8").Value Worksheets("データベース").Cells(GYOU, 3).Value = Range("C6").Value Worksheets("データベース").Cells(GYOU, 4).Value = Range("C15").Value Worksheets("データベース").Cells(GYOU, 5).Value = Range("D15").Value Worksheets("データベース").Cells(GYOU, 6).Value = Range("E15").Value Worksheets("データベース").Cells(GYOU, 7).Value = Range("G30").Value Worksheets("データベース").Cells(GYOU, 8).Value = Range("H1").Value 2.これを見積書.xlsの見積汎用シートを別ブックのデータベース.xlsのデータシートに貼り付けたいと思います。 3.以下の内容で仮に自分で貼り付けてみようとしましたがうまくいきません。 Sub コピーしてすべて貼り付ける() Workbooks("見積書.xls").Worksheets("見積汎用").Range(D6).Copy _ Workbooks("データベース.xls").Worksheets("データ").Range(B4) End Sub どのように、別ブックに指定したセルを貼り付けできるでしょうか?いろいろとサイトを見ましたがどうもうまくできませんでした。 説明がわかりづらく申し訳ないですが、どなたか教えていただけないでしょうか? よろしくお願い致します。

  • VBAのコピー

    VBAのコピー Dim xls As New Excel.Application Dim wbk As New Excel.Workbook Dim sh3 As Worksheet Set sh3 = Worksheets("全") sh3.Activate sh3.Range("A1:Z65536").Select Selection.Clear Set wbk = xls.Workbooks.Open("\\***.***.*.***\管理\全データ抽出.xls") wbk.Worksheets("全").Activate 'ワークシートをアクティブにする wbk.Worksheets("全").Range("A1:Z65536").Copy 'コピーする 'ActiveSheet.Paste Destination:=Worksheets("全").Range("A1") '貼り付ける Worksheets("全").Range("A1").PasteSpecial Paste:=xlPasteValues wbk.Close SaveChanges:=False 'Worksheets("メイン").Cells(1, 1).Select を実行すると 『wbk.Close SaveChanges:=False』のところで クリップボードに大きな情報があります。・・・・ と言うメッセージがでて必ずとまってしまうのですが メッセージをでないようにしたいのですが 教えてください。お願いします。

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

  • VBAについてです。

    VBAについてです。 当方VBA初心者です。初歩的な質問があり投稿しました。 Workbooks("aaaa.xlsx").Worksheets("aaa").Range("A3:A50").Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") というコピーはできるのに Workbooks("aaaa.xlsx").Worksheets("aaa").Range(cells(3, 1), cells(50, 1)).Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") というコピーはどうしてできないのでしょうか? また、最下行を判別して Workbooks("aaaa.xlsx").Worksheets("aaa").Range(cells(3, 1), cells(最下行, 1)).Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") という様に簡単に処理したいのですが、やはり無理なのでしょうか? ブックが違うのですが、これをなんとかこのような処理にしたいと思っています。

  • Excel マクロ 別ブックの情報をコピーする方法

    他のブックの情報をコピーして貼り付けるマクロを作成しています。 2種類のブックから情報をコピーして貼り付けます。 Sub MailTemp() Dim myCellall As Range Dim myCellyoso As Range Dim myCellfor As Range Set myCellall = Sheets("すべて").Range("A3") With Workbooks.Open("\") With .Worksheets("すべて") .Range(.Range("A3"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellall End With .Close False End With Set myCellyoso = ThisWorkbook.Worksheets("予測").Range("A3") Set myCellfor = ThisWorkbook.Worksheets("結果").Range("A3") With Workbooks.Open("\別ブック") With .Worksheets("予測") .Range(.Range("A3"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellyoso End With With .Worksheets("結果") .Range(.Range("A3"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellfor End With .Close False End With End Sub 下記の箇所でエラーが発生して、先に進みません。 原因を調べていましたが、わかりません。 Set myCellfor = ThisWorkbook.Worksheets("結果").Range("A3") エラーメッセージ 実行時エラー'9' インデックスが有効範囲にありません。 アドバイスを頂けますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう