Thema Datum  Von Nutzer Rating
Antwort
Rot Excel Liste in mehrere Blöcke aufteilen
23.05.2018 09:58:10 Matthias
Solved
25.05.2018 07:22:37 Trägheit
NotSolved
25.05.2018 07:26:26 Trägheit
NotSolved
28.05.2018 08:47:18 Matthias
NotSolved

Ansicht des Beitrags:
Von:
Matthias
Datum:
23.05.2018 09:58:10
Views:
1536
Rating: Antwort:
 Nein
Thema:
Excel Liste in mehrere Blöcke aufteilen

Hi zusammen,

ich bin hier ziemlich neu im Thema und habe seit der Uni nichts mehr in VBA programmiert. Mein Problem ist Folgendes:

 

Ich habe eine Excel Tabelle mit mehreren tausend Zeilen, die ich gerne in mehrere Excel Listen aufteilen möchte. Bis jetzt bin ich (durch Zusammenkopieren von Codeschnipseln) so weit gekommen, dass ich die neuen Excel Listen erstellen kann, jedoch nur mit fixen Vorgaben für die Anzahl an Zeilen pro neuer Excel Liste.

Was ich jedoch möchte ist Folgendes:

In Spalte C stehen Materialnummern, die teilweise auch mehrfach vorkommen (Liste wird bereits durch das Makro nach Materialnummern sortiert). In die neuen Excel Listen sollen jetzt nicht fixe Anzahl an Zeilen geschrieben werden sondern so viele Zeilen, bis 48 verschiedene Materialnummern erreicht sind.
Das Makro müsste also die Zeilen durchgehen und dabei die Anzahl an verschiedenen Materialnummern hochzählen, bis 48 erreicht ist. Anschließend die nächsten 48 usw usw.

Der Code sieht aktuell folgendermaßen aus (ist wie gesagt zusammenkopiert und bestimmt alles andere als sinnvoll zusammengesetzt):


Option Explicit
 
Sub SplitDataSheet()
   Dim lRow As Long, lCol As Integer, BlockGroesse As Integer
   Dim AnzNullen As Byte, Nullen As String
   Dim rngZeile1 As Range, rngBlock As Range, Block As Integer
   Dim ZeBlockS As Long, ZeBlockE As Long, AnzBlocks As Integer
   Dim DstPath As String, DstName As String, DstFileName As String
   Dim wksSrc As Worksheet, rng2Copy As Range, DateiFormat As Variant
   Dim strSpalte As String  'Sortieren der Zeilen
   Dim strBereich As String 'Sortieren der Zeilen
   Dim AnzahlWerte As String 'Anzahl verschiedene Materialnummern

   
   'Folgender Abschnitt berechnet die Anzahl an Materialnummern

   Set wksSrc = ActiveSheet 'Zählen der verschiedenen Materialnummern
   Dim objDict, i As Long, AnzahlMatnr As Long    'AnzahlMatnr ist Anzahl der verschiedenen Materialnummern
   Set wksSrc = ActiveSheet
   Set objDict = CreateObject("Scripting.Dictionary")
   With wksSrc
   For i = 1 To .Cells(Rows.Count, 3).End(xlUp).Row
   If Not objDict.exists(.Cells(i, 3).Value) Then
   Call objDict.Add(.Cells(i, 3).Value, Empty)
   AnzahlMatnr = AnzahlMatnr + 1
   End If
   Next
   AnzahlMatnr = AnzahlMatnr - 1
   
   MsgBox AnzahlMatnr & " Einträge" 'Ausgabe der Anzahl an Materialien


   'Folgender Abschnitt sortiert die Zeilen nach Spalte C

   Set wksSrc = ActiveSheet  'Parameter zum Sortieren
   strBereich = "A1:AJ1048576"
   strSpalte = "C"

    'Sortieren durchführen
    Range(strBereich).Sort _
     Key1:=Range(strSpalte & "1"), Order1:=xlAscending, _
     Header:=xlYes


   lRow = Cells(Rows.Count, 1).End(xlUp).Row
   lCol = Cells(1, Columns.Count).End(xlToLeft).Column
   
   
   'Hier Anzahl der Materialien je Block eingeben
   
   BlockGroesse = 48
   
   'Hier wird das Dateiformat festgelegt, sowie die erste Zeile übersprungen
   
   Set wksSrc = ActiveSheet
   DateiFormat = xlWorkbookNormal  'Alternativ:  xlCSV,  xlTextWindows,  xlWorkbookDefault, ...
   If lRow < 2 Then Exit Sub  'Nur überschrift macht keinen Sinn ...
   On Error GoTo ErrorHandler
 
    With Application
      .DisplayAlerts = False
      .ScreenUpdating = False
   End With
   
   
   'Hier werden die Variablen für die Auswahl der Zeilen festgelegt
   
   AnzBlocks = WorksheetFunction.RoundUp((AnzahlMatnr) / BlockGroesse, 0)
   AnzNullen = Len(CStr(AnzBlocks))
   Nullen = WorksheetFunction.Rept(0, AnzNullen)
   DstPath = "C:\Users\baumann\Desktop\Auswertung Kristian\Splits"
   DstName = "_Block_"
   
   MsgBox AnzBlocks 'Ausgabe der Anzahl an Blocks

   
   
   With wksSrc
        Set rngZeile1 = .Range(.Cells(1, 1), .Cells(1, lCol))
        For Block = 1 To AnzBlocks    'was mache ich mit einem Block
        DstFileName = DstPath & DstName & Format(Block, Nullen)
        
        ZeBlockS = (Block - 1) * BlockGroesse + 2
        ZeBlockE = WorksheetFunction.Min(ZeBlockS + BlockGroesse - 1, lRow)
        
        
        Set rng2Copy = Union(rngZeile1, .Range(.Cells(ZeBlockS, 1), .Cells(ZeBlockE, lCol)))
        rng2Copy.Copy
        Workbooks.Add
                 
         With ActiveSheet
            .Paste
            .Cells(1, 1).Select
         End With
         
         
         With ActiveWorkbook
            .SaveAs Filename:=DstFileName, FileFormat:=DateiFormat
            .Close SaveChanges:=True
         
         
         End With
      
      Next Block
   End With
   

ErrorHandler:
   With Application
      .DisplayAlerts = True
      .ScreenUpdating = True
   End With
   If Err.Number = 0 Then
      MsgBox "Aufgabe erledigt!", vbInformation, "Ohne Fehler"
   Else
      MsgBox "Beendet mit Fehler Nr.: " & Err.Number & vbCrLf _
       & Err.Description & vbCrLf _
       & "Bitte prüfen Sie das Ergebnis!", vbCritical, "Fehler"
   End If
   
   
   
   End With
   End Sub
   

Wenn hierzu jemand eine Idee hat, wäre ich sehr dankbar.

 

Viele Grüße,
Matthias


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Excel Liste in mehrere Blöcke aufteilen
23.05.2018 09:58:10 Matthias
Solved
25.05.2018 07:22:37 Trägheit
NotSolved
25.05.2018 07:26:26 Trägheit
NotSolved
28.05.2018 08:47:18 Matthias
NotSolved