Microsoft Excel

Herbers Excel/VBA-Archiv

Datensatztabelle neu anordnen


Betrifft: Datensatztabelle neu anordnen von: Ralf
Geschrieben am: 13.09.2019 16:25:22

Hallo,

ich möchte gerne mit VBA einen kompletten Datensatz aus einer Tabelle in eine zweites Tabellenblatt kopieren und dabei den Inhalt neu anordnen.

Ich hoffe und würde mich freuen, wenn ihr mich mit der Erstellung eines VBA Makros unterstützen könntet, da leider meine VBA Kenntnisse bislang hierfür nicht ausreichend sind.

Ausgangssituation ist ein Datensatz mit x Zeilen und y Spalten (Tab. "Datensatz")
Zielformat: Tabelle "Zielformat" siehe link im Anhang!

Die jeweiligen Datensätze in der Tabelle "Datensatz" sollen in die Tabelle "Zielformat" übertragen und dabei neu umsortiert werden.

Führendes Element: "Anlage" in der Spalte A
- aus der Tabelle "Datensatz" sollen die Texte aus den Spalten A, B, D, F und G jeweils ausgelesen und in Tabelle "Zielformat" Zeile 1 nur einmalig aufgeführt (kopiert) werden

- ein Datenpaar in der Tabelle "Datensatz" besteht immer aus einem Artikel und einem Zahlenwert rechts daneben.

- ab Zeile 2 bis max. Anzahl Datensätze sollen jeweils die Werte rechts des jeweiligen Artikels aus dem Datenpaar in die Tabelle "Zielformat" der jeweils zughörigen Anlage kopiert werden.

- d.h. der Vorgang erscheint nun einmalig in der Spalte, der Zahlenwert jeweils darunter in der entsprechenden Zeile der Anlage.

Beispiel: siehe Excel Datei im Anhang
https://www.herber.de/bbs/user/132032.xlsx

Danke im voraus!

VG Ralf

  

Betrifft: AW: nachgefragt ... von: 1712980.html
Geschrieben am: 13.09.2019 17:27:36

Hallo Ralf,

... Deine Excelversion 2010 hat standardmäßig PowerQuery (PQ) nicht installiert. PQ wäre jedoch von der MS-Seite kostenfrei herunterzuladen und nachzuinstallieren. Wäre das eine Option für Dich?

Wenn es keine Massendatenauswertung (tausende Datensätze und/oder sehr viele Spaltenwertangaben) werden soll, käme evtl. auch schon eine eine Formellösung in Betracht. Wie viele Datensätze sind denn ca. max auszuwerten und wie viele Spaltendaten max.?

Deine Angaben im Zielformat widersprechen Deinen verbalen Angaben, wonach in Zeile 1 die Artikel nur einmalig gelistet werden sollen. In Deinem Beispiel sind die Angaben in G1 und H1 bereits in C1 und F1 vorhanden. Was gilt?

Nachfolgend zunächst mal eine reine Beispiel-Formellösung, die momentan allerdings noch davon ausgeht, dass sämtliche Artikel schon in Spalte B der Datenquelle gelistet sind (wie es im Beispiel auch der Fall ist).

Formel B1 weit genug nach rechts, A2 nach unten und B2 nach unten und rechts kopieren.

Arbeitsblatt mit dem Namen 'Zielformat'
 ABCDEFG
1AnlageHGLPCGLH47C46N46 
232234233443 456 
356883 34    
46786787 1056  
55675675 55  
68867856    5 
7       

ZelleFormel
B1=WENNFEHLER(INDEX(Datensatz!$B:$B;AGGREGAT(15;6;ZEILE(Datensatz!$B2:$B9)/(ZÄHLENWENN($A1:A1;Datensatz!$B2:$B9)=0)/(Datensatz!$B2:$B9<>"");1));"")
A2=Datensatz!A2
B2=WENNFEHLER(INDEX(Datensatz!$A:$I;;VERGLEICH(B$1;Datensatz!2:2;0)+1);"")
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg


Gruß Werner
.. , - ...
  

Betrifft: AW: Datensatztabelle neu anordnen von: 1712986.html
Geschrieben am: 13.09.2019 17:51:20

HI
mit einem kleinen Zwischenschritt sollte die Transformation gelingen, auch bei größeren Datenmengen.
schau dir mal das Beispiel an
Spalte K:O ist der Zwischenschritt
Spalte Q:U ist das Ergebnis
Die Dopplungen in der Überschrift habe ich eleminiert


https://www.herber.de/bbs/user/132033.xlsx

Gruß Daniel

  

Betrifft: AW: Stabil wie ein Panzer von: 1712988.html
Geschrieben am: 13.09.2019 17:56:38

Hallo,

passend zu den Produkten der Firma hier eine Variante, die recht gut zu pflegen ist:

 Public Type Panzer
     Anlage  As Long
     HGLP    As Integer
     CGL     As Integer
 End Type
 
 Sub T_1()
 n = 6
 Dim Atr() As Panzer
 ReDim Atr(n)
 
 'Einlesen
 For i = 2 To n
     Atr(i).Anlage = Cells(i, 1)
     For j = 2 To 9 Step 2
     
         Select Case Cells(i, j)
             Case Is = "HGLP": Atr(i).HGLP = Cells(i, j + 1): Debug.Print i, j, Atr(i).HGLP
             Case Is = "CGL": Atr(i).CGL = Cells(i, j + 1): Debug.Print i, j, Atr(i).CGL
             Case Else: 'Debug.Print Cells(i, j)
         End Select
     Next j
 Next i
 
 'Ausgabe
 With Sheets("Tabelle3")
     For i = 2 To n
         .Cells(i, 1) = Atr(i).Anlage
         .Cells(i, 2) = Atr(i).CGL
         .Cells(i, 3) = Atr(i).HGLP
     Next i
 End With
 End Sub
 
Der Rest ist Fleißarbeit.
  

Betrifft: Wenn schon per Makro von: 1713043.html
Geschrieben am: 14.09.2019 12:30:18

dann kann man doch aus die Ermittlung der Spaltenüberschriften über das Makro ausführen lassen.
dann ist man sicher, dass man keine vergessen hat:

Sub umbauen()
Dim Ausgang
Dim Ziel
Dim ÜB As String
Dim Wert As Double
Dim z As Long
Dim sA As Long
Dim sZ As Variant

With Sheets("Datensatz")
    Ausgang = .Cells(1, 1).CurrentRegion.Value
    Ziel = .Cells(1, 1).CurrentRegion.Columns(1).Value
End With

For z = 2 To UBound(Ausgang, 1)
    For sA = 2 To UBound(Ausgang, 2) Step 2
        ÜB = Ausgang(z, sA)
        Wert = Ausgang(z, sA + 1)
        If ÜB <> "" Then
            sZ = Application.Match(ÜB, WorksheetFunction.Index(Ziel, 1, 0), 0)
            If VarType(sZ) = vbError Then
                sZ = UBound(Ziel, 2) + 1
                ReDim Preserve Ziel(1 To UBound(Ziel, 1), 1 To sZ)
                Ziel(1, sZ) = ÜB
            End If
            Ziel(z, sZ) = Wert
        End If
    Next
Next

With Sheets("Zielformat")
    .Cells.Clear
    .Cells(1, 1).Resize(UBound(Ziel, 1), UBound(Ziel, 2)) = Ziel
End With
End Sub
Gruß Daniel

Beiträge aus dem Excel-Forum zum Thema "Datensatztabelle neu anordnen"