Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
740to744
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
740to744
740to744
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Macro ändern (an Heiko S.)

Macro ändern (an Heiko S.)
13.03.2006 17:11:19
Rene
Hi zusammen,
Ich habe von Heiko S. diesen Code:

Sub Auswerten2()
Dim strTeam As String, strSheetName As String
Dim lngLastRow As Long, lngI As Long, lngN As Long, lngTeamErsteZeile As Long
Dim intTeamCounter As Integer, intSpalte As Integer, intAusW As Integer
' Programm starten wenn die Ausgangstabelle auch das aktive Tabellenblatt ist !!!
ActiveSheet.UsedRange.Copy
ActiveWorkbook.Worksheets.Add After:=Sheets(Sheets.Count)
' Wenn schon ein Tabellenblatt mit dem namen Auswertung besteht, dann den von EXCEL vergebenen
' Namen beibehalten.
On Error Resume Next
ActiveSheet.Name = "Auswertung"
On Error GoTo 0
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
strSheetName = ActiveSheet.Name
Application.CutCopyMode = False
lngTeamErsteZeile = 2
'Application.ScreenUpdating = False
With Worksheets(strSheetName)
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
.Range(Cells(1, 1), Cells(lngLastRow, 5)).Sort _
Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
MsgBox "drin"
lngN = lngLastRow + 5
strTeam = UCase(.Cells(2, 1))
For lngI = 3 To lngLastRow + 1
If strTeam <> UCase(.Cells(lngI, 1)) Then
.Range(Cells(lngTeamErsteZeile, 1), Cells(lngI - 1, 5)).Sort _
Key1:=Range("E" & lngTeamErsteZeile), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Cells(lngN, 1) = .Cells(lngI - 1, 1)
intSpalte = 2
If lngI - lngTeamErsteZeile < 4 Then
intAusW = lngI - lngTeamErsteZeile - 1
Else
intAusW = 3
End If
For intTeamCounter = lngTeamErsteZeile To lngTeamErsteZeile + intAusW
.Range(Cells(intTeamCounter, 2), Cells(intTeamCounter, 5)).Copy _
Destination:=.Cells(lngN, intSpalte)
intSpalte = intSpalte + 4
Next intTeamCounter
lngN = lngN + 1
lngTeamErsteZeile = lngI
End If
strTeam = UCase(.Cells(lngI, 1))
Next lngI
Rows("1:" & lngLastRow + 2).Delete
End With
Application.ScreenUpdating = True
End Sub

(nicht böse sein Hermann,dieser ist besser für mich.) bekommen.Dieser klappt auch prima so.Nun wollte ich gerne den Code aber ändern das es mir nicht ein neues TB("Auswertung")anlegt sondern die Daten die sonst im TB "Auswertung" stehen würden in dem gleichen Blatt stehen wo sie kopiert werden.Die Zelle wäre H1.Probiere zwar schon selber die ganze Zeit bekomme es aber nicht hin.
Kann mir da jemand helfen oder sogar Heiko S. selber?
Gruß Rene

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro ändern (an Heiko S.)
13.03.2006 19:02:03
Heiko
Hallo Rene,
z.B. so:

Sub Auswerten4()
Dim strTeam As String, strSheetName As String, strStartSheet As String
Dim lngLastRow As Long, lngI As Long, lngN As Long, lngTeamErsteZeile As Long
Dim intTeamCounter As Integer, intSpalte As Integer, intAusW As Integer
' Programm starten wenn die Ausgangstabelle auch das aktive Tabellenblatt ist !!!
strStartSheet = ActiveSheet.Name
ActiveSheet.UsedRange.Copy
ActiveWorkbook.Worksheets.Add After:=Sheets(Sheets.Count)
strSheetName = ActiveSheet.Name
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
lngTeamErsteZeile = 2
Application.ScreenUpdating = False
With Worksheets(strSheetName)
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
.Range(Cells(1, 1), Cells(lngLastRow, 5)).Sort _
Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
lngN = lngLastRow + 5
strTeam = UCase(.Cells(2, 1))
For lngI = 3 To lngLastRow + 1
If strTeam <> UCase(.Cells(lngI, 1)) Then
.Range(Cells(lngTeamErsteZeile, 1), Cells(lngI - 1, 5)).Sort _
Key1:=Range("E" & lngTeamErsteZeile), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Cells(lngN, 1) = .Cells(lngI - 1, 1)
intSpalte = 2
If lngI - lngTeamErsteZeile < 4 Then
intAusW = lngI - lngTeamErsteZeile - 1
Else
intAusW = 3
End If
For intTeamCounter = lngTeamErsteZeile To lngTeamErsteZeile + intAusW
.Range(Cells(intTeamCounter, 2), Cells(intTeamCounter, 5)).Copy _
Destination:=.Cells(lngN, intSpalte)
intSpalte = intSpalte + 4
Next intTeamCounter
lngN = lngN + 1
lngTeamErsteZeile = lngI
End If
strTeam = UCase(.Cells(lngI, 1))
Next lngI
Rows("1:" & lngLastRow + 4).Delete
.UsedRange.Copy Destination:=Worksheets(strStartSheet).Range("H1")
Application.DisplayAlerts = False
Worksheets(strSheetName).Delete
Worksheets(strStartSheet).Activate
End With
With Application
.ScreenUpdating = True
.CutCopyMode = False
.DisplayAlerts = True
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett
Anzeige
AW: Macro ändern (an Heiko S.)
13.03.2006 19:15:19
Rene
Hi Heiko,
Danke dir schon wieder für deine Hilfe es ist alles genau richtig so, werde mal den Code mir genau ansehen wo ich nicht weiterkam.
Gruß Rene
Macro nochmal ändern (an Heiko S.)
17.03.2006 23:40:55
Rene
Moin zusammen,
Kannst du (Heiko S.) aber auch die anderen mir bitte sagen wie ich bei deinem Code noch zwei Spalten einfügen kann?
Ich wollte gerne deinen Code um zwei Spalten erweitern.Also der Copy Bereich würde jetzt bis G gehen. Dieses konnte ich auch noch so halbwegs verfolgen nur dann wenn es die Spalten dreht fügt es mir nicht die neuen Spalten mit ein.Wie es dann in zB. "I2" eingetragen wird habe ich auch rausbekommen. Aber eben der entscheidende Rest fehlt mir noch.Kannst du oder jemand anders mir bitte noch mal weiterhelfen?
Hier noch mal der letzte Code:

Sub Auswerten4()
Dim strTeam As String, strSheetName As String, strStartSheet As String
Dim lngLastRow As Long, lngI As Long, lngN As Long, lngTeamErsteZeile As Long
Dim intTeamCounter As Integer, intSpalte As Integer, intAusW As Integer
' Programm starten wenn die Ausgangstabelle auch das aktive Tabellenblatt ist !!!
strStartSheet = ActiveSheet.Name
ActiveSheet.UsedRange.Copy
ActiveWorkbook.Worksheets.Add After:=Sheets(Sheets.Count)
strSheetName = ActiveSheet.Name
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
lngTeamErsteZeile = 2
Application.ScreenUpdating = False
With Worksheets(strSheetName)
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
.Range(Cells(1, 1), Cells(lngLastRow, 5)).Sort _
Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
lngN = lngLastRow + 5
strTeam = UCase(.Cells(2, 1))
For lngI = 3 To lngLastRow + 1
If strTeam <> UCase(.Cells(lngI, 1)) Then
.Range(Cells(lngTeamErsteZeile, 1), Cells(lngI - 1, 5)).Sort _
Key1:=Range("E" & lngTeamErsteZeile), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Cells(lngN, 1) = .Cells(lngI - 1, 1)
intSpalte = 2
If lngI - lngTeamErsteZeile < 4 Then
intAusW = lngI - lngTeamErsteZeile - 1
Else
intAusW = 3
End If
For intTeamCounter = lngTeamErsteZeile To lngTeamErsteZeile + intAusW
.Range(Cells(intTeamCounter, 2), Cells(intTeamCounter, 5)).Copy _
Destination:=.Cells(lngN, intSpalte)
intSpalte = intSpalte + 4
Next intTeamCounter
lngN = lngN + 1
lngTeamErsteZeile = lngI
End If
strTeam = UCase(.Cells(lngI, 1))
Next lngI
Rows("1:" & lngLastRow + 4).Delete
.UsedRange.Copy Destination:=Worksheets(strStartSheet).Range("H1")
Application.DisplayAlerts = False
Worksheets(strSheetName).Delete
Worksheets(strStartSheet).Activate
End With
With Application
.ScreenUpdating = True
.CutCopyMode = False
.DisplayAlerts = True
End With
End Sub

Wäre echt dankbar für jede Hilfe.
Gruß René
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige