Microsoft Excel

Herbers Excel/VBA-Archiv

InStr Befehl

Betrifft: InStr Befehl von: Florian
Geschrieben am: 09.09.2014 14:39:23

Liebe Leute,

ich habe ein Problem mit dem InStr- Befehl.

Ich möchte über ein Eingabefeld in meinem Worksheet(1) einen bestimmten Wert suchen und mir dessen Position dann an eine x-beliebige Stelle (jetzt "C10") ausgeben lassen. Habe bisher realisiert, dass er mir die Stelle ermittelt, sofern ich den exakten Wert eingebe.
Problem ist, dass der Suchbegriff meist nur Schlagwörter (z.B. "Shield") des exakten Wertes (z.B. "SHIELD GT.10") beinhaltet und Groß- und Kleinschreibung nicht beachtet werden soll.

Mein bisheriger Code sieht wie folgt aus:

Sub Test()
ValueToBeFound = ActiveWorkbook.Worksheets(1).cells(2, 3)
Row = 5
col = 3

While ((ActiveWorkbook.Worksheets(3).cells(Row, col) <> ValueToBeFound) And Row < 90)
    Row = Row + 1
Wend

If Row < 90 Then
    ValueFoundInRow = Row
    Range("C10").Value = ValueFoundInRow
Else
    Range("C10").Value = -1
End If
End Sub

Hoffe ihr könnt helfen!

Grüße,

Florian

  

Betrifft: AW: InStr Befehl von: yummi
Geschrieben am: 09.09.2014 14:44:05

Hallo Florian,

While (Instr(1,Ucase(ActiveWorkbook.Worksheets(3).cells(Row, col).value),Ucase( ValueToBeFound)) _
 <> 0 And Row < 90)
    Row = Row + 1
Wend
Gruß
yummi


  

Betrifft: AW: InStr Befehl von: Florian
Geschrieben am: 09.09.2014 14:49:26

Hey,

vielen Dank erst einmal für die schnelle Antwort!

Allerdings gibt gibt er mir jetzt den Wert "5" aus, obwohl der gesuchte Wert "11" sein müsste :/

Grüße,

Florian


  

Betrifft: AW: InStr Befehl von: yummi
Geschrieben am: 09.09.2014 15:00:44

Hallo Florian,
dann poste doch mal die Datei

Gruß
yummi


  

Betrifft: AW: InStr Befehl von: Florian
Geschrieben am: 09.09.2014 15:07:24

Hier die Datei:

https://www.herber.de/bbs/user/92550.xlsm


  

Betrifft: AW: InStr Befehl von: yummi
Geschrieben am: 09.09.2014 15:17:08

Hallo Florian,

wenn ich deine Sub Test laufen lasse, dann sucht er nach dem Inhalt von C2, welcher leer ist und findet in zeile 82 die erste leere Zelle und diese Zahl schreibt er in C10, warum auch immer du die Zeile dort speichern wilst. Aber Instr liefert korrekt.

Gruß
yummi


  

Betrifft: AW: InStr Befehl von: Florian
Geschrieben am: 09.09.2014 15:23:44

Hallo,

sobald ich allerdings dort einen Wert eingebe, gibt er mir wieder den Wert "5" aus, weißt du zufällig woran das ligen könnte??

Grüße,

Florian


  

Betrifft: AW: InStr Befehl von: yummi
Geschrieben am: 09.09.2014 15:30:41

Hallo Florian,

du solltest deien Variablen mal deklarieren. Setz mal ein Option Expecit in die erste Zeile vor allem anderen, dass ist sauberer

Hier dein korigierter Code (noch ohne Deklaration)

Sub Test()
ValueToBeFound = ActiveWorkbook.Worksheets(1).cells(2, 3).Value
Row = 5
col = 3

While (InStr(1, UCase(ActiveWorkbook.Worksheets(3).cells(Row, col).Value), UCase(ValueToBeFound) _
, vbTextCompare) = 0 And Row < 90)
    Row = Row + 1
Wend


If Row < 90 Then
    ValueFoundInRow = Row
    Range("C10").Value = ValueFoundInRow
Else
    Range("C10").Value = -1
End If
End Sub


Gruß
yummi


  

Betrifft: AW: InStr Befehl von: Florian
Geschrieben am: 09.09.2014 15:34:49

Hallo,

keine Ahnung warum, aber jetzt funktioniert alles so wie gewünscht :)

Danke vielmals für die Hilfe!

Grüße


  

Betrifft: AW: InStr Befehl von: yummi
Geschrieben am: 09.09.2014 15:43:25

Hallo Florian,

die Änderung ist = 0 anstatt <> 0 bei der Abfrage von Instr
wenn Du = 0 abfragst, dann sucht er solange weiter bis entweder der Begriff gefunden wird (Rückgabewert <> 0) oder deine Zeilengrenze erreicht.
Wenn Du = 0 suchst, so wie vorher, dann sucht er solange, bis er die 1. Zeile findet, wo der Begriff nicht vorkommt bzw. bis deine Zeilengrenze erreicht ist.

Die Rückgabe von Instr ist die Position des ersten Auftreten des gesuchten Begriffs im Suchstring, wenn also nicht drin, ist die Position im String = 0

Gruß
yummi


  

Betrifft: AW: InStr Befehl von: yummi
Geschrieben am: 09.09.2014 15:32:24

sry Schreibfehler
Option Explicit


  

Betrifft: Row .... von: Rudi Maintaire
Geschrieben am: 09.09.2014 16:04:33

... sollte nicht als Variablenname genutzt werden, da Row ein Objekt/ Eigenschaft in VBA ist.

Gruß
Rudi


 

Beiträge aus den Excel-Beispielen zum Thema "InStr Befehl"