Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

kleine & sicherlich leicht lösbare XL Funktionen



Excel-Version: 10.0 (Office XP)

Betrifft: kleine & sicherlich leicht lösbare XL Funktionen
von: sunny8 (beginner)
Geschrieben am: 30.05.2002 - 14:15:50

Hallo ich muss mittels eines Schleifendurchlaufs eine bestimmte Zelle in Spalte A finden.
Der Inhalt der Zelle variiert ständig. Er beginnt jedoch immer mit dem selben Wortlaut.
Mit nachfolgend genannter Schleife ist es mir leider nicht möglich gewesen diese Zelle zu finden, da Sie anscheinend nach dem exakten Wortlaut "Kennung=" sucht?!
Der Inhalt der Zelle ändert sich jedoch nicht wahllos, sondern ist fest definiert. Er lautet wie folgt "Kennung=eD II/1999 und" oder "Kennung=aD IV/1996 und"
Somit kann man festgelegen, dass erst "Kennung=" dann die ID (kleiner+großer Buchstabe), dann ein Leerzeichen, dann "Quartal/Jahr" und dann ein Leerzeichen gefolgt von einem und dargestellt wird.

Do Until ActiveCell.Value = "" And ActiveCell.Offset(1, 0).Value = ""
If ActiveCell.Value <> "Kennung=" Then
ActiveCell.Offset(1, 0).Select
Else
Exit Do
End If
Loop

Wenn ich dann die ID (kleiner+großer Buchstabe) in einer Variable zur weiteren Verarbeitung ablegen möchte, hatte ich immer folgenden Code dazu benutzt. Doch dieser schneidet nun nicht alles vom "=" bis zum 1. Leerzeichen sondern alles bis zum 2. Leerzeichen ab. Ich gelingt mir einfach nicht, dies abzuändern. Mitels "MsgBox UrStatus" bemerkte ich, dass erst diese Variable erst nur die ID enthält, doch beim weiteren Schleifendurchlauf dann auch noch alles bis zum nächsten Leerzeichen hinzukommt (also das Leerzeichen und "Quartal/Jahr").

Laenge = Len(ActiveCell.Value) 'Länge des Zeileninhalts
For x1 = 1 To Laenge 'Durchlaufen des kompletten Zelleninhalts
If Mid((ActiveCell.Value), x1, 1) = "/" Then 'x1
For x2 = x1 + 1 To Laenge 'Durchlaufen des kompletten Zelleninhalts ab dem x1
If Mid((ActiveCell.Value), x2, 1) = " " Then 'x2
UrJahr = Mid((ActiveCell.Value), x1 + 1, x2 - x1 - 1) 'liefert Text zwischen x1 und x2
End If
Next x2
End If
Next x1

Wer kann mir bei den beiden Dingen weiterhelfen?!
Es sind zwar nur kleine Veränderungen an den Schleifen nötig, doch ich stelle mich "noch" zu anfängerhaft an.

Vielen Dank im Voraus für die Mühe und das mitgebrachte Verständnis!!!

Sunny :)

  

Re: kleine & sicherlich leicht lösbare XL Funktionen
von: Michael Scheffler
Geschrieben am: 30.05.2002 - 14:53:22

Hallo,

zu 1: Versuchs mal mit "Like", wenn Du mit "=" abtestest, muss die Zeichenkette GENAU SO sein, "Like" kann auch mit "*" kombiniert werden.

zu 2: Versuchs mal mit "InStr". Das liefert Dir das erste Auftreten eines Zeichens in der Zeichenkette.

Gruß

Micha

  

An Micha: Wie soll denn der Code dafür aussehen?
von: Sunny8
Geschrieben am: 31.05.2002 - 10:37:44

Hallo Micha.

Ich kann nicht genau nachvollziehen wie und wo ich den InSt Befehl einbauen soll und das mit dem Like soll ich einfach in meine bestehende Formel integrieren?

Gruss
Sunny8.


  

