Schleife OHNE Zahlenwert



Excel-Version: 9.0 (Office 2000)
nach unten

Betrifft: Schleife OHNE Zahlenwert
von: Stefan
Geschrieben am: 13.05.2002 - 17:19:17

Hallo,

habe folgendes Problem - ich möchte eine Schleife laufen lassen, die immer den selben Anweisungsblock ausführt, aber jedesmal mit einem anderen Wert für einen bestimmten String. Also konkret etwas in der Form:

For text = "a", "b", "c", "d" Do

Anweisungsblock
Next text

Das geht so nicht - gibt es eine Möglichkeit, sowas zu machen.

P.S. es handelt sich bei dem Text nicht um a,b,c,d sondern um wirkliche Wörter (also einfach den ASCII-Code um +1 erhöhen wird hier nicht gehen).

nach oben   nach unten

Re: Schleife OHNE Zahlenwert
von: Bonte
Geschrieben am: 13.05.2002 - 17:25:05

Hallo Stefan,

probier's doch mit einer Select Case-Abfrage

Select Case text
Case "a" or "b" or ...
Anweisungsblock
End Select

Gruß
Bonte


nach oben   nach unten

Re: Schleife OHNE Zahlenwert
von: Rolf, Lgh.
Geschrieben am: 13.05.2002 - 17:29:46

Hallo Stefan
ich glaube damit könnte man was machen:

'Zeichenketten komfortabel bearbeiten mit der Split()-Funktion
'Versionen: Excel 2000 und 2002

'Bei der Entwicklung von Datenbanken oder einzelnen _
 Funktionen stehen Sie immer wieder vor dem Problem, _
 eine Zeichenkette in ihre einzelnen Bestandteile _
 zerlegen zu müssen. Zum Beispiel "Dr. Peter Hoffmann" _
 in "Titel", "Vorname" und "Nachname". Ab Excel 2000 _
 können Sie dazu die wenig bekannte Funktion "Split()" _
 einsetzen, deren Arbeitsweise Sie zunächst am einfachsten _
 durch die Eingabe folgender Funktion in einem beliebigen _
 Modul und den Aufruf über den Direktbereich erforschen:

Function SplitTest(strText As String) As Integer
  Dim As Variant, i As Integer
  X = Split(strText)
  For i = 0 To UBound(X)
    Debug.Print X(i)
  Next i
  SplitTest = UBound(X) + 1
End Function

'Die Funktion erwartet als Parameter eine beliebige _
 Zeichenkette. Diese wird dann über "Split()" in ein _
 Array konvertiert. "UBound()" gibt anschließend _
 Auskunft, wie viele Elemente das Array beinhaltet. _
 Gezählt wird ab "0", so dass "UBound() +1" die _
 Anzahl der Wörter in der Zeichenkette liefert. _
 Diesen Wert verwenden wir hier, um die einzelnen _
 Wörter in einer Schleife aus dem Array im _
 Direktbereich auszugeben. Die Eingabe von

Print SplitTest("Dies ist ein Test!")

'führt zum Beispiel zu folgendem Ergebnis:
'Dies
'ist
'Ein
'Test!
'4
'
'Um nun beispielsweise nur die Anzahl der Wörter in _
 einer Zeichenkette zu zählen, setzen Sie "Split()" _
 in der folgenden Funktion ein:

Function SplitCount(strText As String) As Integer
  Dim As Variant
  X = Split(strText)
  SplitCount = UBound(X) + 1
End Function

'Das Ergebnis ist die Anzahl der Wörter oder "0", wenn _
 die Zeichenkette leer ist. Ähnlich einfach können Sie _
 mit "Split()" bestimmte Wörter aus einer Zeichenkette _
 extrahieren:

Function SplitExtract(strText As String, _
                      intNum As Integer) As String
  Dim As Variant
  X = Split(strText)
  If intNum > 0 And intNum - 1 <= UBound(X) Then
    SplitExtract = X(intNum - 1)
  Else
    SplitExtract = ""
  End If
