Wie kann ich bei VBA nach mehreren Kriterien in einer Zeile suchen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Die Sternchen sind der Fehler.
warum arbeitest du aber mit "i" statt mit "Sp" und "j" statt mit "Ze"? ist doch eindeutiger.
verstehe ich es richtig dass du in der inneren If-Abfrage prüfst, dass die Zelle nicht leer ist? Dann wäre "If Cells (Ze, Sp). Value <> Empty Then" ... kürzer
auch verstehe ich nicht warum du die Zelle kopierst, statt den Wert zu übertragen. dann musst du diese auch nicht aktivieren.

"Worksheets ("Ergebnis").Cells (Ze, 10).Value =Cells(Ze, Sp). Value" wäre dann der einzige Code in der Abfrage.
Das Offset weiß ich jetzt nicht richtig einzuschätzen... aber wenn zb das zwar in Zeile 10, aber in der "nächsten Spalte" der Originalspalte sein soll, muss man ja dann nur "Sp+1" setzen und gut. Weiß aber nicht, ob das in deinem Fall so geht.

Ich habe im Test die erste If-Abfrage für mich etwas übersichtlicher gestaltet.
Vielleicht ist ja was dabei, was dir gefällt:

Text="AKMKaufteile"
For Sp = 1 To 1000
TText = Mid (Cells (1, Sp), 13, 1
InText = InStr (1, Cells (1, Sp).Value, Text)
If InText > 0 And IsNumeric (TText) Then

so ist die Zeile nicht so lang :-)
TText merkt sich das nächste Zeichen hinter dem "Text". ist es KEIN Buchstabe geht's eben weiter.
InText prüft ob der 'Text' überhaupt vorkommt.


Garfield0001  04.05.2016, 23:45

genau. ich dachte nur dass immer etwas dahinter steht

0
shikser 
Beitragsersteller
 09.05.2016, 08:06
@Garfield0001

Nee wenn die Überschrift das erste Mal auftaucht steht da leider nix hinter... Aber dank eurer Hilfe klappt das jetzt schon sehr gut :)

0
shikser 
Beitragsersteller
 04.05.2016, 13:25

So, ich habe das jetzt getestet.

Sehr gut daran finde ich, dass keine Zelle mit D oder B benutzt wird, allerdings unterschlägt mir das Makro auch die Spalte, wo nur AKMKaufteile steht, also ohne irgendeinen Zusatz...

Gibt es dafür noch eine andere Möglichkeit, das mit in den Code einzugeben oder muss ich für diesen Fall einfach ne neue Schleife machen?

Gruß

0
Ninombre  04.05.2016, 23:08
@shikser

vermutlich reicht eine Anpassung:

If intext > 0 And IsNumeric(ttext) Or intext > 0 And ttext = "" Then

0
shikser 
Beitragsersteller
 09.05.2016, 08:06
@Ninombre

Das klappt hervorragend, vielen Dank :)

0
shikser 
Beitragsersteller
 04.05.2016, 12:41

Moin,

vielen Dank für die ausführliche Antwort. Ich mache mich  gleich mal an die Umsetzung, werde mich wieder melden wenn es geklappt hat (oder ich es nicht schaffe :D)

Die Sache mit i und j war einfach nur Faulheit, und da ich grade nur einzelne Makros zum Testen schreibe, naja eigentlich fällt mir da keine gescheite Ausrede zu ein :D

Ich gelobe Besserung :P

Gruß

Jan

0

Die Sternchen musst Du bei den Suchbegriffen weglassen. Instr sucht genau nach dem angegebenen Wortteil. * wird nicht als Platzhalter interpretiert. Ansonsten müsste es meinem Verständnis nach mit dem Code funktionieren


shikser 
Beitragsersteller
 04.05.2016, 12:36

Vielen Dank für die Antwort.

Das mit den Sternchen hatte ich nur mal ausprobiert und vergessen die hier wieder zu löschen :D

Hatte leider auch nicht geklappt :/

irgendwo muss ich da noch was anderes haben...

0
Iamiam  04.05.2016, 19:56
@shikser

Der Wortteil ist ja auch in den uninteressanten Texten zu finden. dazu ist mir bis jetzt aber auch noch nichts gescheites eingefallen ausser einem umständlichen Und istfehler(

... And iserror(InStr(1, Cells(1, i).Value, "AKMKaufteileD") And iserror(InStr(1, Cells(1, i).Value, "AKMKaufteileB")

wobei ich erst mal abtesten müsste, ob instr() tatsächlich einen Fehler ausgibt-

Das lässt sich übrigens genausogut auch mit einer Formel machen nach dem gleichen Schema:

=Wenn(Und(Nicht(istfehler(suchen("AKMKaufteile";Zelle;1)>0)));istfehler(suchen("AKMKaufteileD";Zelle;1));istfehler(suchen("AKN....B";Zelle;1)));"Spalte relevant";"nicht relevant")

0
Ninombre  04.05.2016, 23:12
@Iamiam

ganz verstehe ich nicht, warum es mit der bisherigen Abfrage nicht funktionieren soll. Instr liefert eine 0 wenn der Suchbegriff nicht gefunden wird. Wenn in der Zelle AKMKaufteile123 steht und man auf "AKMKaufteile" abfragt, wird ein >0 geliefert und bei der Abfrage auf "AKMKaufteileD" eine 0. Die UND Bedingung sollte also funktionieren.

Wie genau äußert sich das "klappt nicht"?

0

Lösch die Sternchen bei AKMKaufteileB und AKMKaufteileD.


shikser 
Beitragsersteller
 04.05.2016, 12:36

Vielen Dank für die Antwort.

Das mit den Sternchen hatte ich nur mal ausprobiert und vergessen die hier wieder zu löschen :D

Hatte leider auch nicht geklappt :/

0