• 締切済み

他のブックから任意のシートをコピーするVBA

以下についてお手数ですがご教示いただけませんでしょうか。 【前提条件】  BOOK1.xlsとBOOK2.xlsが同じフォルダにあります。 【行いたいこと】  BOOK1.xlsで、  1.BOOK2.xlsを選んで、  2.BOOK2.xlsに存在するするシート名を選択させ、  3.選択したBOOK2.xlsの任意のシートをBOOK1.xlsにコピーする  

みんなの回答

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.3

ユーザーフォームを作成し、そこにリストボックスを作ってください。 下記コードを入力してください。 --------- Dim Wbm As Workbook Dim Wbs As Workbook Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Wbs.Sheets(ListBox1.Value).Copy After:=Wbm.Sheets("Sheet1") Wbs.Close Application.ScreenUpdating = True Unload UserForm1 End Sub Private Sub UserForm_Initialize() Dim Fname As String Dim Ws As Worksheet Dim Sname() As String Dim i As Long Application.ScreenUpdating = False Fname = "Book2.xls" Set Wbm = ActiveWorkbook Workbooks.Open ThisWorkbook.Path & "\" & Fname Set Wbs = ActiveWorkbook ListBox1.Clear For Each Ws In Wbs.Worksheets ListBox1.AddItem Ws.Name Next End Sub ------------- 次に標準モジュールを作成し、下記コードを入力してください。 ------------ Sub test() Load UserForm1 UserForm1.Show End Sub ---------- test()を実行するとユーザーフォームが現れて、Book2のシート名がリストボックスに表示されます。 シート名をダブルクリックすると、Book1のsheet1の後ろにコピー(シートの追加)されます。

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

フォームを使わないでも、Book1のシートのどこかに Book2のシート名の一覧を作っておき、それを選択した 状態でマクロを実行すれば、 シート名=Selection.Value これでデータを取得できますが・・・。

  • chie65535
  • ベストアンサー率43% (8518/19363)
回答No.1

「選択させる」必要があるので、ユーザーフォームを作らないと実現できません。 実際には、BOOK1.xlsのどこかに「ユーザーフォームを開くボタン」を配置し、そのボタンが押されたら、ユーザーフォームを開く前に、Book2.xlsにどんなシートがあるのか調べ、ユーザーフォーム上のコンボボックスのドロップダウンリストにシート名をセットしてから、ユーザーフォームを開く事になるでしょう。 開かれたユーザーフォームには、シートを選ぶためのコンボボックスと、キャンセルボタン、コピー実行ボタンを配置します。 ユーザーは、コンボボックスからシートを選び、キャンセルかコピー実行のボタンを押します。 キャンセルボタンが押されたら、何もしないでユーザーフォームを閉じます。 コピー実行ボタンが押されたら、コンボボックスで指定されたシートをコピーしてからユーザーフォームを閉じます。 あとは、これらの処理を、実際にVBAのコードで書くだけです。 VBAでどう書くか判らない時は「新しいマクロの記録」をすると良いでしょう。 「新しいマクロの記録」を実行して「やりたいこと」を手作業で行ってから「マクロの記録終了」をすると、手作業で行った「やりたいこと」がVBAで記録されます。 記録されたマクロのVBAを「必要なところ」にコピーペーストしていけば、VBAのプログラムが完成します。

関連するQ&A

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

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

    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を使用しております。

  • Book間でのコピー

    エクセルで以下の処理を実行するマクロを知りたいのですが。 Book1とBook2が開いています。 Book2のSheet1のA1~A10を、Book2のSheet1のA1~A10にコピーします。 この処理を任意の2つのBook間で実行するためにはどんなマクロになるでしょうか。(Book3とBook5で行ったり、Book25とBook46で行ったり等) アクティブになってないBookからアクティブになっているBookにコピーするようにしたいのですが。 宜しくお願いします。

  • 任意のブックのシートをコピー

    任意のブックのシートをコピーしたいのです。 たとえば、いつも使用するブック【AAA】があるとして、そこに後から開いたブック【BBB】のシート「あああ」をコピーしたいのです。 ここでの問題は、そのブックが常に【BBB】ではなということです。 例えはブック【CCC】のシート「あああ」であったり、ブック【DDD】のシート「あああ」であったり。 シート名は常に「あああ」なのですが、ブック名が毎回違うのです。 ブック【AAA】のマクロでなんとかできますでしょうか?

  • bookからbookへの数式のコピーについて教えてください

    bookからbookへの数式のコピーについて ??BookのSheet1のセルにSheet2を参照にした数式が入っています =2+Sheet2!$A8 これを!!BookのSheet1のセルにコピーすると =2+[Book1.xls]Sheet2!$A8 こうなりました コピーしたセルは11,475セルあります [Book1.xls]をすべて消したいのですが、簡単な方法はありますか?

  • VBA(Excel):他のブックからシートごと取込みたい

    他のブックからシートを取込む(シート名を変更して)VBAがわからないのですが、どなたか詳しい方がいましたら、ご教授下さいませ。 以下を例として、ご回答いただけると幸いです。 よろしくお願いします。 ---------------------------------- 次の3つのブックが存在するとします。 a.xls b.xls c.xls a.xlsにはシートが1つだけあり、シート名は"sheet1"です。 b.xlsにはシートが1つだけあり、シート名は"sheet1"です。 c.xlsにはシートが3つあり、シート名は"sheet1"、"sheet2"、"sheet3"です。 a.xlsにVBAマクロを作り、a.xls上で実行させて、 a.xlsの"sheet1"は残したまま、 b.xlsの"sheet1"のシート名を"sheet1-b"に変更して、 a.xlsのシートとして取込み、 同様に今度は、 a.xlsの"sheet1"、"sheet1-b"は残したまま、 c.xlsの"sheet1"のシート名を"sheet1-c"に変更し、 c.xlsの"sheet2"のシート名を"sheet2-c"に変更し、 c.xlsの"sheet3"のシート名を"sheet3-c"に変更し、 a.xlsのシートとして取込み、 最終的に、a.xlsには、 "sheet1"、"sheet1-b"、"sheet1-c"、"sheet2-c"、"sheet3-c" の、5つのシートが存在するようにしたいのです。 (各シート上のデータは、a.xlsの各シートとしてすべて移行されている) ----------------------------------

  • 複数ブックにあるシートを1つのブック束ねるマクロを汎用的に改良したい

    【質問編です。回答#1に、元コードを掲示いたいます】 以下は、1つの新規ブックに、特定フォルダにある不特定多数の ブックのSheet1を次々と束ねるマクロで、別の掲示板で教わりました。 よく使うので、大幅に汎用性をもたせたいのです。 (要望1) 束ねた際に、シート名をブック名にセットしたい。 (例:C:\temp\に、Book1.xls、Book2.xls、Book3.xls とあったら、  束ねられたシート名はBook1、Book2、Book3をシート名) (要望2)CSVやTXTを束ねる場合、8行目のxlsをcsvに書き換えなければ ならないので、ここは、その都度ダイアログで聞いて欲しい。 (規定値にxlsが入力されたInputBoxとか、XLS、CSVを選択させるラジオボタン等。) (要望3)7行目の代わりに↓のような「フォルダの参照」ダイアログを表示し、 毎回7行目を書き換えないで済むようにしたい。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_120.html その他、このような仕様ならより汎用性が高いだろうと思われるもので 多機能化いただくのはとってもうれしいです。 どうぞ、よろしくお願い致します。

  • 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のファイル操作とは違い、どのように行えば良いのか検索しても同じような部分サンプルのようなものしか無く、理解できておりません。 参考でも結構ですのでご教授いただけませんでしょうか? よろしくお願いいたします。

  • Excel VBAで他のブックを選択する方法を教えてください。

    こんにちは。VBA初心者です。 ブックを2つ開いた状態で、 マクロを保存してあるブック〔Book1〕から、 毎回ブック名が異なる[Book2]の選択されている2枚のシートを新しいブックに(仮Book3)コピーしたいのですが、どのように記述したらよいのでしょうか。(選択されるシートも毎回異なります。) 特に教えていただきたい部分は、 1.マクロが記録されているBOOK1以外のBookを操作する方法。 2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。 マクロの記録では下記の感じになります。 Sub Macro4() Windows.Arrange ArrangeStyle:=xlVertical Windows("Book2.xls").Activate Sheets(Array("Sheet3", "Sheet4")).Select Sheets("Sheet4").Activate Sheets(Array("Sheet3", "Sheet4")).Copy End Sub 宜しくお願い致します。

  • VBAでのシートコピーについて

    VBAでシートを新しいブックにコピーして、名前を付けて保存したいのですが、同じファイル名が存在すると、必ず「上書きしますか?」のダイアログが表示されてしまいます。無条件で上書きする方法ってありませんか? 今は↓のようなコードを書いてます。 Application.ScreenUpdating = False Sheets("sheet1").Copy ActiveWorkbook.SaveAs Filename:= _ "C:\Book1.xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False ActiveWindow.Close

専門家に質問してみよう