• ベストアンサー

VBからExcelのシートを操作する

 VBからExcelを操作するのですが、  たとえば、Book1のSheet1 を Book2のSheet1の後ろへ  という形でシートをコピーしたいのですがうまくいきません。    Sheet1,Sheet2を Excel.Worksheet 型で定義した変数へそれぞれ取得し、Sheet1のcopyメソッドを使って試しています。  Sheet1.copy のみだと、新たなブックへきちんとコピーされるのですが、After:= Sheet2 をつけるとエラーが起きてしまいます。  この方法で、また、他の方法でもうまくいく方法を御存知の方、何卒御教授のほどをお願いします。

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

  • ベストアンサー
  • fis
  • ベストアンサー率88% (8/9)
回答No.2

遅くなりました!! わたしが勘違いしていたようですね。 それにExcelオブジェクトの理解が浅はかだったようで、 ちょっと調べるのに時間がかかりました。 Dim EXObject As Object ''エクセルオブジェクト Dim Book2 As Excel.Workbook Dim Sheet2 As Excel.Worksheet ''EXCELオブジェクトの作成 Set EXObject = CreateObject("Excel.Application") ''EXCELのブック1を作成したオブジェクトの中に開く EXObject.Workbooks.Open "D:\book1.xls" ''EXCELのブック2を作成したオブジェクトの中に開く EXObject.Workbooks.Open "D:\book2.xls" Set Book2 = EXObject.Workbooks("book2.xls") Set Sheet2 = Book2.Sheets(1) EXObject.Workbooks("Book1.xls").Sheets("Sheet1").Copy After:=Sheet2 ''実際開いて確認 EXObject.Visible = True これでどうでしょうか。 多分エラーが出るのは、GetObject("D:\book1.xls")で開くと、 エクセルのインスタンスが別に作成されてしまうからのような気がします。(多分) これですと、一つのエクセルに、ブックを2枚開く形に なりますので、コピーが可能です。 これじゃまずいでしょうか…。 また勘違いだったらごめんなさい。

chupark
質問者

お礼

またまた回答ありがとうございます。 試行錯誤の結果、実は自己解決していました。 質問の締め切りが遅れて申し訳ありません。 まさにfisさんのご指摘どおりだと思います。 GetObject でブックを開くのではなく、Openでブックを開いておくと Copy After:=Workbook("ブック名").sheets(1)  が使え、コピーがうまくできました。 ありがとうございました。

その他の回答 (1)

  • fis
  • ベストアンサー率88% (8/9)
回答No.1

こんにちは! Sheets("Sheet1").Copy After:=Sheets(2) これでどうですか? どうやらAfterはシート名ではなく、シートの番号を指定するようですね。 Excelで困ったときは、一度Excel上で同じ状態を作り、 ツール→マクロ→新しいマクロの記録 を行い、実際にやってみるとわかりやすいです。 登録が終了したマクロは、 ツール→マクロ→Visual Basic Editor で確認できますよ^^ それでは、頑張って下さい!

chupark
質問者

お礼

 早速の回答ありがとうございます。    実は私もマクロの記録を利用してソースを読み、参考にしています。  便利ですよね。    Sheet2 を取得するときに、  dim Book2 as Excel.Workbook dim Sheet2 as Excel.WorkSheet set Book2 = GetObject("D:\book1.xls") set Sheet2 = Book2.Sheets(1) などと取得しているのですが、これで Sheet1.Copy After:=Sheet2  とやるとうまくいきませんでした。   エラーメッセージも "_WorkSheet"がどうのこうのと出ていたので、Sheet2の型か何かが悪いのだと思うのですが…。    