Re: An Micha: Wie soll denn der Code dafür aussehen?
von: WernerB.
Geschrieben am: 31.05.2002 - 11:16:12

Hallo ???,

teste doch mal folgendes:

Zu 1.:
ersetze die Zeile:
If ActiveCell.Value <> "Kennung=" Then

durch die Zeile:
If Left(ActiveCell.Value, 8) <> "Kennung=" Then


Zu 2.:
Ersetze die ganze Schleife durch diese drei Codezeilen (in 'Urjahr' sollte dann die ID enthalten sein):
x1 = InStr(ActiveCell.Value, "=")
x2 = InStr(ActiveCell.Value, " ")
Urjahr = Mid(ActiveCell.Value, x1 + 1, Len(ActiveCell.Value) - x2)


Gestatte mir abschließend bitte noch einen Hinweis:
In diesem Forum bitte mit Realnamen auftreten (Vorname genügt); lies dazu bitte auch die "FAQ" in der Kopfleiste dieses Forums.
Vielen Dank für Dein Verständnis!

Viel Erfolg wünscht
WernerB.

  

Bitte um Korrektur des Lösungsvorschlags
von: Marcel
Geschrieben am: 03.06.2002 - 10:55:01

Hallo Werner.
Vielen Dank für deine Mühe.
Ich scheint aber ein kleiner Fehler in dein Script eingeschlichen zu haben.
Ich habe meine ehemalige und deine neue Funktion mal im Folgenden inkl. des MsgBox-Outputs aufgelistet.
Sicherlich springt dir der Fehler gleich ins Auge aber mir gelang dies leider bsiher noch nicht.
Mein Problem ist nur, dass ich das funktionsfähige Script eigentlich heute schon benötigt hätte und nur noch sehr schwer Zeitaufschub bekomme. :(

Vielen Dank im Voraus für deine Mühe.
Marcel

ActiveSheet.Range("A9").Select
Laenge = Len(ActiveCell.Value)

'--------- Anfang --- deine Version --------------------------------------------------
x1 = InStr(ActiveCell.Value, "=")
x2 = InStr(ActiveCell.Value, "")
UrStatusNeu = Mid(ActiveCell.Value, x1 + 1, Len(ActiveCell.Value) - x2)

MsgBox "UrStatusNeu: " & UrStatusNeu, vbCritical
'Ursprung: "Kennziffer=mD I/2002 und"
'Ergebnis: "mD I/2002 und"
'--------- Ende --- deine Version ----------------------------------------------------

'--------- Anfang --- meine Version --------------------------------------------------
For x1 = 1 To Laenge
If Mid((ActiveCell.Value), x1, 1) = "=" Then
For x2 = x1 + 1 To Laenge
If Mid((ActiveCell.Value), x2, 1) = " " Then
UrStatus = Mid((ActiveCell.Value), x1 + 1, x2 - x1 - 1)
End If
Next x2
End If
Next x1

MsgBox "UrStatus: " & UrStatus, vbCritical
'Ursprung: "Kennziffer=mD I/2002 und"
'Ergebnis: "mD I/2002"
'--------- Ende --- meine Version ----------------------------------------------------

  

Re: Bitte um Korrektur des Lösungsvorschlags
von: WernerB.
Geschrieben am: 03.06.2002 - 19:13:07

Hallo Marcel,

so sollte es klappen:


Option Explicit
Sub AnwenderID()
Dim UrStatusNeu As String
Dim x1 As Byte, x2 As Byte
    x1 = InStr(ActiveCell.Value, "=")
    x2 = InStr(ActiveCell.Value, " ")  'Leerzeichen zw. Anführungszeichen !!!
    UrStatusNeu = Mid(ActiveCell.Value, x1 + 1, x2 - x1 - 1)
    MsgBox "UrStatusNeu: " & UrStatusNeu, vbCritical
End Sub

Viel Erfolg wünscht
WernerB.
 

Beiträge aus den Excel-Beispielen zum Thema "kleine & sicherlich leicht lösbare XL Funktionen "