Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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

Tabelleinhalt über 2 Variablen auslesen

Tabelleinhalt über 2 Variablen auslesen
19.11.2023 16:32:07
Klaus Maier
Sehr geschätzte Fachexperten des Excel-Forums!

Ich verwende für die Verwaltung bzw. Archivierung meiner CD-Sammlung eine Excel-Arbeitsmappe mit Makros.
Jeder CD werden spalten- und zeilenweise Attribute, beispielsweise zu den Musikern und deren Instrumente oder den Songtiteln zugeordnet. 1 CD-Datensatz umfasst dabei so viele Zeilen, wie für die Erfassung der Musiker bzw. Songs erforderlich ist. Allen Datenzeilen einer CD wird dabei in Spalte A ein eindeutiger Schlüssel, sozusagen eine ID zugeordnet.
Beispieldatei: https://www.herber.de/bbs/user/164438.xlsm

Um z.B. festzustellen, auf welchen CDs ein bestimmter Musiker mitspielt, verwende ich seit einigen Jahren ein Filtermakro, bei dessen Erstellung mir die Community im Herber-EXCEL-Forum netterweise sehr unter die Arme gegriffen hat.
Dabei passiert folgendes: Der Musikername in der markierten Zelle in Spalte H wird in einer Schleife als Variable verwendet, und alle Zeilen meines „Archivs“, in denen dieser Suchbegriff vorkommt, werden ausgelesen und in einer eigenen Auswertungstabelle zusammengefasst.

Private Sub SuBe_Auswertung_Test()

Dim inRoQ As Long, inRoZ As Long, i As Long, eZ As Long
Dim blaNaQ As String, blaNaZ As String
Dim SuBe As Variant
Dim konvSuBe As Variant
On Error GoTo TestError

SuBe = ActiveCell.Value

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("CDA").Select

Cells.Select
Selection.Copy
Sheets.Add
ActiveSheet.Name = "Filter_TEMP"
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
blaNaQ = ActiveSheet.Name
Sheets("CDA").Select
Application.CutCopyMode = False
Range("A2:Q2").Select
Range("A3").Select

If SuBe = "" Then
MsgBox "Makro-Abbruch wegen fehlendem Suchbegriff" & Chr(10) & _
" oder Drücken der Abbrechen-Taste !", , _
"MAKROABBRUCH"
Sheets(blaNaQ).Delete
Exit Sub
End If


Application.ScreenUpdating = False
konvSuBe = (UCase(SuBe))
blaNaZ = "SuBe " & konvSuBe
Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = blaNaZ
Sheets(blaNaQ).Select
inRoQ = Cells(Rows.Count, 2).End(xlUp).Row
eZ = 0
For i = 1 To inRoQ Step 1
If InStr(UCase(Cells(i, 8).Value), konvSuBe) > 0 Then
eZ = eZ + 1
With Worksheets(Sheets.Count)
inRoZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
If eZ = 1 Then inRoZ = 1
.Cells(inRoZ, 1).Value = Cells(i, 1).Value
.Cells(inRoZ, 2).Value = Cells(i, 2).Value
.Cells(inRoZ, 3).Value = Cells(i, 3).Value
.Cells(inRoZ, 4).Value = Cells(i, 4).Value
.Cells(inRoZ, 5).Value = Cells(i, 5).Value
.Cells(inRoZ, 6).Value = Cells(i, 6).Value
.Cells(inRoZ, 7).Value = Cells(i, 7).Value
.Cells(inRoZ, 8).Value = Cells(i, 8).Value
.Cells(inRoZ, 9).Value = Cells(i, 9).Value
.Cells(inRoZ, 10).Value = Cells(i, 10).Value
.Cells(inRoZ, 11).Value = Cells(i, 11).Value
.Cells(inRoZ, 12).Value = Cells(i, 12).Value
.Cells(inRoZ, 13).Value = Cells(i, 13).Value
.Cells(inRoZ, 14).Value = Cells(i, 14).Value
End With
End If
Next i
Sheets(blaNaZ).Select
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("D1").Value = "SuBe: " & SuBe
If eZ = 0 Then
MsgBox _
"Es wurden keine Zellen mit dem Suchbegriff *" & konvSuBe & "* gefunden !", , _
"SuBe"
Application.DisplayAlerts = False
Sheets(blaNaQ).Delete
Sheets(blaNaZ).Delete
Sheets("CDA").Select
Application.DisplayAlerts = True

