• 締切済み

他のブックから任意のシートをコピーする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% (7991/21371)
回答No.2

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

回答No.1

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

関連するQ&A