David hat mehrere Arbeitsmappen mit jeweils mehreren Arbeitsblättern. Er möchte aus jeder dieser Arbeitsmappen ein bestimmtes Arbeitsblatt (nur eines) zu einer neuen Arbeitsmappe kombinieren. Er weiß, wie man dies manuell mit Verschieben oder Kopieren von Blättern macht, aber er möchte eine Möglichkeit, dies automatischer zu tun, zumal es möglicherweise viele Arbeitsmappen gibt, die er auf diese Weise „kombinieren“ muss.

Es gibt verschiedene Möglichkeiten, wie Sie dieses Problem angehen können, und alle beinhalten die Verwendung von Makros. (Dies sollte nicht überraschen – Makros sind so konzipiert, dass mühsame manuelle Aufgaben schnell erledigt werden können.)

Das folgende Makro ist einfach aufgebaut. Es durchläuft alle derzeit geöffneten Arbeitsmappen und kopiert für jede Arbeitsmappe (mit Ausnahme der Arbeitsmappe, die das Makro enthält) das Blatt „Sheet1“ aus dieser Arbeitsmappe in die Arbeitsmappe, die den Code enthält.

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

Wenn das Makro ein anderes Arbeitsblatt als Sheet1 abrufen soll, ändern Sie einfach den Wert der Variablen sWksName, um den gewünschten Arbeitsblattnamen wiederzugeben. Wenn Sie nicht wissen, wie der Name des Arbeitsblatts lautet, das zu kopierende Arbeitsblatt jedoch immer das zweite Arbeitsblatt in jeder Arbeitsmappe ist, können Sie diese Variante des Makros verwenden:

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

Der vielleicht größte Nachteil der bisherigen Ansätze besteht darin, dass alle Arbeitsmappen geöffnet sein müssen. Dies ist möglicherweise nicht immer möglich. Zum Beispiel könnten Sie hundert verschiedene Arbeitsmappen in einem Ordner haben und Sie müssen aus jedem ein Arbeitsblatt kombinieren. Das Öffnen von hundert Arbeitsmappen ist zwar technisch möglich, für die meisten Menschen jedoch wahrscheinlich nicht praktikabel. In diesem Fall müssen Sie einen anderen Ansatz wählen.

Das folgende Makro, CombineSheets, ist interaktiver Natur. Sie werden nach mehreren Informationen gefragt und anschließend Arbeitsblätter zur Arbeitsmappe hinzugefügt, die auf Ihren Antworten basieren. Zuerst wird nach einem Pfad zu den Arbeitsblättern gefragt (ohne den abschließenden Schrägstrich) und dann nach einem Muster, das für die Arbeitsmappen verwendet werden soll. Sie können ein Arbeitsmappenmuster mithilfe der Platzhalter für reguläre Sternchen () und Fragezeichen (?) Angeben. Zum Beispiel würde ein Muster von mit allen Arbeitsmappen übereinstimmen, während ein Muster von Budget20 ??

würde nur Arbeitsmappen zurückgeben, die am Anfang „Budget20“ und danach zwei beliebige Zeichen haben.

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

Wenn Sie das Makro ausführen, werden Sie auch nach dem Namen eines Arbeitsblatts gefragt, das aus jeder übereinstimmenden Arbeitsmappe kopiert werden soll. Geben Sie einen Namen ein. Wenn ein solches Arbeitsblatt in der Arbeitsmappe vorhanden ist, wird es an den Anfang der aktuellen Arbeitsmappe kopiert.

Wenn Sie kein eigenes Makro zum Kombinieren von Arbeitsblättern erstellen möchten, können Sie das von Excel MVP Ron de Bruin erstellte RDBMerge-Add-In in Betracht ziehen.

Sie finden es kostenlos hier:

http://www.rondebruin.nl/win/addins/rdbmerge.htm

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (7425) gilt für Microsoft Excel 97, 2000, 2002 und 2003.