Else
MsgBox _
"Es wurde(n) folgende Zeile(n) mit dem Suchbegriff *" & konvSuBe & "* gefunden !", , "SuBe"
Sheets(blaNaQ).Delete
Sheets(blaNaZ).Select

Range("A2:Q2").Select
Range("B3").Select
End If


Exit Sub
TestError:
Application.DisplayAlerts = True
Sheets(blaNaQ).Delete
Sheets(blaNaZ).Delete
MsgBox "Eine Auswertung für den Suchbegriff *" & konvSuBe & "* liegt bereits vor!"
Sheets("SuBe " & konvSuBe).Select
End Sub



Nun zu meiner Frage bzw. meiner Bitte an Euch.
Kann mir jemand dabei helfen diese Schleife so zu erweitern, dass nicht nur jene Zeilen ausgelesen werden, in denen der Suchbegriff auch tatsächlich vorkommt, sondern alle Zeilen einer CD, in denen dieser Suchbegriff auftaucht.
Also, der Musikername taucht z.B. in den CDs mit den laufenden Nummern 1707; 1474; 1708 auf und die Schleife soll jetzt alle Zeilen mit diesen laufenden Nummern auslesen.
Oder anders gesagt:
Jene Zeilen, die den Suchbegriff in Spalte H enthalten, haben in Spalte A jeweils eine LFD_NR stehen. Die Scheife soll nun alle Zeilen auslesen, in denen diese Nummer/Nummern vorkommen.


Vorab herzlichen Dank für eure Bemühungen
Klaus



7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelleinhalt über 2 Variablen auslesen
19.11.2023 21:31:51
Uduuh
Hallo,
mal als Rumpf zur Weiterentwicklung:
Sub klaus()

Dim objFilter As Object, objCD As Object, oObj
Dim vntIN, i As Long
Dim vntOUT
Dim strSuch As String, lngCOL As Long

strSuch = ActiveCell.Value
lngCOL = ActiveCell.Column
vntIN = Intersect(Cells(2, 1).CurrentRegion, Cells(2, 1).CurrentRegion.Offset(2))
Set objCD = CreateObject("scripting.dictionary")
Set objFilter = CreateObject("scripting.dictionary")

For i = 1 To UBound(vntIN)
If vntIN(i, lngCOL) = strSuch Then
objCD(vntIN(i, 1)) = 0
End If
Next i

objFilter(1) = Cells(2, 1).Resize(, UBound(vntIN, 2))
For i = 1 To UBound(vntIN)
If objCD.exists(vntIN(i, 1)) Then
objFilter(objFilter.Count + 1) = Cells(i + 2, 1).Resize(, UBound(vntIN, 2))
End If
Next i

vntOUT = Application.Transpose(objFilter.items)
vntOUT = Application.Transpose(vntOUT)
With Worksheets.Add
.Cells(1, 1).Resize(UBound(vntOUT), UBound(vntOUT, 2)) = vntOUT
.Name = strSuch
End With

End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: Tabelleinhalt über 2 Variablen auslesen
25.11.2023 10:06:23
Klaus Maier
Echt Klasse Udo!

Vielen lieben Dank nochmal - liefert genau das richtige Ergebnis!!!
und schöne Grüße aus Linz in OÖ
Klaus
ups. anforderung nicht komplett gelesen, das kann weg. owt
20.11.2023 07:14:25
ralf_b
AW: Tabelleinhalt über 2 Variablen auslesen
19.11.2023 22:59:49
Piet
Hallo

wie schön, es gibt bereits zwei Lösungen. Da bin ich gespannt. Wollte meine aber nicht in die Tonne klopfen!
Interessant ist, das sich die Kollegen weitgehend an die alten Variablen gehalten haben. Ich habe meine eigenen.
Im Code gibt es eine Zeile mit '** vor dem If Befehl. Den kannst du aktivieren, oder deaktiviert lassen!

Mit fiel auf, das mein Makro auch Zeilen auflistet, wo der Musiker nicht am Anfang, sondern in der Mitte steht!
Wenn du den Befehl aktivierst, die '** löschst, listet er nur die Zeilen auf, wo "abbasi, rez" am Anfang steht.

mfg Piet

Option Explicit         '20.11.2023  piet  für Herber Forum

