Excel 2007:automatisch transponieren?

Hallo alle miteinander,

ich habe ein mittelschweres Problem woran ich mir seit Tagen die Zähne ausbeiße.
Ich habe eine Excel-Tabelle die wie folgt aussieht

In Spalte A stehen Materialnummern
In Spalte B stehen zu den Materialnummern gestaffelte Stückzahlen untereinander, zu jeder Materialnummer unterschiedlich viele. D.h. jede Materialnummer deckt mehrere Zeilen ab.
In Spalte C stehen jeweils zu den gestaffelten Stückzahlen die Preise

Beispiel Ausgangsdatei:
url=[http://www.bilduploadr.de/view/9u6k5e4yt/][img]http:…]
[size=1]url=[http://www.bilduploadr.de/]kostenlos bilder hochladen[/url] - bilduploadr.de[/size]

Bespiel Zieldatei:

url=[http://www.bilduploadr.de/view/fwu3la5z/][img]http:/…]
[size=1]url=[http://www.bilduploadr.de/]kostenlos bilder hochladen[/url] - bilduploadr.de[/size]

Jetzt zum Problem:
Ich möchte automatisiert die jeweiligen Stückzahlen und Preise nebeneinander in den Spalten neben der Materialnummer haben, damit die Materialnummern nicht mehr doppelt vorkommen. Ich habe das ganze schon über ein Pivot probiert, dabei entstehen jedoch unzählige Spalten nebeneinander, aufgrund der unzähligen verschiedenen Staffelmengen.

Ich hoffe mir kann jemand bei diesem Problem unter die Arme greifen!?

Danke Euch im voraus für die Mühe und Zeit!

Deine Links funtionieren nicht
Hallo Sunny,

teste sie mal selbst in deinem beitrag.

So klappt es: http://www.bilduploadr.de/view/9u6k5e4yt/

Aber Bild hin oder her, lade doch gleich die mappe hoch, mit file-upload o.ä., s. FAQ:2606

Gruß
Reinhard

Hallo Sunny,

Du hast unterschiedliche Staffeln - wie sollen die denn neben den Materialnummern angeordnet werden?

Beispiel:

0815 0 100,00 €
0815 50 90,00 €
0815 100 80 begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting begin\_of\_the\_skype\_highlighting              0815 100 80      end\_of\_the\_skype\_highlighting,00 €
0815 1000 70,00 €
4711 10 30,00 €
4711 75 25,00 €
4711 150 20,00 €

Was soll jetzt passieren? Wie sollen die Spalten nun aussehen?

MatNr. ???? ???? ???? ???? ???? ???? ????
0815 ???? ???? ???? ???? ???? ???? ????
4711 ???? ???? ???? ???? ???? ???? ????

Gruß, Manfred

Hi Sunny,

ah jetzt ja, mit den Bildern…

Was soll mit den „überzähligen“ Zeilen passieren? Sollen Sie drinbleiben?

Gruß, Manfred

Hallo Sunny,

Folgendes Makro sollte das machen, was in Deinem Ziel sein soll. (Die Titelzeile „Staffel x“ setze ich dabei nicht; das kann aber ebenso noch mit reingebaut werden.)

Sub TransponierDasZeugs()
 Dim lngZeile As Long
 Dim strLastNr As String
 Dim strAktNr As String
 Dim lngStaffel As Long
 Dim lngStaffelzeile As Long
 Dim strStaffelbereich As String

 lngZeile = 2
 Do While Tabelle2.Cells(lngZeile, 1) ""
 strAktNr = Tabelle2.Cells(lngZeile, 1)
 If strAktNr strLastNr Then
 ' neue MatNr. =\> Staffel 1
 lngStaffel = 0
 lngStaffelzeile = lngZeile
 strLastNr = strAktNr
 End If
 lngStaffel = lngStaffel + 1
 strStaffelbereich = Tabelle2.Cells(lngZeile, 2) & "-" & Tabelle2.Cells(lngZeile, 3)
 ' Hochkomma, sonst wandelt Excel z. B. "1-9" in ein Datum um:
 Tabelle2.Cells(lngStaffelzeile, 3 + 2 \* lngStaffel) = "'" & strStaffelbereich
 Tabelle2.Cells(lngStaffelzeile, 4 + 2 \* lngStaffel) = Tabelle2.Cells(lngZeile, 4)
 ' ggf. noch in Zeile 1 die "Staffel x" setzen,
 ' entweder in jedem Durchlauf, oder Du merkst Dir das Maximum
 ' an Staffeln und setzt es im Anschluss.
 lngZeile = lngZeile + 1
 Loop
End Sub

Gruß, Manfred

Hallo! Idee OHNE Makro

bei pivot würde er alle unterschiedlichen Staffelmengen aller Materialnummern nebeneinander auseinanderziehen, richtig?
(Material XY hat dann ne Staffelmenge in 1., 4. und 27. Spalte oder so…)

verwende doch ein Spalte „Staffelnummer“ für die Pivottabelle und ziehen Staffelmenge UND Staffelpreis als Datenfeld in Deine Pivottabelle (und Materialnummer als Zeile)

wie die Staffelnummer erzeugen?

Fall A: Tabelle ist nach Materialnummern sortiert:

Formel in E2: =WENN($A2=$A1;SUMME(E1;1);1) und runterkopieren…
-> sollte bei jeder neuen Materialnummer mit 1 anfangen und dann hochzählen…

Fall B: Tabelle unsortiert:

Formel in E2: =ZÄHLENWENN(A$1:A2;A2) und runterkopieren…
-> findet und zählt alle gleichen Materialnummern vom Tabellenbeginn bis zur akt. Zeile…

so oder so: Formel in E1: =„Staffel“

jetzt musst Du nur noch ne NEUE Pivozzabelle anlegen mit dem Bereich A1:Exxx - wie oben angedeutet…

funzt das? cu kai

Guten Morgen,

danke Kai, sieht schon sehr gut aus. Nur habe ich noch ein Problem und zwar dass pro Zeile/Material nun wieder etliche Leerspalten entstehen und die Übersicht schlecht ist. Gibt es noch eine Methode, leere Zellen pro Zeile automatisch suchen zu lassen und zu löschen?

Guten Morgen Manfred,

die überzähligen Zeilen sollten automatisch gelöscht werden.

Danke & Gruß

Hallo,

so habe das Makro jetzt auch getestet, es arbeitet eiwandfrei.
Ist es möglich die restlichen Zeilen/Materialnummern automatisch löschen
zu lassen??

Gruß
Sunny

Hallo Sunny,

klar geht das:

Sub TransponierDasZeugs()
 Dim lngZeile As Long
 Dim strLastNr As String
 Dim strAktNr As String
 Dim lngStaffel As Long
 Dim lngStaffelzeile As Long
 Dim strStaffelbereich As String

 lngZeile = 2
 Do While Tabelle2.Cells(lngZeile, 1) ""
 strAktNr = Tabelle2.Cells(lngZeile, 1)
 If strAktNr strLastNr Then
 ' neue MatNr. =\> Staffel 1
 lngStaffel = 0
 lngStaffelzeile = lngZeile
 strLastNr = strAktNr
 End If
 lngStaffel = lngStaffel + 1
 strStaffelbereich = Tabelle2.Cells(lngZeile, 2) & "-" & Tabelle2.Cells(lngZeile, 3)
 ' Hochkomma, sonst wandelt Excel z. B. "1-9" in ein Datum um:
 Tabelle2.Cells(lngStaffelzeile, 3 + 2 \* lngStaffel) = "'" & strStaffelbereich
 Tabelle2.Cells(lngStaffelzeile, 4 + 2 \* lngStaffel) = Tabelle2.Cells(lngZeile, 4)
 ' ggf. noch in Zeile 1 die "Staffel x" setzen,
 ' entweder in jedem Durchlauf, oder Du merkst Dir das Maximum
 ' an Staffeln und setzt es im Anschluss.
 If lngZeile lngStaffelzeile Then
 Tabelle2.Rows(lngZeile).Delete
 Else
 lngZeile = lngZeile + 1
 End If
 Loop
End Sub

Gruß, Manfred

Hallo!

hast Du in Deiner Grundtabelle „leere“ Zeilen?
(Materialnummer mit Staffelmenge aber ohne Staffelpreis oder sowas?)

und hast Du die Pivottabellen-Methode verwendet?

-> dann kannst Du ein Seitenfeld (ganz oben reinzuziehen im Pivot-Assistenten) verwenden: einen ggf. neue Spalte in der Grundtabelle mit der Formel =WENN(SUMME(XX);1;0) wobei XX die jeweilige Zelle mit dem Staffelpreis ist in jeder Zeile…

-> wenn Du in dem Seitenfeld (heisst das so?) nur die Sätze mit „1“ filterst solltest Du keine leeren Daten/Zeilen bekommen

Oder meinst Du was ganz anderes: kannst Du Dein Beispiel nicht mal hochladen und zugänglich machen?

cu kai