Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mittels Makro Gesamtdatei splitten

Mittels Makro Gesamtdatei splitten
12.04.2017 16:51:35
Marcus
Hallo zusammen,
ich benötige ein Makro das mir eine Gesamtdatei (Gesamtdatei.xlsx) automatisch in Einzeldateien splitten kann. Beispiel aus der Gesamtdatei:
ID Name
1 Max Mustermann
2 Karla Klausen
Das Makro soll diese Datensätze dann in neue einzel xlsx.Dateien splitten:
Beispiel: ID Name
Gesamtdatei_1.xlsx = 1 Max Mustermann
Gesamtdatei_2.xlsx= 2 Karla Klausen
Schön wäre es wenn die Datei sich gemäß des ID-Namens automatisch umbenennt.
Ist sowas möglich?
Danke vorab?
Viele Grüße
Marcus

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mittels Makro Gesamtdatei splitten
12.04.2017 16:54:48
Marcus
Noch zur Ergänzung:
Wenn beispielsweise die ID 1 mehrfach in der Datei vorkommt, dann soll alle Datensätze mit der ID1 in die neue Datei Gesamtdatei_1.xlsx
Danke!
AW: Mittels Makro Gesamtdatei splitten
13.04.2017 09:25:35
Marcus
Keine Ideen?
AW: Mittels Makro Gesamtdatei splitten
13.04.2017 09:35:20
Oberschlumpf
Hi Marcus
Zeig mal ne Bsp-Datei mit Hilfe der Upload-Funktion dieses Forums.
Keiner außer du kennt deine Datei am besten.
Ciao
Thorsten
AW: Mittels Makro Gesamtdatei splitten
17.04.2017 21:08:34
Marcus
Hallo,
anbei die Beispieldatei:
https://www.herber.de/bbs/user/112937.xlsx
Ich benötige ein Makro das die Gesamtdatei nun splittet. Das Makro soll sich den Kenner aus Spalte A suchen: Bsp: 10. Daraufhin alle Datensätze mit dem Kenner 10 in eine neue Datei abspeichern mit dem Namen Niederlassungen_10. Das selbe bis alle Kenner fertig sind (Niederlassungen_20.xls, Niederlassungen_30.xls usw.).
Vielen Dank!!
Anzeige
AW: Mittels Makro Gesamtdatei splitten
17.04.2017 21:09:45
Marcus
Danke vorab für die Hilfe!
AW: Mittels Makro Gesamtdatei splitten
17.04.2017 22:20:52
Sepp
Hallo Marcus,
in ein allgemeines Modul deiner Datei.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub copyBranch()
Dim objSht As Worksheet
Dim rngAll As Range, rngKrit As Range
Dim vntTmp As Variant, vntValues As Variant
Dim lngI As Long
Dim CalculationMode As Long, UpdateLinks As Long

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  CalculationMode = .Calculation
  .Calculation = xlManual
  UpdateLinks = .AskToUpdateLinks
  .AskToUpdateLinks = False
  .DisplayAlerts = False
End With

With Sheets("Tabelle1")
  Set rngAll = .Range("A1").CurrentRegion
  
  rngAll.Rows(1).Copy rngAll.Cells(1, 1).Offset(0, rngAll.Columns.Count + 1)
  
  Set rngKrit = rngAll.Cells(1, 1).Offset(0, rngAll.Columns.Count + 1).Resize(2, rngAll.Columns.Count)
End With

vntTmp = rngAll.Columns(1).Offset(1, 0).Resize(rngAll.Rows.Count - 1, 1)
vntValues = toArrayUnique(vntTmp)

For lngI = 0 To UBound(vntValues)
  rngKrit.Cells(2, 1).Formula = "=""=" & vntValues(lngI) & """"
  Set objSht = ThisWorkbook.Worksheets.Add
  rngAll.AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=rngKrit, _
    CopyToRange:=objSht.Range("A1"), _
    Unique:=False
  objSht.Move
  ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Niederlassung_" & vntValues(lngI) & ".xlsx", FileFormat:=51
  ActiveWorkbook.Close
  Set objSht = Nothing
Next

MsgBox "Es wurden " & UBound(vntValues) + 1 & " Dateien exportiert!"

rngKrit = ""

ErrorHandler:

With Err
  If .Number <> 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'copyBranch'" & vbLf & String(25, "—") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, 81968, "VBA - Fehler in Prozedur - copyBranch", .HelpFile, .HelpContext
    .Clear
  End If
End With

On Error GoTo 0

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = CalculationMode
  .DisplayAlerts = True
  .AskToUpdateLinks = UpdateLinks
  .CutCopyMode = False
  .StatusBar = False
End With

Set rngAll = Nothing
Set rngKrit = Nothing
End Sub

Private Function toArrayUnique(Field As Variant, Optional Sort As Integer = 1) As Variant
'Sort unsortiert = 0, sortiert A-Z = 1, sortiert Z-A = -1
Dim objArrayList As Object
Dim lngR As Long, lngC As Long

On Error GoTo ErrExit

Set objArrayList = CreateObject("System.Collections.Arraylist")

With objArrayList
  For lngR = LBound(Field, 1) To UBound(Field, 1)
    For lngC = LBound(Field, 2) To UBound(Field, 2)
      If Not .Contains(Trim(Field(lngR, lngC))) Then
        If Field(lngR, lngC) <> "" Then .Add Trim(Field(lngR, lngC))
      End If
    Next
  Next
  If Sort <> 0 Then .Sort
  If Sort < 0 Then .Reverse
  toArrayUnique = .toArray
End With

Exit Function
ErrExit:
toArrayUnique = -1
End Function

Die Niederlassungs-Dateien werden im Verzeichnis der Haupt-Datei gespeichert.
Gruß Sepp

Anzeige
AW: Mittels Makro Gesamtdatei splitten
17.04.2017 22:50:55
Marcus
Hallo Sepp,
danke für deine Hilfe.
Leider kommt die Fehler Variable nicht definiert.
Zudem sind die einige Bereiche bereits nachdem einkopieren rot markiert. Z.B. Nach If .Number und For IngR
Was muss ich hier tun?
Viele Grüße
AW: Mittels Makro Gesamtdatei splitten
17.04.2017 22:54:24
Marcus
Diese sind rot markiert:
 If .Number 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'copyBranch'" & vbLf & String(25, "—") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, 81968, "VBA - Fehler in Prozedur - copyBranch", .HelpFile, .HelpContext
    .Clear
For lngR = LBound(Field, 1) To UBound(Field, 1)
    For lngC = LBound(Field, 2) To UBound(Field, 2)
      If Not .Contains(Trim(Field(lngR, lngC))) Then
        If Field(lngR, lngC) "" Then .Add Trim(Field(lngR, lngC))
      End If
Anzeige
AW: Mittels Makro Gesamtdatei splitten
17.04.2017 22:55:21
Marcus
Danke vorab Sepp!
Ergänzungsfrage
17.04.2017 23:04:23
WalterK
Hallo Sepp,
möchte mich gerne einklinken und die Frage stellen, was ich ändern müsste,
damit nicht nur die Daten aus der Spalte A:A sondern die Daten aus den Spalten A:G in die neuen Dateien übernommen werden.
Besten Dank und Servus, Walter
Hat sich erledigt, Überschrift fehlte! Danke
17.04.2017 23:25:14
WalterK
AW: Hat sich erledigt, Überschrift fehlte! Danke
18.04.2017 11:08:26
Marcus
Hallo,
danke habe es auch rausgefunden.
Ich habe noch eine Frage.
Ich habe nun folgendes Makro:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Sub copyBranch()
Dim objSht As Worksheet
Dim rngAll As Range, rngKrit As Range
Dim vntTmp As Variant, vntValues As Variant
Dim lngI As Long
Dim CalculationMode As Long, UpdateLinks As Long
On Error GoTo ErrorHandler
With Application
.ScreenUpdating = False
.EnableEvents = False
CalculationMode = .Calculation
.Calculation = xlManual
UpdateLinks = .AskToUpdateLinks
.AskToUpdateLinks = False
.DisplayAlerts = False
End With
With Sheets("Splitten")
Set rngAll = .Range("A1").CurrentRegion
rngAll.Rows(1).Copy rngAll.Cells(1, 1).Offset(0, rngAll.Columns.Count + 1)
Set rngKrit = rngAll.Cells(1, 1).Offset(0, rngAll.Columns.Count + 1).Resize(2, rngAll.Columns.Count)
End With
vntTmp = rngAll.Columns(1).Offset(1, 0).Resize(rngAll.Rows.Count - 1, 1)
vntValues = toArrayUnique(vntTmp)
For lngI = 0 To UBound(vntValues)
rngKrit.Cells(2, 1).Formula = "=""=" & vntValues(lngI) & """"
Set objSht = ThisWorkbook.Worksheets.Add
rngAll.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=rngKrit, _
CopyToRange:=objSht.Range("A1"), _
Unique:=False
objSht.Move
ActiveSheet.Name = Cells(1, 1) & " " & vntValues(lngI)
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_" & vntValues(lngI) & ".xlsx", FileFormat:=51
ActiveWorkbook.Close
Set objSht = Nothing
Next
MsgBox "Es wurden " & UBound(vntValues) + 1 & " Dateien exportiert!"
rngKrit = ""
ErrorHandler:
With Err
If .Number 0 Then
MsgBox "Fehler in Prozedur:" & vbTab & "'copyBranch'" & vbLf & String(25, "-") & _
vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
"Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
.Description & vbLf, 81968, "VBA - Fehler in Prozedur - copyBranch", .HelpFile, .HelpContext
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalculationMode
.DisplayAlerts = True
.AskToUpdateLinks = UpdateLinks
.CutCopyMode = False
.StatusBar = False
End With
Set rngAll = Nothing
Set rngKrit = Nothing
End Sub
Private Function toArrayUnique(Field As Variant, Optional Sort As Integer = 1) As Variant
'Sort unsortiert = 0, sortiert A-Z = 1, sortiert Z-A = -1
Dim objArrayList As Object
Dim lngR As Long, lngC As Long
On Error GoTo ErrExit
Set objArrayList = CreateObject("System.Collections.Arraylist")
With objArrayList
For lngR = LBound(Field, 1) To UBound(Field, 1)
For lngC = LBound(Field, 2) To UBound(Field, 2)
If Not .Contains(Trim(Field(lngR, lngC))) Then
If Field(lngR, lngC)  "" Then .Add Trim(Field(lngR, lngC))
End If
Next
Next
If Sort  0 Then .Sort
If Sort 

Das Makro funktioniert super, jedoch speichert er die Datei mit der Dateiendung ab. (Bsp. Splitten.xls_10. Dies passiert aufgrund
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_" & vntValues(lngI) & ".xlsx", FileFormat:=51
Wie kann ich die Endung weglassen? Also Splitten_10?
Viele Grüße
Anzeige
AW: Hat sich erledigt, Überschrift fehlte! Danke
18.04.2017 20:16:55
Sepp
Hallo Marcus,
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "_" & vntValues(lngI) & ".xlsx", FileFormat:=51

Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige