Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
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

Makro um Zeilen mit gleichem Inhalt zu kopieren

Makro um Zeilen mit gleichem Inhalt zu kopieren
christian
Hallo,
vielleicht kann mir jemand von euch helfen....
Ich habe eine Ausgangstabelle mit verschiedenen Produktnummern in Spalte A und unterschiedlichen
anderen Informationen in den Spalten B-U. Die Daten in dieser Tabelle habe ich sortiert, so dass in Spalte
A alle gleichen Produkte untereinander stehen.
Jetzt möchte ich versuchen, mithilfe eines Makros immer für gleiche Produkte die gesamten Zeilen zu markieren, zu kopieren und in ein neues Tabellenblatt einzufügen. Also z.B. Zeilen A1-A25 enthalten das
gleiche Produkt, also kopiere ich diese Zeilen und paste sie in ein neues Tabellenblatt.
Die Zielen A26-A40 enthalten wieder die gleiche Produktbezeichnung und ich kopiere sie wieder in ein neues Tabellenblatt usw.
Geht sowas?
Für Hilfe wäre ich dankbar, da ich vor einem Berg an Daten stehe....
mfg christian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro um Zeilen mit gleichem Inhalt zu kopieren
15.10.2009 18:56:31
christian
kennt niemand einen Ansatz zur Lösung?
mfg christian
AW: Makro um Zeilen mit gleichem Inhalt zu kopieren
15.10.2009 19:00:11
robert
hi,
der berg wird dadurch aber noch größer :-)
..genügt nicht der filter ?
bzw. beschreibe wozu du eigene blätter brauchst
gruß
robert
AW: Makro um Zeilen mit gleichem Inhalt zu kopieren
15.10.2009 19:43:18
christian
die eigenen blätter brauche ich, um sie an verschiedene Personen zu verteilen.
Mit filter wäre es sehr manuell, ich müsste über 70 verschiedene Produkte auswählen
AW: Makro um Zeilen mit gleichem Inhalt zu kopieren
15.10.2009 19:35:57
Josef
Hallo Christian,
das sollte es tun.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub copyNumbers()
  Dim objSh As Worksheet
  Dim lngStart As Long, lngEnd As Long, lngLast As Long, lngIndex As Long
  
  On Error GoTo ErrExit
  GMS
  
  With Sheets("Tabelle2") 'Quelltabelle - Name anpassen!
    lngLast = .Cells(Rows.Count, 1).End(xlUp).Row
    lngIndex = .Index
    lngStart = 1
    Do
      lngEnd = lngStart + Application.Max(lngStart, Application.CountIf(.Range("A:A"), .Cells(lngStart, 1))) - 1
      If SheetExist(.Cells(lngStart, 1).Text, ThisWorkbook) Then
        Set objSh = ThisWorkbook.Sheets(.Cells(lngStart, 1).Text)
        objSh.Cells.Clear
        lngIndex = objSh.Index
      Else
        Set objSh = ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Sheets(lngIndex))
        objSh.Name = .Cells(lngStart, 1).Text
        lngIndex = lngIndex + 1
      End If
      .Range(.Cells(lngStart, 1), .Cells(lngEnd, 1)).EntireRow.Copy objSh.Cells(1, 1)
      lngStart = lngEnd + 1
    Loop While lngStart <= lngLast
    .Activate
  End With
  
  ErrExit:
  With Err
    If .Number <> 0 Then MsgBox "Fehler " & .Number & vbLf & vbLf & _
      .Description & vbLf & vbLf & "In Prozedur (copyNumbers) in Modul Modul1", _
      vbExclamation, "Fehler in Modul1 / copyNumbers"
  End With
  
  GMS True
  Set objSh = Nothing
End Sub

Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If wks.Name = sheetName Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function

Public Sub GMS(Optional ByVal Modus As Boolean = False)
  
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
    
  End With
  
End Sub

Gruß Sepp

Anzeige
AW: @Sepp..nicht ganz..
16.10.2009 10:14:16
Josef
Hallo Robert,
war ein kleiner Fehler drin.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub copyNumbers()
  Dim objSh As Worksheet
  Dim lngStart As Long, lngEnd As Long, lngLast As Long, lngIndex As Long
  
  On Error GoTo ErrExit
  GMS
  
  With Sheets("Tabelle1") 'Quelltabelle - Name anpassen!
    lngLast = .Cells(Rows.Count, 1).End(xlUp).Row
    lngIndex = .Index
    lngStart = 2
    Do
      lngEnd = lngStart + Application.CountIf(.Range("A:A"), .Cells(lngStart, 1)) - 1
      If SheetExist(.Cells(lngStart, 1).Text, ThisWorkbook) Then
        Set objSh = ThisWorkbook.Sheets(.Cells(lngStart, 1).Text)
        objSh.Cells.Clear
        lngIndex = objSh.Index
      Else
        Set objSh = ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Sheets(lngIndex))
        objSh.Name = .Cells(lngStart, 1).Text
        lngIndex = lngIndex + 1
      End If
      .Range(.Cells(lngStart, 1), .Cells(lngEnd, 1)).EntireRow.Copy objSh.Cells(1, 1)
      lngStart = lngEnd + 1
    Loop While lngStart <= lngLast
    .Activate
  End With
  
  ErrExit:
  With Err
    If .Number <> 0 Then MsgBox "Fehler " & .Number & vbLf & vbLf & _
      .Description & vbLf & vbLf & "In Prozedur (copyNumbers) in Modul Modul1", _
      vbExclamation, "Fehler in Modul1 / copyNumbers"
  End With
  
  GMS True
  Set objSh = Nothing
End Sub

Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If wks.Name = sheetName Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function

Public Sub GMS(Optional ByVal Modus As Boolean = False)
  
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
    
  End With
  
End Sub

Gruß Sepp

Anzeige
Danke, jetzt Super :-) owT-Gruß
16.10.2009 10:24:50
Robert

339 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige