多くのワークブックのワークシートを組み合わせる(Microsoft Excel)
Davidには、それぞれにいくつかのワークシートがあるいくつかのワークブックがあります。彼は、これらの各ワークブックから特定のワークシート(1つだけ)を新しいワークブックに結合したいと考えています。彼は、シートの移動またはコピーを使用してこれを手動で行う方法を知っていますが、特にこの方法で「組み合わせる」必要のあるワークブックが多数ある可能性があるため、より自動的に行う方法を望んでいます。
この問題に取り組むにはいくつかの異なる方法があり、それらはすべてマクロの使用を伴います。 (これは当然のことです。マクロは、面倒な手動タスクをすばやく実行できるように設計されています。)
次のマクロは設計が単純です。現在開いているすべてのワークブックをループし、各ワークブック(マクロを含むワークブックを除く)について、そのワークブックからコードを含むワークブックに「Sheet1」という名前のシートをコピーします。
Sub CopySheets1() Dim wkb As Workbook Dim sWksName As String sWksName = "Sheet1" For Each wkb In Workbooks If wkb.Name <> ThisWorkbook.Name Then wkb.Worksheets(sWksName).Copy _ Before:=ThisWorkbook.Sheets(1) End If Next Set wkb = Nothing End Sub
マクロでSheet1とは異なるワークシートを取得する場合は、必要なワークシート名を反映するようにsWksName変数の値を変更するだけです。ワークシートの名前がわからないが、コピーするワークシートが常に各ワークブックの2番目のワークシートになることがわかっている場合は、マクロで次のバリエーションを使用できます。
Sub CopySheets2() Dim wkb As Workbook Dim sWksName As String For Each wkb In Workbooks If wkb.Name <> ThisWorkbook.Name Then wkb.Worksheets(2).Copy _ Before:=ThisWorkbook.Sheets(1) End If Next Set wkb = Nothing End Sub
おそらく、これまでのアプローチの最大の欠点は、すべてのワークブックを開く必要があることです。これは常に実行可能であるとは限りません。たとえば、フォルダに100の異なるワークブックを含めることができ、それぞれからワークシートを組み合わせる必要があります。 100冊のワークブックを開くことは、技術的には可能ですが、ほとんどの人にとっておそらく実用的ではありません。その場合、別のアプローチを取る必要があります。
次のマクロCombineSheetsは、本質的にインタラクティブです。いくつかの情報を要求し、応答に基づいてワークシートをワークブックに追加します。最初にワークシートへのパス(末尾のスラッシュは含めない)を要求し、次にワークブックに使用するパターンを要求します。通常のアスタリスク()および疑問符(?)のワイルドカードを使用して、ブックのパターンを指定できます。たとえば、のパターンはすべてのワークブックに一致しますが、Budget20のパターンは??
最初に「Budget20」があり、その後に任意の2文字が含まれるワークブックのみが返されます。
Sub CombineSheets() Dim sPath As String Dim sFname As String Dim wBk As Workbook Dim wSht As Variant Application.EnableEvents = False Application.ScreenUpdating = False sPath = InputBox("Enter a full path to workbooks") ChDir sPath sFname = InputBox("Enter a filename pattern") sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal) wSht = InputBox("Enter a worksheet name to copy") Do Until sFname = "" Set wBk = Workbooks.Open(sFname) Windows(sFname).Activate Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1) wBk.Close False sFname = Dir() Loop ActiveWorkbook.Save Application.EnableEvents = True Application.ScreenUpdating = True End Sub
マクロを実行すると、一致する各ワークブックからコピーするワークシートの名前も要求されます。名前を入力すると、そのようなワークシートがブックに存在する場合は、現在のブックの先頭にコピーされます。
ワークシートを組み合わせるための独自のマクロを作成したくない場合は、Excel MVP Ron deBruinによって作成されたRDBMergeアドインを検討してください。
ここで無料で見つけることができます:
http://www.rondebruin.nl/win/addins/rdbmerge.htm
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(7425)は、Microsoft Excel 97、2000、2002、および2003に適用されます。