Herbers Excel-Forum - das 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
Excel-Beispiele zum Thema "Datensatztabelle neu anordnen"
Werte 1 und 0 in einem bestimmten Verhältnis zufällig anordnen Datensätze in zweitem Blatt anders anordnen
Beim Öffnen zweites Fenster erzeugen und anordnen
Bewerten Sie hier bitte das Excel-Portal