End Function

'wenn Sie im Direktbereich einmal

Print SplitExtract("Dr. Peter Hoffmann", 2)

'eingeben, wird als Ergebnis erwartungsgemäß "Peter" _
 ausgegeben. Die Kombination dieser beiden Funktionen _
 können Sie beispielsweise dazu einsetzen, um beim _
 Import aus anderen Datenbanken Titel, Vornamen und _
 Nachnamen von Adressen korrekt in Ihre Tabelle zu _
 schreiben:

If SplitCount(strInput) = 3 Then
  '.....
  rs("Titel") = SplitExtract(strInput, 1)
  rs("Vorname") = SplitExtract(strInput, 2)
  rs("Nachname") = SplitExtract(strInput, 3)
  '.....
Else  'nur Vorname und Nachname
  '.....
  rs("Vorname") = SplitExtract(strInput, 1)
  rs("Nachname") = SplitExtract(strInput, 2)
  '.....
End If

'Die gezeigten Funktionen gehen jeweils davon aus, _
 dass zwischen den Wörter immer ein Leerzeichen als _
 Trennzeichen vorhanden ist. Oftmals werden aber andere _
 Trennzeichen wie beispielsweise Kommas oder Semikolons _
 verwendet. Soll "Split()" nach diesen Trennzeichen _
 splitten, können Sie das über den zweiten Parameter _
 angeben. Die folgende Funktion liefert beispielsweise _
 die einzelnen Feldnamen aus einer CSV-Kopfzeile _
 "Nachname;Vorname;Strasse;PLZ;Ort" als Array:

Function SplitCSVFieldnames(strText As String, _
                            strSeparator As String) As Variant
  Dim As Variant
  X = Split(strText, strSeparator)
  SplitCSVFieldnames = X
End Function

'Ein Aufruf wie zum Beispiel der folgende erlaubt _
 dann die Abarbeitung der einzelnen Feldnamen je nach _
 Anforderung:

Sub Test()
'.....
  Open "Test.txt" For Input As #1
  Line Input #1, strInput
  arrFelder = SplitCSVFieldnamesd(strInput, ";")
  strFeldname1 = arrFelder(0)
  strFeldname2 = arrFelder(1)
  strFeldname3 = arrFelder(2)
  '.....
End Sub


Gruss Rolf
nach oben   nach unten

Re: Schleife OHNE Zahlenwert
von: Stefan
Geschrieben am: 13.05.2002 - 17:29:46

Danke für die Hilfe,

kommt aber leider die Fehlermeldung "Typen unverträglich" nach

Select Case Gruppenfilter
Case "a" Or "b" Or "c"

dieser Zeile. Ideen zur Abhilfe??

Stefan


nach oben   nach unten

Re: Schleife OHNE Zahlenwert
von: Bonte
Geschrieben am: 13.05.2002 - 17:33:52

Hallo Stefan,

ich hab's bei mir jetzt nicht ausprobiert, aber es müßte funktionieren, wenn Gruppenfilter als String definiet ist.

Gruß
Bonte

PS: Falls es immer noch nicht klappt, nochmal posten, dann probier ich's doch mal aus.

nach oben   nach unten

for each .. in array geht
von: stefan
Geschrieben am: 13.05.2002 - 18:00:46

Hab jetzt eine andere Lösung gefunden. Habe einfach alles in ein Array reingeschrieben und dann mit

For each I in TestArray Do
....
Next I

Das funktioniert wohl so auch ganz gut. Danke trotzdem.

Gruss

Stefan


nach oben   nach unten

Re: for each .. in array geht
von: Bonte
Geschrieben am: 13.05.2002 - 18:21:07

Das geht natürlich auch:o)

Gruß
Bonte

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Schleife OHNE Zahlenwert"