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' | |||||||
A | B | C | D | E | F | G | |
1 | Anlage | HGLP | CGL | H47 | C46 | N46 | |
2 | 3223423 | 34 | 43 | 45 | 6 | ||
3 | 56883 | 34 | |||||
4 | 6786787 | 10 | 5 | 6 | |||
5 | 567567 | 5 | 5 | 5 | |||
6 | 8867856 | 5 | |||||
7 |
Zelle | Formel |
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 |
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 SubDer 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 SubGruß Daniel