Clever-Excel-Forum

Normale Version: Transponieren ect. großer Datenmengen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Liebe Excel Profis,

Ich möchte eine größere Datenmenge verarbeiten, im Anhang befindet sich eine Beispieldatei.

Hierbei sollte Spalte B transponniert werden sodass die Komma getrennten zahlen untereinander in der Spalte B stehen. Wichtig hierbei ist das die Spalte A ( ALcar Nr. ) genau daneben in gleicher anzahl der Zeilen steht wie zuvor die Spalte B transponniert wurde.

Sofern das erfolgreich verlaufen ist sollten die Zahlen in Spalte A wie z.B. 5210 noch ersetzt werden durch eine "Produkt ID"

Die Alcarnummern und Produkt ID könnte ich in einer seperaten Tabelle ( Daten2 ) wie in der Beispieldatei gezeigt zur Verfügung stellen. in der Tabelle 3 sollte dann alles fertig errechnete erscheinen.


Hat jemand eine Idee von euch? Wurde das Clever-Forum lediglich umbenannt? die URL ist nicht mehr zu erreichen?! Mir wurde dort bereits schonmal innerhalb von Kürze sehr professionell weiter geholen beim Thema transponieren.


Ich freue mich auf euer Feedback Smile

Liebe Grüße aus Hannover
Hi,

- wie kommen denn die Daten in dein Arbeitsblatt? Kannst du sie nicht von deiner Quelle aus mit "Text in Spalten" einfügen?
- Woher beziehst du deine Produkt-ID? Gibt es hier schon eine Möglichkeit, die beiden Nummern in der Quelle zu tauschen?

Zu deiner Frage bzgl. des Clever-Forums: Das CF wurde ohne Vorwarnung eingestellt. Der "harte Kern" der CF-User hat dann dieses Forum aus der Taufe gehoben.
Hi Günter,

zur Erläuterung: die 1. Tabelle ist eine große fertige Datei bestehend aus einer Herstellernummer ( für eine Stahlfelge ) und in Spalte B sogennante K-Typnummer ( anhand dieser Nummern werden über Ebay Fahrzeuge zugeordnet zu denen die Stahlfelge aus Spalte A passt )


Die Tabelle 2 Exportiere ich mir aus unserer Auktionsabwicklung für Onlineshops Afterbuy damit ich eine eindetige Zuordnung einer Alcar Nummer zu der Spezifischen Produkt ID habe, die Produkt ID wird von Afterbuy vergeben.

Ich muss die Daten aus 2 verschiedenen Quellen also zusammen fügen DENN:

Afterbuy erkennt für den Import der K-Typnummern nur den Indikator PRODUKT ID.

Weitere herausforderung hierbei, beim Import wird jeweils nur Spalte A in der die Produkt ID steht und Spalte B mit lediglich EINER K-Typnummer zugelassen. Sollte also in Spalte C beispielweise eine weitere K-Typnummer stehen wird diese schlicht weg nicht berücktsichtigt.

Danke für dein Verständnis es nachvollziehen zu wollen. Bei weiteren Fragen bin ich natürlich behilflich, ich denke über ein Marko sollte sich dies umsetzen lassen?! Habe nur absolut keine Kenntnisse wie ma sowas macht.
Hi,

ich habe leider keine Möglichkeit gefunden, das Problem mittels Formeln zu lösen. Hier hilft nach meiner Einschätzung tatsächlich nur VBA.

Dabei kann ich dir aber nicht helfen. Tut mir Leid.
Hallöchen,

und für mich geht das ein bischen zu sehr durcheinander, um helfen zu können.

Ich würde ... wenn überhaupt eine VBA-Lösung in Frage kommt ... ein geordneteres wenn; ...dann; ...sonst benötigen.

In der momentan vorhandenen Erklärung wird mir zu wild hin und zurückgesprungen.
Hallo,

dieser Code:

Code:
Option Explicit