Dim j As Long, i As Long
Dim lz1 As Long, ok As Variant


Sub SuBe_Auswertung_Test()
Dim SuSht As Worksheet, ze As Long
Dim SuBe As String, SuBeK As String

Sheets("CDA").Select
SuBe = ActiveCell.Value
'Musikername (umgekehrt mit Komma)
SuBeK = Trim(Mid(SuBe, InStr(SuBe, " "))) & ", "
SuBeK = SuBeK & Trim(Left(SuBe, InStr(SuBe, " ")))

If SuBe = "" Or SuBe = "leer" Then
MsgBox "Makro-Abbruch wegen fehlendem Suchbegriff" & Chr(10) & _
"oder Drücken der Abbrechen-Taste !", , "MAKROABBRUCH"
Exit Sub
End If

On Error Resume Next
Worksheets("SuBe " & UCase(SuBe)).Select

If ActiveSheet.Name > "CDA" Then
ok = MsgBox(SuBe & vbLf & "Diese Tabelle existiert bereits" _
& vbLf & "vorhandene Tabelle löschen??", vbYesNo)
If ok = vbYes Then ActiveSheet.Cells.Clear
If ok = vbNo Then Exit Sub
Else 'neue Tabelle einfügen
Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "SuBe " & (UCase(SuBe))
End If

On Error GoTo Fehler
Application.ScreenUpdating = False
Set SuSht = Worksheets("SuBe " & UCase(SuBe))

Sheets("CDA").Select
Rows(2).Copy SuSht.Rows(2)
SuSht.Range("A2:N2").Font.Bold = True
SuSht.Rows(2).Interior.ColorIndex = xlNone
lz1 = Cells(Rows.Count, 1).End(xlUp).Row
ze = 3 '1.Zeile zum auflisten

'Such-Schleife in Spalte H nach Musiker
For j = 1 To lz1
If InStr(Cells(j, 8), SuBe) Then
For i = j To lz1
If InStr(Cells(i, 2), SuBeK) = 0 Then Exit For
'** If Left(Cells(i, 2), Len(SuBeK)) > SuBeK Then Exit For
Cells(i, 1).Resize(1, 15).Copy
SuSht.Cells(ze, 1).PasteSpecial xlPasteValues
ze = ze + 1
Next i: j = i
End If
Next j

SuSht.Select: ze = ze - 3
Application.CutCopyMode = False

If ze = 0 Then
Application.DisplayAlerts = False
SuSht.Delete: Sheets("CDA").Select
Application.DisplayAlerts = True
MsgBox "Keine CD's in der Sammlung"
End If

Application.ScreenUpdating = True
If ze > 0 Then MsgBox ze & " CD's kopiert"
Exit Sub

Fehler: MsgBox "unerwarteter Fehler"
End Sub
Anzeige
AW: Tabelleinhalt über 2 Variablen auslesen
25.11.2023 08:20:33
Klaus Maier
Guten Morgen Piet!

Ich hoffe, meine Zusatzfrage erreicht dich noch........
Übrigens schön, dass du deine Version nicht in die Tonne geklopft hast :-)

Dein Script listet jene CD´s, in denen der Musiker aus Spalte H auch in Spalte B als Leader der Formation (z.B. rudresh mahanthappa in Spalte H wird zu mahanthappa, rudresh in Spalte B) .
Nun spielt der Leader in meiner Anforderung keine wesentliche Rolle, er kommt in Spalte H einer CD sowieso vor.

Ich würde sozusagen alle Zeilen jener CD´s benötigen, in denen der gesuchte Musiker in Spalte H auftaucht.
Der Schlüssel liegt also in Spalte A (LFD_NR). Ehrlich, ich hab´s versucht, selbst umzubauen, aber mir wird bei deinem VB Script echt schwindelig.

Könntest du da bitte nochmal drüberschaun.

Vielen lieben Dank aus und schöne Grüße aus Linz in OÖ.
Klaus
Anzeige
AW: Tabelleinhalt über 2 Variablen auslesen
19.11.2023 23:01:41
Piet
Nachtrag wenn eine neue Tabelle schon existiert, fragt mein Makro ob du die Daten löschen willst.
Für neue Musiker wird ein neues Blatt angelegt.
Vielen Dank euch allen!
20.11.2023 07:32:09
Klaus Maier
Liebe Grüße aus Linz (OÖ)
Klaus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige