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

List umsortieren

List umsortieren
21.10.2012 22:22:54
Wilfied
Hallo Leutz,
ich habe ein Tabelle, die folgendermaßen aussieht:
Other 4711471 E1
Other 4711471 A2
Other 4711471 M
Other 8152111 Z
Other 8152111 k1
Other 1000000 A
Other 7243154 d2
Other 7243154 e2
in der ersten Spalte steht immer das Wort "other" in der zweiten ein 7 stelliger Code in der dritten ein Merkmal.
Zu einem Code gibt es 1 bis 3 Merkmale. Leider stehen die Merkmale untereinander und ich hätte die gerne nebeneinander.
etwa so:
Other 4711471 E1 A2 M
Other 8152111 Z k1
Other 1000000 A
Other 7243154 d2 e2
kann mir da jemand bei helfen?
greeetz Will

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
dann brauchen wir das "Other" ja nicht
21.10.2012 22:50:28
Matthias
Hallo
Hab heute erst an Pitt ein solches Makro(in Datei) gesendet
https://www.herber.de/forum/archiv/1280to1284/t1282928.htm#1283156
Nun einfach mal auf Deine Bedürfnissen angepsst sieht das dann so aus:
https://www.herber.de/bbs/user/82245.xls
Ergebnis Zieltabelle:
Tabelle2

 AB
14711471 E1 A2 M
28152111 Z k1
31000000 A
47243154 d2 e2


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Matthias

Anzeige
AW: dann brauchen wir das "Other" ja nicht
24.10.2012 15:04:48
Wilfied
also die Datei läuft nicht. Da will irgendwas auf die Registrierung zugreifen und alles bricht ab

Läuft ohne Probleme !
25.10.2012 06:38:56
Matthias
Hallo
Zitat
also die Datei läuft nicht
Da will irgendwas auf die Registrierung zugreifen und alles bricht ab
Da meinst Du aber sicher nicht meine hochgeladene Datei. Die funktioniert.
Das liegt definitiv nicht an der Datei und ich greife nicht auf die Registrierung zu
Ich habe sogar meine gepostete Datei nochmal runtergeladen und getestet.
Keine Probleme! Weder mit XL2000 noch mit XL2007.
Gruß Matthias

Anzeige
AW: Liste umgruppieren
22.10.2012 00:13:30
fcs
Hallo Will,
hier eine Variante.
Die Merkmale 2 und 3 werden hier in die Spalten D und E geschrieben.
Gruß
Franz Sub Daten_umgruppieren() Dim wks As Worksheet Dim Zeile As Long, Zeile1 As Long, ZeileLetzte As Long, SpaKey As Long, SpaWert As Long Dim sMsgTitel As String Dim StatusCalc As Long Dim varKey 'Makrobremsen lösen With Application .EnableEvents = False StatusCalc = .Application.Calculation .Calculation = xlCalculationManual .ScreenUpdating = False End With sMsgTitel = "Daten in Zeilen umgruppieren" On Error GoTo Fehler Set wks = ActiveSheet 'oder = Worksheets("Tabelle1") 'Blatt mit Daten zum Umgruppieren kopieren wks.Copy After:=wks Set wks = ActiveSheet With wks 'Titelzeile einfügen .Rows(1).Insert .Cells(1, 1).Value = "MyOther" .Cells(1, 2).Value = "MyNumber" .Cells(1, 3).Value = "Wert 01" .Cells(1, 4).Value = "Wert 02" .Cells(1, 5).Value = "Wert 03" SpaKey = 2 'Spalte mit den zu vergleichenden Werten SpaWert = 3 'Spalte mit den zu übertragenden Werten ZeileLetzte = .Cells(.Rows.Count, SpaKey).End(xlUp).Row If ZeileLetzte "" Then If varKey .Cells(Zeile, SpaKey).Value Then varKey = .Cells(Zeile, SpaKey).Value Zeile1 = Zeile Else .Cells(Zeile1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = _ .Cells(Zeile, SpaWert).Value .Rows(Zeile).ClearContents End If Else .Rows(Zeile).ClearContents End If Next 'Leere Zeilen löschen With .Range(.Cells(1, SpaKey), .Cells(ZeileLetzte, SpaKey)) .SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp End With .Columns.AutoFit End With End With 'Fehlerbehandlung Fehler: With Err Select Case .Number Case 0 'kein Fehler Case Else MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbOKOnly, sMsgTitel End Select End With Beenden: 'Makrobremsen zurücksetzen With Application .EnableEvents = True .Calculation = StatusCalc .ScreenUpdating = True End With End Sub

Anzeige
AW: Liste umgruppieren
22.10.2012 10:25:14
Wilfied
Hallo,
vielen Dank,
wie oben gelisted moppert der wegen eines End with. Ich weiß nicht wie, aber ich habe das hin bekommen.
werde jetzt mal versuchen ob ich das selber noch Felder zufügen kann, ansonsten melde ich mich noch mal.
Will

AW: Liste umgruppieren
24.10.2012 15:19:09
Wilfied
ok grundsätzlich alles super. Ich habe es sogar geschafft, der, die, das Script auf meine Bedürfnisse anzupassen.
eine Kleinigkeit ist aufgetaucht:
ist das zweite Merkmal leer und das 3. gefüllt, zieht er die Daten aus dem dritten um die Anzahl der Leerstellen nach vorne.
Leider sind bei meinen weiteren Daten (ich habe insgesamt 35 Spalten im Ergebnisblatt) nicht alle Felder der Merkmale leer, so dass die Werte unkontrolliert nach links rutschen.
Will

Anzeige
AW: Liste umgruppieren
25.10.2012 02:05:27
fcs
Hallo Will,
dann muss zusätzlich ein Spaltenzähler eingebaut werden, der auf die Startspalte gesetzt wird, wenn ein neuer Wert in Spalte 2 kommt.
        For Zeile = 2 To ZeileLetzte
If .Cells(Zeile, SpaKey).Value  "" Then
If varKey  .Cells(Zeile, SpaKey).Value Then
varKey = .Cells(Zeile, SpaKey).Value
Zeile1 = Zeile : Spalte = SpaWert
Else
Spalte = Spalte +1
.Cells(Zeile1, Spalte).Value = _
.Cells(Zeile, SpaWert).Value
.Rows(Zeile).ClearContents
End If
Else
.Rows(Zeile).ClearContents
End If
Next
Die Variable "Spalte" muss du dann zusätzlich am Beginn der Prozedur als Long deklarieren.
Gruß
Franz

Anzeige
AW: Liste umgruppieren
25.10.2012 07:37:54
Wilfied
Hallo Franz,
ich bekomme eine Fehlermeldung 1004 Anwendungs- oder objektdefinierter Fehler.
Das gesamte Script sieht bei mir jetzt so aus, nachdem ich den Zähler eingebaut habe:
Sub Daten_umgruppieren()
Dim wks As Worksheet
Dim Zeile As Long, Spalte As Long, Zeile1 As Long, ZeileLetzte As Long, SpaKey As Long,  _
SpaWert As Long
Dim sMsgTitel As String
Dim StatusCalc As Long
Dim varKey
'Makrobremsen lösen
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
sMsgTitel = "Daten in Zeilen umgruppieren"
On Error GoTo Fehler
Set wks = ActiveSheet 'oder = Worksheets("Tabelle1")
'Blatt mit Daten zum Umgruppieren kopieren
wks.Copy After:=wks
Set wks = ActiveSheet
With wks
'Titelzeile einfügen
.Rows(1).Insert
.Cells(1, 1).Value = "Date"
.Cells(1, 2).Value = "FINIS"
.Cells(1, 3).Value = "Desc 01"
.Cells(1, 4).Value = "Pack Stage 01"
.Cells(1, 5).Value = "Pack Resp 01"
.Cells(1, 6).Value = "Resp 01"
.Cells(1, 7).Value = "Pack Mat 01"
.Cells(1, 8).Value = "Time 01"
.Cells(1, 9).Value = "Mat cost 01"
.Cells(1, 10).Value = "Labour cost 01"
.Cells(1, 11).Value = "Total cost 01"
.Cells(1, 12).Value = "number Packs 01"
.Cells(1, 13).Value = "Packs 01"
.Cells(1, 14).Value = "Pack Stage 02"
.Cells(1, 15).Value = "Pack Resp 02"
.Cells(1, 16).Value = "Resp 02"
.Cells(1, 17).Value = "Pack Mat 02"
.Cells(1, 18).Value = "Time 02"
.Cells(1, 19).Value = "Mat cost 02"
.Cells(1, 20).Value = "Labour cost 02"
.Cells(1, 21).Value = "Total cost 02"
.Cells(1, 22).Value = "number Packs 02"
.Cells(1, 23).Value = "Packs 02"
.Cells(1, 24).Value = "Pack Stage 03"
.Cells(1, 25).Value = "Pack Resp 03"
.Cells(1, 26).Value = "Resp 03"
.Cells(1, 27).Value = "Pack Mat 03"
.Cells(1, 28).Value = "Time 03"
.Cells(1, 29).Value = "Mat cost 03"
.Cells(1, 30).Value = "Labour cost 03"
.Cells(1, 31).Value = "Total cost 03"
.Cells(1, 32).Value = "number Packs 03"
.Cells(1, 33).Value = "Packs 03"
.Cells(1, 34).Value = "Pack Stage 04"
.Cells(1, 35).Value = "Pack Resp 04"
.Cells(1, 36).Value = "Resp 04"
.Cells(1, 37).Value = "Pack Mat 04"
.Cells(1, 38).Value = "Time 04"
.Cells(1, 39).Value = "Mat cost 04"
.Cells(1, 40).Value = "Labour cost 04"
.Cells(1, 41).Value = "Total cost 04"
.Cells(1, 42).Value = "number Packs 04"
.Cells(1, 43).Value = "Packs 04"
SpaKey = 2                                    'Spalte mit den zu vergleichenden Werten
SpaWert1 = 4                                   'Spalte mit den zu übertragenden Werten
SpaWert2 = 5
SpaWert3 = 6
SpaWert4 = 7
SpaWert5 = 8
SpaWert6 = 9
SpaWert7 = 10
SpaWert8 = 11
SpaWert9 = 12
SpaWert10 = 13
ZeileLetzte = .Cells(.Rows.Count, SpaKey).End(xlUp).Row
If ZeileLetzte  "" Then
If varKey  .Cells(Zeile, SpaKey).Value Then
varKey = .Cells(Zeile, SpaKey).Value
Zeile1 = Zeile: Spalte = SpaWert
Else
Spalte = Spalte + 1
.Cells(Zeile1, Spalte).Value = _
.Cells(Zeile, SpaWert).Value
.Rows(Zeile).ClearContents
End If
Else
.Rows(Zeile).ClearContents
End If
Next
'Leere Zeilen löschen
With .Range(.Cells(1, SpaKey), .Cells(ZeileLetzte, SpaKey))
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
End With
.Columns.AutoFit
'Fehlerbehandlung
Fehler:
With Err
Select Case .Number
Case 0 'kein Fehler
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbOKOnly, sMsgTitel
End Select
End With
Beenden:
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End If
End With
End Sub
viele Grüße Will

Anzeige
AW: Liste umgruppieren
26.10.2012 06:54:54
fcs
Hallo Will,
du hattest die Variable SpaWert keinen Wert für die Spalte zugewiesen. So ist dieser Wert automatisch 0, was dann zu einem Fehler bei Cells(Zeile,SpaWert) führt.
Wenn du mehrere sich wiederholende Spaltentiel hast, dann kann man das Eintragen der Spaltentitel etwas eleganter lösen. Außerdem kann/sollte man einige Spalten (Uhrzeit, Kosten) entsprechenden der gewünschten Darstellung formatieren.
Gruß
Franz
Sub Daten_umgruppieren_neu()
Dim wks As Worksheet
Dim Zeile As Long, Spalte As Long, Zeile1 As Long, ZeileLetzte As Long, _
SpaKey As Long, SpaWert As Long
Dim iCount As Integer, iIndex As Integer
Dim varTitel
Dim sMsgTitel As String
Dim StatusCalc As Long
Dim varKey
'Makrobremsen lösen
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
sMsgTitel = "Daten in Zeilen umgruppieren"
On Error GoTo Fehler
Set wks = ActiveSheet 'oder = Worksheets("Tabelle1")
'Blatt mit Daten zum Umgruppieren kopieren
wks.Copy After:=wks
Set wks = ActiveSheet
'Array mit den sich wiederholenden Spaltentiteln
varTitel = Array("Pack Stage", "Pack Resp", "Resp", "Pack Mat", "Time", _
"Mat cost", "Labour cost", "Total cost", "number Packs", "Packs")
SpaKey = 2                 'Spalte mit den zu vergleichenden Werten
SpaWert = 4                'Spalte mit den zu übertragenden Werten
With wks
'Titelzeile einfügen und Spalten formatieren
.Rows(1).Insert
.Cells(1, 1).Value = "Date"
.Cells(1, 2).Value = "FINIS"
.Cells(1, 3).Value = "Desc 01"
With .Cells(1, SpaWert)
For iCount = 1 To 4    'Anzahl Wiederholungen der Spaltentitel
For iIndex = LBound(varTitel) To UBound(varTitel) 'iIndex startet hier mit 0
With .Offset(0, (iCount - 1) * (UBound(varTitel) + 1) + iIndex)
'Spalten-Titeltext inkl. fortlaufender Zählnummer
.Value = varTitel(iIndex) & " " & Format(iCount, "00")
'Spalten-Zahlen-Format
With .EntireColumn
Select Case iIndex
Case 5 To 7
.NumberFormat = "#,##0.00"
Case 4
.NumberFormat = "mm:hh:ss"
Case Else
.NumberFormat = "General"
End Select
End With
End With
Next
Next
End With
ZeileLetzte = .Cells(.Rows.Count, SpaKey).End(xlUp).Row
If ZeileLetzte  "" Then
If varKey  .Cells(Zeile, SpaKey).Value Then
varKey = .Cells(Zeile, SpaKey).Value
Zeile1 = Zeile: Spalte = SpaWert
Else
Spalte = Spalte + 1
If .Cells(Zeile, SpaWert)  "" Then
.Cells(Zeile1, Spalte).Value = .Cells(Zeile, SpaWert).Value
End If
.Rows(Zeile).ClearContents
End If
Else
.Rows(Zeile).ClearContents
End If
Next
'Leere Zeilen löschen
With .Range(.Cells(1, SpaKey), .Cells(ZeileLetzte, SpaKey))
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
End With
.Columns.AutoFit
End If
End With
'Fehlerbehandlung
Fehler:
With Err
Select Case .Number
Case 0 'kein Fehler
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbOKOnly, sMsgTitel
End Select
End With
Beenden:
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End Sub

Anzeige
AW: Liste umgruppieren
26.10.2012 08:55:25
Wilfied
ganz Klasse, vielen Dank
Will

AW: Liste umgruppieren
30.10.2012 07:38:42
Wilfied
Hallo Franz, hallo Leutz,
ok.....
ich bin nun in der Evolutionsstufe etwas weiter gekommen und wende das Umgruppierungsmakro für 2 Fälle an.
das ursprüngliche Makro:
Sub Daten_umgruppieren()
Dim wks As Worksheet
Dim Zeile As Long, Zeile1 As Long, ZeileLetzte As Long, SpaKey As Long, SpaWert As Long
Dim sMsgTitel As String
Dim StatusCalc As Long
Dim varKey
'Makrobremsen lösen
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
sMsgTitel = "Daten in Zeilen umgruppieren"
On Error GoTo Fehler
Set wks = ActiveSheet 'oder = Worksheets("Tabelle1")
'Blatt mit Daten zum Umgruppieren kopieren
wks.Copy After:=wks
Set wks = ActiveSheet
With wks
'Titelzeile einfügen
.Rows(1).Insert
.Cells(1, 1).Value = "MyDate"
.Cells(1, 2).Value = "MyNumber"
.Cells(1, 3).Value = "Total Qty"
.Cells(1, 4).Value = "Spinst 01"
.Cells(1, 5).Value = "Time 01"
.Cells(1, 6).Value = "Mat cost 01"
.Cells(1, 7).Value = "Labour cost 01"
.Cells(1, 8).Value = "Total cost 01"
.Cells(1, 9).Value = "Spinst 02"
.Cells(1, 10).Value = "Time 02"
.Cells(1, 11).Value = "Mat cost 02"
.Cells(1, 12).Value = "Labour cost 02"
.Cells(1, 13).Value = "Total cost 02"
.Cells(1, 14).Value = "Spinst 03"
.Cells(1, 15).Value = "Time 03"
.Cells(1, 16).Value = "Mat cost 03"
.Cells(1, 17).Value = "Labour cost 03"
.Cells(1, 18).Value = "Total cost 03"
SpaKey = 2                                    'Spalte mit den zu vergleichenden Werten
SpaWert1 = 4                                   'Spalte mit den zu übertragenden Werten
SpaWert2 = 5
SpaWert3 = 6
SpaWert4 = 7
SpaWert5 = 8
ZeileLetzte = .Cells(.Rows.Count, SpaKey).End(xlUp).Row
If ZeileLetzte  "" Then
If varKey  .Cells(Zeile, SpaKey).Value Then
varKey = .Cells(Zeile, SpaKey).Value
Zeile1 = Zeile
Else
.Cells(Zeile1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = _
.Cells(Zeile, SpaWert1).Value
.Cells(Zeile1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = _
.Cells(Zeile, SpaWert2).Value
.Cells(Zeile1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = _
.Cells(Zeile, SpaWert3).Value
.Cells(Zeile1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = _
.Cells(Zeile, SpaWert4).Value
.Cells(Zeile1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = _
.Cells(Zeile, SpaWert5).Value
.Rows(Zeile).ClearContents
End If
Else
.Rows(Zeile).ClearContents
End If
Next
'Leere Zeilen löschen
With .Range(.Cells(1, SpaKey), .Cells(ZeileLetzte, SpaKey))
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
End With
.Columns.AutoFit
'Fehlerbehandlung
Fehler:
With Err
Select Case .Number
Case 0 'kein Fehler
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbOKOnly, sMsgTitel
End Select
End With
Beenden:
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End If
End With
End Sub
erfüllt seinen Zweck, auch wenn ich hier wieder die unsaubere Spaltenkopfbenamung gewählt habe.
das einzige Thema was ich jetzt noch habe ist, dass das Makro das Ergebnis in ein vorhandenes Tabellenblatt schreiben soll, was "Ergebnis" heißt.
Im Moment generiert es immer eine Kopie des Originalblattes und hängt (2) dahinter. Ist dieses Blatt schon vorhanden macht das Makro (3).
Ich muss die Ergebnisse aber über einen Sverweis weiter verarbeiten, den ich gerne in einem dritten Blatt schon vordefinieren möchte, was mir aber nicht gelingt wenn ich den Blattnamen nicht schon habe.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige