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に適用されます。