Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Inhalte in neue Tabellen mit Bedingungen

Inhalte in neue Tabellen mit Bedingungen
16.03.2021 09:26:57
Claudia
Moin,
ich habe folgendes Problem.
In angehängter Beispieldatei sind folgende Probleme vorhanden.
Ein Artikel (Q) kann mehrere Lieferanten mit je mehreren Preisgültigkeiten(S) haben.
Ich benötige jetzt eine Möglichkeit aus der Tabelle je Lieferant(A) eine neue Tabelle zu generieren (das Makro ist schon in der Tabelle enthalten). Dabei sollte allerdings die Überschrift immer mitkopiert werden und die es interessiert immer nur der Datensatz eines Artikels des entsprechenden Lieferanten mit dem jüngsten Datum in der Spalte gültig ab (S)
ich habe vor Jahren schon mal mit VBA und .net gearbeitet, ist aber leider viel zu lange her.
Mit Formeln würde ich das vergleichen irgendwie hinbekommen, sollen aber auch andere Mitarbeiter nutzen können.
Datei hier: https://www.herber.de/bbs/user/144827.xlsm
Hilfe wäre super, vielen Dank
Grüße
Claudia

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: und warum nicht mit PowerQuery? ...
16.03.2021 10:13:52
neopa
Hallo Claudia,
... diese Funktionalität findest Du unter Daten und da unter Abrufen und transformieren.
Übrigens können auch Mitarbeiter Excelarbeitsmappen mit Formeln nutzen. Sie müssen diese ja nicht zwingend verstehen.
Gruß Werner
.. , - ...

AW: und warum nicht mit PowerQuery? ...
16.03.2021 12:24:30
Claudia
Moin,
also die gefilterte Liste bekomme ich mit Power Query hin.
Dann das Ergebnis dieser Abfrage speichern und dann das Makro drüberlaufen lassen um die Tabellen je Lieferant zu erstellen.
So würde ich den Ablauf verstehen, da ich nicht weiß wie man in PowerQuery neue Tabellenblätter erstellt.
Ist das so richtig?
Wäre es vielleicht noch möglich in dem Makro aus der Datei noch das Kopieren der Überschrift mit einzubauen, bzw. mir den Syntax dazu geben? Einbauen kann ich dann ja auch selbst.
Danke und Grüße
Claudia

Anzeige
AW: VBA-Lösung gesucht, thread offen owT
16.03.2021 13:12:43
neopa
Gruß Werner
.. , - ...

AW: und warum nicht mit PowerQuery? ...
16.03.2021 23:30:51
Yal
Hallo Claudia,
vielleicht tue ich damit deine VBA-Fähigkeit überstrapzieren, aber probieren wir mal.
Lösungsweg:
_ deine Haupttabelle wird zu eine Datentabelle (Menü "Daten", "Tabelle") gemacht,
_ darauf eine einfache Query. Nur die Preise werden sortiert. Keine Rückgabe,
_ dann pro Artikel, mit Dictionary, sodass es keine Doppelung gibt, die Query gefiltert nach Artikel in eine neues Blatt gerufen,
_ der Link zu Query getrennt.
Noch gibt es bei mir einige Störungen, weil der Code bleibt ab und zu stehen, aber ich glaube es liegt an meinem Excel.
Sub Artikel_auflisten()
Dim Artikel
Dim wQ As Worksheet
Dim D As New Dictionary
Set wQ = Worksheets("Eigenlistungskontrolle")
'DatenTabelle ("Intelligente" Tabelle) erzeugen
If Not ListObject_exists(wQ, "Tabelle1") Then _
wQ.ListObjects.Add(xlSrcRange, wQ.UsedRange, , xlYes).Name = "Tabelle1"
'darauf Query herstellen
If Not Query_exists("Artikel") Then QueryArtikel_herstellen
'Für jedes Artikel, aber nur einmal
For Each Artikel In wQ.ListObjects("Tabelle1").ListColumns("Artikel").DataBodyRange.Cells
If Not D.Exists(Artikel.Value) Then
D(Artikel.Value) = 0
QueryArtikel_anwenden Artikel
End If
Next
End Sub
Private Function ListObject_exists(ws As Worksheet, ListObjectName) As Boolean
On Error Resume Next
ListObject_exists = Not (ws.ListObjects(ListObjectName) Is Nothing)
End Function
Private Function Query_exists(QueryName) As Boolean
On Error Resume Next
Query_exists = Not (ActiveWorkbook.Queries(QueryName) Is Nothing)
End Function
Private Sub QueryArtikel_herstellen()
ActiveWorkbook.Queries.Add Name:="Artikel", Formula:= _
"let" & Chr(13) & Chr(10) _
& "    Quelle = Excel.CurrentWorkbook(){[Name=""Tabelle1""]}[Content]," & Chr(13) & Chr(10)  _
_
& "    SortZ = Table.Sort(Quelle,{{""Preis"", Order.Ascending}})" & Chr(13) & Chr(10) _
& "in" & Chr(13) & Chr(10) _
& "    SortZ"
End Sub
Private Sub QueryArtikel_anwenden(ByVal ArtikelNr As String)
Dim Q As QueryTable
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = ArtikelNr
Set Q = ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Artikel; _
Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
With Q
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Artikel] WHERE [Artikel] = " & ArtikelNr)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "Artikel"
.Refresh BackgroundQuery:=False
End With
ActiveSheet.ListObjects("Artikel").Unlist
End Sub
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige