goodbytes
Goto Top

Select Case Problem - mal wieder...

Hallo,
ich möchte einfach nur abfragen, ob eine Zelle im String einen bestimmten numerischen Wert enthält (z.B.: 0,1 oder 0,01 oder 0,25 usw.)

Ich hatte kurz darüber nachgedacht, ob man die numerischen Werte als Zahl in eine Variable stecken kann um damit weiterzuarbeiten.
Hab ich dann aber verworfe.

Nun versuche ich z.B. den String "0,1" in der jeweiligen Zelle zu finden (in einer Schleife), um dann bei einem Auftreten weitere Schritte anzustossen.

Leider klappt es nicht so wie ich will.

Ausschnitt:

 Select Case Cells.Find("0,1", "0,01", "0,001,",  "0,0001", Cell.Row, Cell.Colum, Cell.Row, Cell.Column)  
                        Case True
                            MsgBox "0,1"  
                        Case True
                            MsgBox "0,01"  
                        Case True
                            MsgBox "0,001"  
End Select
 

Hat einer von euch da einen Tipp?

Torsten

Content-Key: 174429

Url: https://administrator.de/contentid/174429

Printed on: April 19, 2024 at 04:04 o'clock

Member: dog
dog Oct 10, 2011 at 19:35:15 (UTC)
Goto Top
Ein Select soll unterschiedliche Fälle unterscheiden.
Sind True, True und True unterschiedliche Fälle?
Member: Biber
Biber Oct 10, 2011 at 19:42:46 (UTC)
Goto Top
Zitat von @dog:
Ein Select soll unterschiedliche Fälle unterscheiden.
Sind True, True und True unterschiedliche Fälle?
Wenn denn wenigstens ein "Case Else" am Ende stünde, dann wäre es egal.
Member: bastla
bastla Oct 10, 2011 at 21:41:14 (UTC)
Goto Top
Hallo TorstenB!

Was genau soll das werden? Wenn Du wissen willst, ob irgendwo in der Tabelle (zumindest lässt Dein Codeansatz den Schluss zu, dass es nicht um eine bestimmte zu untersuchende Zelle geht) einer der angegebenen Werte (weshalb eigentlich als String - gefunden werden so nämlich keine Zahlenwerte?) in einer Zelle steht, könntest Du eine Schleife der Art
For Each Suchwert In Array("0,1", "0,01", "0,001")  
    Set Found = Cells.Find(Suchwert, , xlValues, xlPart)
    If Not Found Is Nothing Then
        MsgBox Suchwert & " gefunden in " & Found.Address  
        Exit For
    End If
Next
verwenden. Sollte es doch darum gehen, zu prüfen, ob die entsprechende Zahl in einer Zelle steht, dann:
For Each Suchwert In Array(0.1, 0.01, 0.001)
    Set Found = Cells.Find(Suchwert, , xlValues)
    If Not Found Is Nothing Then
        MsgBox Suchwert & " gefunden in " & Found.Address  
        Exit For
    End If
Next
Grüße
bastla
Member: goodbytes
goodbytes Oct 11, 2011 at 05:09:20 (UTC)
Goto Top
Guten Morgen,
in den entsprechenden Zellen steht jeweils ein String, in dem eine der drei Varianten enthalten ist. Es reicht mir daher zu erkennen, welcher Wert als String mit drinsteht. Es sind immer genau definierte Werte,

Nach dem Identifizieren soll (ich will immer nur genau eine Zelle auf das Vorkommen darin untersuchen, da aussen herum eine Schlefe ist, die Zeile für Zeile durchgeht) soll möchte ich je nach dem Fund eine bestimmte Aktion ausführen. Ich will also nicht mit dem gefundenen Wert als Zahl im String weiterarbeiten, sondern nur True oder False auswerten.

Allerdings könnten nach und nach noch andere Werte hinzukommen, welbalb ich eine Case-Anweisung nutzen möchte, da man das hier sehr schnell nachtragen kann.

Mein Ansatz war natürlich so Quatsch, da immer True herauskommen würde und damit das erste Case ausgelöst würde.
Ich weiß nur nicht, wie ich diese erste Zeile "Select Case..." mit der Find-Funktion unter einen Hut bekomme.

Gruß
Torsten
Member: bastla
bastla Oct 11, 2011 at 05:30:00 (UTC)
Goto Top
Hallo TorstenB!

Wenn Du nur jeweils eine Zelle untersuchen willst, verwende "InStr()".

Da es um Teilstrings der Zelle gehen soll, wirst Du nicht an einer Schleife über alle Suchbegriffe (wie etwa in meiner Zeile 1) vorbeikommen (wobei ich aus Gründen der Übersichtlichkeit das "Array()" bereits vorher einer Variablen zuweisen würde) ...

Grüße
bastla
Member: goodbytes
goodbytes Oct 11, 2011 at 07:27:53 (UTC)
Goto Top
Hallo bastla,
ich wollte es dennoch mit der Cells.find Methode machen; das Abbprüfen des Inhalts einfach in eine Funktion vergeben.
Leider komme ich aber mit dem Definieren der Funktion nicht ganz klar. Vielleicht kannst du mir da helfen? Hier mein Ansatz:

Public Funktion Umrechnung(temp)
For Each Suchwert In Array("0,1", "0,01", "0,001", "0,0001", "0,25")  
    Set Found = Cells.Find(Suchwert, , xlValues, xlPart)

    If Suchwert = "0,1" Then Faktor = "10"  
    End If
    If Suchwert = "0,01" Then Faktor = "100"  
    End If
    If Suchwert = "0,001" Then Faktor = "1000"  
    End If
    If Suchwert = "0,0001" Then Faktor = "10000"  
    End If
    If Suchwert = "0,25" Then Faktor = "4"  
    End If
    If Not Found Is Nothing Then Faktor = "1"  
    End If
    
Next
Set Umrechnen = Faktor
End Function

Ich habe hier If verwendet, oder wäre es doch mit Case Select besser?
Im Prinzip möchte ich die Funktion aufrufen und dabei die Zieladresse, wo sie suchen soll übergeben.

Den Rückgabewert "Faktor" will ich dann in meinen Berechnungen verwenden

Gruß
Torsten
Member: goodbytes
goodbytes Oct 11, 2011 at 09:15:03 (UTC)
Goto Top
So, habs nun doch mit Instr() gemacht.
Der Teil sieht jetzt so aus:

                                    If Not InStr(Cell.Offset(0, -8).Value, "0,1") = 0 Then  
                                    Faktor = 10
                                    End If
                                    If Not InStr(Cell.Offset(0, -8).Value, "0,01") = 0 Then  
                                    Faktor = 100
                                    End If
                                    If Not InStr(Cell.Offset(0, -8).Value, "0,001") = 0 Then  
                                    Faktor = 1000
                                    End If
                                    If Not InStr(Cell.Offset(0, -8), "0,0001") = 0 Then  
                                    Faktor = 10000
                                    End If
                                    If Not InStr(Cell.Offset(0, -8).Value, "0,25") = 0 Then  
                                    Faktor = 4
                                    End If
                                    If Faktor = 0 Then
                                    Faktor = 1
                                    End If

Es hätte mich aber mal interessiert wie es mit der Funktion klappen würde...

Danke für eure Mühe !!! face-smile

Torsten
Member: steini84
steini84 Oct 11, 2011 at 09:24:56 (UTC)
Goto Top
Hi,

mit Funktion wäre es etwas einfacher:

Public Function Umrechnung(Zelle As Range) As Integer

    Select Case Zelle.Value
        Case "0,1"  
            Umrechnung = "10"  
        Case "0,01"  
            Umrechnung = "100"  
        Case "0,001"  
            Umrechnung = "1000"  
        Case "0,0001"  
            Umrechnung = "10000"  
        Case "0,25"  
            Umrechnung = "4"  
        Case Else
            Umrechnung = "1"  
    End Select

End Function

Damit kannst du zum Beispiel die Berechnung "on-the-fly" machen:

Gewinn = Umrechnung("A2") + Zinsen * 100

Wenn du die Funktion in ein Modul packst, kannst du sie von Überall mit dem Parameter der zu bestimmenden Zelle aufrufen (auch in der Zelle direkt mit =Umrechnung(Zelle))..

MfG Steini
Member: goodbytes
goodbytes Oct 13, 2011 at 12:16:59 (UTC)
Goto Top
Hallo Steini,
ja stimmt, som werde ich es auch machen.

Ein dickes Dankeschön !!! face-smile

Gruß
Torsten