- 締切済み
他のブックから任意のシートをコピーするVBA
以下についてお手数ですがご教示いただけませんでしょうか。 【前提条件】 BOOK1.xlsとBOOK2.xlsが同じフォルダにあります。 【行いたいこと】 BOOK1.xlsで、 1.BOOK2.xlsを選んで、 2.BOOK2.xlsに存在するするシート名を選択させ、 3.選択したBOOK2.xlsの任意のシートをBOOK1.xlsにコピーする
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- MSZ006
- ベストアンサー率38% (390/1011)
ユーザーフォームを作成し、そこにリストボックスを作ってください。 下記コードを入力してください。 --------- 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/21373)
フォームを使わないでも、Book1のシートのどこかに Book2のシート名の一覧を作っておき、それを選択した 状態でマクロを実行すれば、 シート名=Selection.Value これでデータを取得できますが・・・。
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
「選択させる」必要があるので、ユーザーフォームを作らないと実現できません。 実際には、BOOK1.xlsのどこかに「ユーザーフォームを開くボタン」を配置し、そのボタンが押されたら、ユーザーフォームを開く前に、Book2.xlsにどんなシートがあるのか調べ、ユーザーフォーム上のコンボボックスのドロップダウンリストにシート名をセットしてから、ユーザーフォームを開く事になるでしょう。 開かれたユーザーフォームには、シートを選ぶためのコンボボックスと、キャンセルボタン、コピー実行ボタンを配置します。 ユーザーは、コンボボックスからシートを選び、キャンセルかコピー実行のボタンを押します。 キャンセルボタンが押されたら、何もしないでユーザーフォームを閉じます。 コピー実行ボタンが押されたら、コンボボックスで指定されたシートをコピーしてからユーザーフォームを閉じます。 あとは、これらの処理を、実際にVBAのコードで書くだけです。 VBAでどう書くか判らない時は「新しいマクロの記録」をすると良いでしょう。 「新しいマクロの記録」を実行して「やりたいこと」を手作業で行ってから「マクロの記録終了」をすると、手作業で行った「やりたいこと」がVBAで記録されます。 記録されたマクロのVBAを「必要なところ」にコピーペーストしていけば、VBAのプログラムが完成します。