Sub zusammenführen_und_Transponieren()

   Dim daten1
   Dim daten2, daten3
   Dim idNummer As Long
   Dim i As Long, j As Long, k As Long
   Dim lngAnzahl As Long
   Dim arrSplit
   Dim arr()

   With Worksheets("Daten1")
      lngAnzahl = .Range("A1").CurrentRegion.Rows.Count - 1
      daten1 = .Range("A1").CurrentRegion.Offset(1, 0).Resize(.Range("A1").CurrentRegion.Rows.Count - 1, 2)
   End With

   With Worksheets("Daten2")
      daten2 = .Range("A1").CurrentRegion.Offset(1, 0).Resize(.Range("A1").CurrentRegion.Rows.Count - 1, 1)
      daten3 = .Range("A1").CurrentRegion.Offset(1, 1).Resize(.Range("A1").CurrentRegion.Rows.Count - 1, 1)
   End With

   For i = 1 To lngAnzahl
      arrSplit = Split(RTrim(Replace(daten1(i, 2), ",", "")))
      
      idNummer = daten3(Application.WorksheetFunction.Match(CDbl(daten1(i, 1)), daten2, 0), 1)
      ReDim Preserve arr(1, UBound(arrSplit) + k)
      For j = 0 To UBound(arrSplit)
         arr(0, k) = idNummer
         arr(1, k) = arrSplit(j)
         k = k + 1
      Next j
   Next i

   With Worksheets("So sollte es sein")
      .Cells.Clear
      .Range("A1:B1").Resize(k) = Application.Transpose(arr)
   End With
  
End Sub

ergibt mit den eingestellten Beispielen in den Tabellen Daten1 und Daten2 dieses Ergebnis in Tabelle:

"So sollte es sein"

Arbeitsblatt mit dem Namen 'So sollte es sein'
 AB
1450927894725
2450927895662
3450927895328
4450927895329
5450927895330
6450927895332
7450927895333
84280721210254
94280721211896
104280721230972
114280721230973
124280721211896
134280721231606
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Hi Fragesteller,

wenn ich dich richtig verstanden habe, dann versuche es mit folgendem Code:

Code:
Sub MacheNeu()
   Dim lngZeile As Long
   Dim lngZiel As Long
   Dim lngLetzte As Long
   Dim wksZiel As Worksheet
   Dim arrDaten
   Set wksZiel = Worksheets("So sollte es sein")
   lngZiel = 1
   With Worksheets("Daten1")
      lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
      For lngZeile = 2 To lngLetzte
         If Application.Substitute(Right(.Cells(lngZeile, 2), 1), " ", "") = "," Then
            arrDaten = Split(Application.Substitute(Left(.Cells(lngZeile, 2), Len(.Cells(lngZeile, 2)) - 1), " ", ""), ",")
         Else
            arrDaten = Split(Application.Substitute(.Cells(lngZeile, 2), " ", ""), ",")
         End If
         wksZiel.Cells(lngZiel, 2).Resize(UBound(arrDaten) + 1, 1) = Application.Transpose(arrDaten)
         wksZiel.Range(wksZiel.Cells(lngZiel, 1), wksZiel.Cells(lngZiel + UBound(arrDaten), 1)) = .Cells(lngZeile, 1)
         lngZiel = lngZiel + UBound(arrDaten) + 1
         ReDim arrDaten(0)
      Next lngZeile
   End With
   With Worksheets("Daten2")
      lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
      For lngZeile = 2 To lngLetzte
         wksZiel.Columns(1).Replace What:=.Cells(lngZeile, 1), Replacement:=.Cells(lngZeile, 2), LookAt:=xlWhole
      Next lngZeile
   End With
   Set wksZiel = Nothing
End Sub


Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="left" alt="Grußformel">Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="middle" alt="Beverly's Excel - Inn">
Hallo,

1. das Clever-forum ist abgeschaltet, hier ist das Nachfolgeforum.
2. ist Deine Tabelle sehr ungeschickt aufgebaut:
-die Zahlen in Spalte A sind Texte
-es gibt mehrere Zeilen zu einer Nummer. Sind die wenigstens sortiert???
-mal ist ein Komma am Ende der der Zeile, mal nicht.
Ich habe das heute Mittag angefangen, aber keine Zeit es fertig zu stellen. Hier das Formelergebnis:
Hey Beverly,

du hast mir schon einmal prima im "Forum" geholfen. Ich habe dein VBA jetzt mal ausprobieren können, soweit funktioniert wohl alles,

es kommt aber eine Fehlermeldung:

wenn ich auf DEBUGGEN klicke zeigt er mir den Code an und das folgende ist gelb hinterlegt:

idNummer = daten3(Application.WorksheetFunction.Match(CDbl(daten1(i, 1)), daten2, 0), 1)


So wie es aussieht bricht der Vorgang bei ca. 1/3 der zuverarbeitenden Daten ab ????


Laufzeitfehler "13" steht dort als Fehler Typen unverträglich.




Anbei habe ich meine finale Datei beigefügt in der jetzt alle Daten enthalten sind, nach durchführung des Makro kommt der oben beschriebene Fehler.
PS: bei Atila seiner Variante des Makro Code bricht das Makro ebenfalls ab.....
Seiten: 1 2