Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1488to1492
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

Datenbank mit Excel VBA

Datenbank mit Excel VBA
26.04.2016 12:15:11
Ned
Hallo zusammen,
ich bin gerade dabei eine Datenbank mit Excel VBA zu erstellen. Und zwar befinden sich in dieser Technologien die anhand von verschiedenen Kriterien bewertet worden. (aktuell sind es noch Dummy Files) Dem Anwender soll es ermöglicht werden anhand dieser Kriterien eine Suche durchzuführen, um die passende Technologie für seine Zwecke herauszufinden. Um dies zu erreichen, habe ich einen Suchbereich eingerichtet, in dem der Anwender nach den verschiedenen Kriterien suchen kann. Die eigentliche Suche möchte ich über einen "Advanced Filter" durchführen und habe deshalb einen Kriterienbereich eingerichtet. Der Kriterienbereich (P4= Überschrift; P5=Formel und soweiter für die anderen Kriterien bis W) und der Suchbereich sind mit einer =WENN(C4="";"*";C4) verlinkt und das für die anderen Kriterien geht dann entsprechend bis J. Nur wenn ich jetzt das Makro aufnehme und es ausführe um mit diesem (Das Makro schreibe ich unter den Text) die Daten zu filtern werden von 27 Datensätzen nur 1 angezeigt, obwohl kein Kriterium eingegeben ist "*". Ich habe schon alles versucht, was mit so eingefallen ist, jedoch hat nicht funktioniert. Also die Überschrift nicht von Hand eingegeben, sondern kopiert und so weiter. Was auch merkwürdig ist wenn ich die, WENN Formel bis auf eine entferne, werden alle Datensätze angezeigt ich kann dann leider nur nach einem Kriterium suchen. Ich hoffe, von Euch kann mir wer weiterhelfen oder einen neuen Ansatz aufzeigen, wie ich das Problem lösen kann.
Das ist das Makro:
Sub Filter()
' Filter Makro
'    Sheets("Daten").Range("B4:I77").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("P4:W5"), CopyToRange:=Range("C6:J6"), Unique:=False
End Sub
Und hier der Link zu der Excel-Datei:
https://www.herber.de/bbs/user/105258.xlsm
Schon mal vielen Dank für die Hilfe.
MFG
Ned Flanders

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbank mit Excel VBA
26.04.2016 14:15:38
ChrisL
Hi
Ich blicke auch nicht ganz durch, lasse die Frage daher offen.
Ob du ein Kriterium leer lässt, oder als Wildcard definierst, sollte m.E. im Resultat keinen Unterschied machen.
Irgendwie scheint der Advanced Filter "" und 'leer' nicht gleich zu interpretieren. Wenn das Feld leer ist, scheint es zu funktionieren, wenn das Feld "" enthält (aufgrund der WENN Formel), geht es nicht.
Da du sowieso mit VBA unterwegs bist, folgender Vorschlag:
Sub Filterme()
Dim c As Range
With Sheets("Filter")
.Range("P5:W5") = .Range("C4:J4").Value
For Each c In .Range("P5:W5")
If Not IsEmpty(c) Then c = "*" & c & "*"
Next c
Sheets("Daten").Range("B4:I77").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Range("P4:W5"), CopyToRange:=.Range("C6:J79"), Unique:=False
End With
End Sub

cu
Chris

Anzeige
AW: Datenbank mit Excel VBA
28.04.2016 19:38:00
Ned
Hallo
Vielen Dank für die schnelle Antwort Cris und dein Vorschlag funktioniert wunderbar und ist genau was ich mir vorgestellt habe.
Ein kleines Problem habe ich noch, das hatte ich bei der ursprünglichen Beschreibung auch vergessen zu erwähnen. Und zwar möchte ich auch nach Zahlen suchen. Wenn ich aktuell nach Zahlen suche, ist das Ergebnis, dass mir rein gar nicht angezeigt wird. Bei allen anderen Suchbegriffen funktioniert es... Ich habe eine Userform geschrieben und habe das Sub Filterme() dort für den Filter Button genutzt ist das so richtig?
Vielleicht kann mir von euch wer sagen, wo das Problem liegt bzw. wie ich es beheben kann?
Zusätzlich wäre es genial, wenn man den Wert 400 eingibt zum suchen, es in der Datenbank nicht genau den Wert 400 gibt und das Programm dann das/(die) nächste(n) Ergebnis(se) anzeigt wie z.B. den Wert 390 oder 450 etc. Ist so was möglich? ;)
Hier noch der Link für die Datei:
https://www.herber.de/bbs/user/105324.xlsm
Vielen Dank für die Hilfe im Voraus.
MFG
Ned Flanders

Anzeige
AW: Datenbank mit Excel VBA
29.04.2016 08:58:19
ChrisL
hi
Problem 1: Für Zahlen lassen sich keine Wildcards verwenden
Sub Filterme()
Dim c As Range
With Sheets("Filter")
.Range("P5:W5") = .Range("C4:J4").Value
For Each c In .Range("P5:W5")
If Not IsEmpty(c) And Not IsNumeric(c) Then c = "*" & c & "*"
Next c
Sheets("Daten").Range("B4:I77000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Range("P4:W5"), CopyToRange:=.Range("C6:J79000"), Unique:=False
End With
End Sub

Problem 2:
https://www.herber.de/bbs/user/105333.xlsm
Sub Filterme()
Dim c As Range
With Sheets("Filter")
Call CopyText(.Range("G4"), .Range("U5"))
Call CopyText(.Range("H4"), .Range("V5"))
Call CopyZahl(.Range("F4"), .Range("S5"))
Call CopyZahl(.Range("I4"), .Range("V5"))
Call CopyZahl(.Range("J4"), .Range("Y5"))
Sheets("Daten").Range("B4:I77000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Range("P4:Z5"), CopyToRange:=.Range("C6:J79000"), Unique:=False
End With
End Sub

Private Sub CopyText(rng1 As Range, rng2 As Range)
If IsEmpty(rng1) Then
rng2 = ""
Else
rng2 = "*" & rng1 & "*"
End If
End Sub

Private Sub CopyZahl(rng1 As Range, rng2 As Range)
Const Toleranz As Currency = 0.1  ' hier einstellen 0.1 = 10 % plus/minus
If IsEmpty(rng1) Then
rng2 = ""
rng2.Offset(0, 1) = ""
Else
rng2 = ">" & rng1 * (1 - Toleranz)
rng2.Offset(0, 1) = "

Allerdings frage ich mich jetzt langsam schon, was die die Aktion mit dem erweiterten Filter soll. Es handelt sich m.E. um stink normale Filterkriterien und du baust hier den Autofilter nach.
cu
Chris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige