Schleifendurchlauf mit Abbruchbedingung -> String

Hallo zusammen!

Ich habe ein Problem mit Excel und VBA. Ich möchte in einer Tabelle die Spaltenzahl herausbekommen, in der z.B. das Wort Birne steht. Ich habe mir da so etwas überlegt:

While Cells(1, k) „Birne“
k = k + 1
Wend

Dadurch weiß ich dann, dass das Wort Birne in der ersten Zelle der k-ten Spalte steht. Ich benötige die Position für weitere Schritte…

Jetzt gibt es ja aber nicht nur Birnen, sondern z.B. auch Äpfel :wink:

Deshalb möcht ich „Birne“ als Variable haben, die ich dann über ein anderes Skript benennen kann.

Ich dachte es funktioniert so:

Dim a as String

a = Birne (wird aus anderer Funktion übergeben…)

While Cells(1, k) a
k = k + 1
Wend

Das klappt aber nicht!

Es wäre super wenn mir jemand bei meinem Problem helfen könnte!

Gruß

Dennis

Hallo

Ich dachte es funktioniert so:

Dim a as String

a = „Birne“ (wird aus anderer Funktion übergeben…)

While Cells(1, k) a
k = k + 1
Wend

Das klappt aber nicht!

Ich habe nur die Anführungszeichen eingefügt, das war aber wohl nur ein Tippfehler hier im Forum.

Du hast da richtig gedacht, Deine Lösung ist richtig.
Wenn das nicht funktioniert, liegt das Problem an einer anderen Stelle. Verwende doch mal den Debugger, dann wirst Du die fehlerhafte Stelle schnell finden.

Gruß Rainer

Hat sich erledigt! Es klappt genau so, wie ich es beschrieben habe. Hatte einen Fehler in der Tabelle… Ein Buchstabendreher…

Danke für die Antwort!!!

Da hast du recht, ich habe hier vergessen die „“ hinzuschreiben. Es funktioniert jetzt, es war nur ein Rechtschreibfehler…

Dim a as String
a = Birne (wird aus anderer Funktion übergeben…)
While Cells(1, k) a
k = k + 1
Wend

Hallo Dennis,

viele zellen abzuklappern ist langsam, du hast uns ja nicht mitgeteilt um welche Excelversion es geht, aber bei 16000 Splaten dauert es schon lange bis dein Code mit einem Fehler abbricht weil er in die 16001te zelle hüpfen will, die gibt es aber nicht.
Also muß da in den Code eine Fehlerbehandlungsroutine rein.

Und, Excel ist x-tausendfach schneller als eine Vba.-Schleife.
Probiers mal so zu lösen:

Sub tt()
Dim a As String, k
a = "Birne" '(wird aus anderer Funktion übergeben...)
k = Application.Match(a, Rows(1), 0)
If IsError(k) Then
 MsgBox a & " nicht gefunden."
Else
 MsgBox k
End If
End Sub

Gruß
Reinhard

Hallo Reinhard!

Die Laufzeit ist eigentlich kein Problem. Ich fange ja in der ersten Spalte an. Die Schleife stoppt dann, wenn das von mir als Variable übergebene Wort gleich dem in der Zelle ist. Und da ich nur knapp 20 Spalten durchlaufe ist das recht schnell.

Aber vielen Dank für den Code. Den kann ich sicher an anderer Stelle gebrauchen!!!

Dennis