関連するQ&A

  • VBA ACCESSからexcel操作

    仕事でアクセスから二つのファイルを操作したいです。 アクセスのテーブルから新規excel(BOOK1)にデータを抽出し、 そのデータを既存のデータが入っているexcel(BOOK2)にコピーしたいです。 どうしてもコピーメソッドのRANGEクラスのところで「アプリケーションの定義エラー」 なってしまいます。 BOOK1のデータをBOOK2の新規シートにコピー、BOOK1とBOOK2のデータ行を 数える、のは試しやってできたので、 二つのファイル操作は出来ていて、RANGEクラスのところで既存シートにコピーする部分が 出来ていないんだと思います。 基本操作だと思いますが困っています。よろしくお願いします。

  • ブックAシートAにブックBシートBをコピーしたい

    VB.net VB.2008 にてプログラムしています。 ブックAのシートAにブックBのシートBをコピーするには、 どうしたら良いでしょうか? ブックAシートAには他のシートへの参照が入っています。 ブックBシートBの数値を入れたら、ブックA内の他シートに参照された数値が行き渡るように したいのですが、行き詰ってます。  Worksheet.Copy() だと、Before,Afterの設定になり、そのページズバリにコピーができません。 お知恵をお貸しください。 お願いします。

  • Excelマクロ(VBA)のブックとシートのコピーについて

    初めまして、宜しければVBAのブックやシートのコピー(操作)についてご教授お願いいたします。 Windows XP x64 OFFICE2003 を使用しております。 D:\Book1.elxのsheet1のシートをD:\test\Book2.elxのsheet1のシートに コピーする方法が恥ずかしながら理解できておりません。 以下が行いたい事です。 Sub ボタン1_Click() 'text1ブックを開く 'Workbooks.Open "D:\micro\test1.xls" 'ブック間のシートをコピー Workbooks("test2.xls").Worksheets("シート2").Copy _ After:=Workbooks("test1.xls").Worksheets("Sheet2") End Sub VBのファイル操作とは違い、どのように行えば良いのか検索しても同じような部分サンプルのようなものしか無く、理解できておりません。 参考でも結構ですのでご教授いただけませんでしょうか? よろしくお願いいたします。

  • 他のブックからシートをコピーする

    ExcelVBA勉強中の者です。 他のブックのsheet1をコピーし、使用中のブックのsheet1にペーストする事を目的に ネットの情報を参考に以下のコードを作成しました。 Sub test() Dim book1 As Workbook '変数book1をワークブック型で宣言 Dim book2 As Workbook '変数book2をワークブック型で宣言 Set book1 = Application.ActiveWorkbook 'アクティブになっているブックをbook1へセット Application.ScreenUpdating = False '画面の更新を止める '↓アドレスのブックを開く事までbook2にセット(ReadOnly:=Trueで読み込み専用) Set book2 = Application.Workbooks.Open("C:\Documents and Settings\AAA\デスクトップ\他のブック.xls", ReadOnly:=True) book2.Sheets("Sheet1").Copy after:=book1.Worksheets("sheet1") Set book1 = Nothing '変数book1を開放 book2.Close SaveChanges:=False 'book2を閉じる(SaveChanges:=Falseで保存せずに終了) Application.ScreenUpdating = True '画面の更新を再開する Set book2 = Nothing '変数book2を開放 End Sub 動作としては上手くいったのですが、 book2.Sheets("Sheet1").Copy after:=book1.Worksheets("sheet1") の部分でペースト先を変数book1のsheet1と指定しているにも関わらず sheet1(2)という新しいシートが作成され、そちらへペーストしてしまいます。 思うに「コピーしたシートを挿入する」という動作であると思われますが、 これをペーストするという表記が出来ず困っております。 お手数お掛けしますがどなたかご助力お願い致します。 *Excelのバージョンは2002を使用しております。

  • VBで既存エクセルシートを新規ブックにコピー

    VB6,Excel2003です。 既存のエクセルシートを新規ブックにコピーする プログラムを作成してみましたが タスクバーに新規ブックのタスクバーボタンが2つできてしまいます。 どこが原因か教えてください。よろしくお願いします。 Private Sub Command1_Click() Dim xlsApp As Excel.Application Dim xlsBookTemp As Excel.Workbook 'コピー元ブック Dim xlsBookCopy As Excel.Workbook 'コピー先ブック Dim xlsSheetTemp As Excel.Worksheet 'コピー元シート Dim xlsSheetCopy As Excel.Worksheet 'コピー先シート Set xlsApp = CreateObject("Excel.Application") Set xlsBookTemp = xlsApp.Workbooks.Open("C:\Temp.xls") Set xlsSheetTemp = xlsBookTemp.Sheets(1) Set xlsBookCopy = xlsApp.Workbooks.Add Set xlsSheetCopy = xlsBookCopy.Sheets(1) xlsApp.Visible = True 'コピー元のSheet1を新規ブックにコピーする xlsSheetTemp.Copy Before:=xlsSheetCopy 'コピー元のブックは閉じる xlsBookTemp.Close '///新規ブックの編集処理/// Set xlsSheetTemp = Nothing Set xlsBookTemp = Nothing Set xlsSheetCopy = Nothing Set xlsBookCopy = Nothing Set xlsApp = Nothing End Sub

  • VBでEXCELのシートのコピーに関して

    同一Book内で、シートのコピーをしようと考えて、幾つかのHPを参考に、以下のような 記述をしました。 その際に、以下の記述をした場合、本来はコピー先のシート名を変更したいにも関わらず、コピー 元のシート名が変わってしまいます。 追加したシートの名前を変更させるには、どのような書き方にすれば良いでしょうか? 自分で記述しておきながら、どのように対応したら良いかわからず。。。 また、以下のような記述をした場合、追加したセル側のシートを操作したいにも関わらず、 コピー元のシートを書き換えてしまいます。 追加したシートのセルを操作したい(値を入力)ような場合は、どのような記述を すれば良いでしょうか。。。 ご教授頂ければと思います。 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\test.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) '確認のためExcelのウィンドウを表示する xlApp.Visible = True Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) Dim xlSheet2 As Excel.Worksheet = xlBook.Worksheets(1) 'シートのコピー xlSheet.Copy(After:=xlSheet2) 'シートに名前を付ける xlSheet.Name = "TEST" Dim xlRange As Excel.Range 'データの入力セル範囲 xlRange = xlSheet.Range("A1:A1") 'セルへデータの入力 xlRange.Value = “AABBCC”

  • エクセルに関する質問です。

    エクセルに関する質問です。 マクロである原本となるシートをどんどんコピーしてシートを追加していったのでですが、「実行時エラー 1004 worksheetクラスのcopyメソッドが失敗しました」の表示がでてコピーできなくなりました。最大枚数の256枚にも達しておらず、マクロではない通常の操作でもシートの追加が不可能になりました。解決方法はあるでしょうか。エクセル2000です。

  • Excel VBA 非表示の別ブックへシートコピー

    Excel2010のVBAで、別のExcelブックを非表示で開いて、 シートをコピーすると、 「実行時エラー'1004':WorksheetクラスのCopyメソッドが失敗しました。」 というエラーが出て、正しくシートをコピーすることができません。 (1)のように自分のブックへはシートをコピーすることはできるのですが、 (2)のように別のExcelブック上でシートをコピーする場合と (3)のように別のExcelブック上にシートをコピーする場合の いずれも同様のエラーになります。 どのように記述すれば(2)と(3)でもコピーすることができるのでしょうか。 ------------------------------------------------------------- Sub test()  Dim newEx As Excel.Workbook  Dim newFile As String  newFile = ThisWorkbook.Path & "\New_Book.xlsx"  Set newEx = Workbooks.Open(newFile, UpdateLinks:=0)  Application.Windows("New_Book.xlsx").Visible = False  '(1)New_BookのSheet3を自分のブックにコピーする (正常)  newEx.Worksheets("Sheet3").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  '(2)New_BookのSheet3をNew_Bookにコピーする (エラー)  newEx.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  '(3)自分のブックのSheet3をNew_Bookにコピーする (エラー)  ThisWorkbook.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  Application.Windows("New_Book.xlsx").Visible = True  Application.DisplayAlerts = False  newEx.Save  newEx.Close  Application.DisplayAlerts = True  Set newEx = Nothing End Sub -------------------------------------------------------------

  • VB2005でExcelのシートをコピー

    VB2005Expressで開発をしています。 Excelのシートをコピーして同じbookに追加をしたいと思っています。 下記でまずExcelを使用できるようにして  Dim xlApp As New Excel.Application  Dim xlBooks As Excel.Workbooks = xlApp.Workbooks  Dim xlBook As Excel.Workbook = xlBooks.Add '新規のファイルを開く  Dim xlSheets As Excel.Sheets = xlBook.Worksheets  Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)  xlApp.Visible = True 下記で追加できると思うのですが、()内にセットするパラメータが わかりません・・・  xlBook.Worksheets.Copy() どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub