Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  VBA Text nach Zeichen durchsuchen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  VBA Text nach Zeichen durchsuchen (21517 mal gelesen)
HKXVZBi
Ehrenmitglied
Konstruktion Elektroplanung


Sehen Sie sich das Profil von HKXVZBi an!   Senden Sie eine Private Message an HKXVZBi  Schreiben Sie einen Gästebucheintrag für HKXVZBi

Beiträge: 1502
Registriert: 27.01.2010

erstellt am: 01. Mrz. 2010 09:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo, ich habe folgendes Problem:

In einem Text ist ein zeichen ("-") mehrmals vorhanden, mich interessiert jetzt aber nur der text hinter dem ersten "-" von links.

Bsp.: TEXT_a+TEXT_b-TEXT_c-TEXT_d --> mich interessiert hier nur "-Text_c"

Zum auffinden des ersten zeichens habe ich folgende funktion verwendet:

InStr([Start], Zeichenfolge1, Zeichenfolge2[, Vergleich])
pos3 = InStr(1, zelleninhalt, "-")

wenn das zeichen nur zweimal vorkommt konnte ich den mittleren Text noch mit dieser funktion herruasfiltern:

InStrRev(zelleninhalt, "-", -1, vbTextCompare)
pos4 = InStrRev(zelleninhalt, "-", -1, vbTextCompare)

mein Problem liegt jetzt im auffinden des dritten "-", dafür fehlt mir jedoch eine geeignete Funktion,
da ich bei der Funktion InStr(...) für [Start] anscheinend keine variable verwenden darf
denn die suche sollte ja erst nach pos3 beginnen, die texte haben jedoch unterschiedliche längen und auch das/die gesuchten Zeichen ("-") befinden sich nicht immer an der selben stelle


Gruß und Dank schon mal vorweg 
Marco

------------------
„Wenn man sagt, daß man einer Sache grundsätzlich zustimmt, so bedeutet es, daß man nicht die geringste Absicht hat, sie in der Praxis durchzuführen.“

Otto von Bismarck

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 01. Mrz. 2010 09:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für HKXVZBi 10 Unities + Antwort hilfreich

Moin,

>> da ich bei der Funktion InStr(...) für [Start] anscheinend keine variable verwenden darf

hmm, darfst Du nicht? Warum nicht? Ich darf ;-)
Mal als Beispiel:

Code:
Sub test()
Dim a%, pos3%, b%
Dim strText$
strText = "TEXT_a + TEXT_b - TEXT_c - TEXT_d_TEXT_e + TEXT_f - TEXT_g - TEXT_h"
pos3 = InStr(1, strText, "-")
a = InStr(InStr(InStr(1, strText, "-") + 1, strText, "-") + 1, strText, "-")
b = InStr(pos3 + 1, strText, "-")
End Sub

Man beachte die +1 beim Startargument.

Ich weiß aber noch nicht wirklich, was Du überhaupt vor hast....
Hoffe dennoch was Sinniges beigetragen zu haben.

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HKXVZBi
Ehrenmitglied
Konstruktion Elektroplanung


Sehen Sie sich das Profil von HKXVZBi an!   Senden Sie eine Private Message an HKXVZBi  Schreiben Sie einen Gästebucheintrag für HKXVZBi

Beiträge: 1502
Registriert: 27.01.2010

erstellt am: 01. Mrz. 2010 09:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

danke für die schnelle antwort ich werd das gleich mal ausprobieren, ich hätte aber gleich noch eine frage undzwar würde mich interessieren was ein $ oder % hinter der variablen deklaration bewirkt?

EDIT
es geht darum ein BMK aufzuteilen Bsp.: ==AD=R811+11W611-11ST01-X230
ich möchte hier jetzt nur -11ST01 ausgegeben haben

------------------
„Wenn man sagt, daß man einer Sache grundsätzlich zustimmt, so bedeutet es, daß man nicht die geringste Absicht hat, sie in der Praxis durchzuführen.“

Otto von Bismarck

[Diese Nachricht wurde von HKXVZBi am 01. Mrz. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 01. Mrz. 2010 09:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für HKXVZBi 10 Unities + Antwort hilfreich

>> würde mich interessieren was ein $ oder % hinter der variablen deklaration bewirkt?

Sorry, an der Stelle ich kürze gerne mit den Typkennzeichen ab:
$ = String,
% = Integer
usw.

Ein Dim strText$ ist also dasselbe wie ein Dim strText As String

Eine Übersicht findest Du z.B. HIER ungefähr in der Mitte (auch wenn's ACAD-VBA ist, die Typanweisungen sind für uns alle gleich   )
Oder mühsam einzeln in der Excelhilfe beim jeweiligen Datentyp.


------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HKXVZBi
Ehrenmitglied
Konstruktion Elektroplanung


Sehen Sie sich das Profil von HKXVZBi an!   Senden Sie eine Private Message an HKXVZBi  Schreiben Sie einen Gästebucheintrag für HKXVZBi

Beiträge: 1502
Registriert: 27.01.2010

erstellt am: 01. Mrz. 2010 09:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

achso danke, ich bin noch recht neu bei der vba programmierung und kenne mich daher noch nicht so gut aus ich hab mal meine bisherigen ansätze mal mit angefügt, aber leider funktioniert das mit dem auffinden des zweiten "-" noch nicht!!??


Public Function anlage()
' Variablen deklaration
Dim i, a, b
Dim zeile
Dim spalte
Dim LZA%            ' anzahl zeilen
Dim zelleninhalt    ' rückgabewert Zelleninhalt
Dim laenge          ' länge zelleninhalt
Dim pos1            ' position des zu suchenden strings (==)
Dim pos2            ' position des zu suchenden strings (+)
Dim pos3          ' position des zu suchenden strngs (-) von links
Dim pos4
Dim start
Dim ende


Worksheets(1).Activate     

LZA = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row          'letzte beschriebene Zelle in Spalte A finden

    For zeile = 800 To 810
        zelleninhalt = ActiveSheet.Cells(zeile, 1).Text            ' Inhalt der Zelle
        laenge = Len(zelleninhalt)                                  ' Länge des Inhaltes
        pos1 = InStr(1, zelleninhalt, "==")                        ' Anfangsposition der Zeichenfolge "=="
        pos2 = InStr(1, zelleninhalt, "+")                          ' Anfangsposition der Zeichenfolge "+"
        pos3 = InStr(1, zelleninhalt, "-")                          ' Anfangsposition der Zeichenfolge "-"
        'pos4 = InStrRev(zelleninhalt, "-", -1, vbTextCompare)      ' Anfangsposition der Zeichenfolge "-" von rechts
       
        '---------------------------------------------------------------------------------------------------
        ' Nach einem weiteren "-" wird nur gesucht wenn es bereits 1x gefunden wurde
      If pos3 > 0 Then
        pos4 = InStr(pos3, zelleninhalt, "-")                      ' Anfangsposition der Zeichenfolge "-", ab der Position 3
        End If

       
        '---------------------------------------------------------------------------------------------------
       
        If pos1 > 0 Then
            start = pos1 + 2                                        ' Startposition für Ausgabe
            l1 = pos2 - pos1 - 2                                    ' Endposition für Ausgabe
            a = Mid(zelleninhalt, start, l1)                        ' Anlage
            ActiveSheet.Cells(zeile, 2).Value = a                  ' Wert in Zelle schreiben
        Else
            a = "ohne AKZ"                                          ' kein Anlagenkennzeichen verfügbar
            ActiveSheet.Cells(zeile, 2).Value = a                  ' Wert in Zelle B schreiben
        End If
       
        '---------------------------------------------------------------------------------------------------
       
        If pos3 > 0 Then
           
          If pos3 <> pos4 Then                                    ' es befinden sich mehrere "-" im String
                start = pos3
                ende = pos4 - pos3
                a = Mid(zelleninhalt, start, ende)                  ' BMK
                ActiveSheet.Cells(zeile, 3).Value = a              ' Wert in Zelle C schreiben

       
            ElseIf pos3 = pos4 Then
                start = pos3
                a = Mid(zelleninhalt, start, laenge)                ' BMK
                ActiveSheet.Cells(zeile, 3).Value = a              ' Wert in Zelle C schreiben
            End If
       
        Else
            a = "ohne BMK"                                          ' kein BMK verfügbar
            ActiveSheet.Cells(zeile, 3).Value = a                  ' Wert in Zelle C schreiben
        End If
       
        '---------------------------------------------------------------------------------------------------
   
    Next zeile

End Function


das was noch nicht so funktioniert wie ich es mir vorgestellt habe ist FETTgekennzeichnet
*hier sind noch einige fehler enthalten wie z.B. variablen deklariert die nicht genutzt werden

------------------
„Wenn man sagt, daß man einer Sache grundsätzlich zustimmt, so bedeutet es, daß man nicht die geringste Absicht hat, sie in der Praxis durchzuführen.“

Otto von Bismarck

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 01. Mrz. 2010 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für HKXVZBi 10 Unities + Antwort hilfreich

>>       If pos3 > 0 Then
        pos4 = InStr(pos3, zelleninhalt, "-")                      ' Anfangsposition der Zeichenfolge "-", ab der Position 3
        End If

"funktioniert nicht"

 

Zitat:
Man beachte die +1 beim Startargument.


>> es geht darum ein BMK aufzuteilen Bsp.: ==AD=R811+11W611-11ST01-X230
ich möchte hier jetzt nur -11ST01 ausgegeben haben

in diesem Fall:

Code:
Sub test()
Dim a%, pos3%, b%
Dim strText$, strT2$

strText = "==AD=R811+11W611-11ST01-X230"
pos3 = InStr(1, strText, "-")

b = InStr(pos3 + 1, strText, "-")

strT2 = Mid(strText, pos3, b - pos3)

End Sub


Tüftel mal bisserl rum ;-)

Du deklarierst derzeit alle Vars As Variant... aber sagst ja selbst: Da willst Du noch dran  

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HKXVZBi
Ehrenmitglied
Konstruktion Elektroplanung


Sehen Sie sich das Profil von HKXVZBi an!   Senden Sie eine Private Message an HKXVZBi  Schreiben Sie einen Gästebucheintrag für HKXVZBi

Beiträge: 1502
Registriert: 27.01.2010

erstellt am: 01. Mrz. 2010 11:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

danke für die hilfe ich hab es jetzt aber durch probieren doch noch selbst hinbekommen 

------------------
„Wenn man sagt, daß man einer Sache grundsätzlich zustimmt, so bedeutet es, daß man nicht die geringste Absicht hat, sie in der Praxis durchzuführen.“

Otto von Bismarck

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Samson53
Mitglied
Nur noch selten simulierend


Sehen Sie sich das Profil von Samson53 an!   Senden Sie eine Private Message an Samson53  Schreiben Sie einen Gästebucheintrag für Samson53

Beiträge: 119
Registriert: 18.02.2010

Plant Simulation 11
Office 2013

erstellt am: 23. Mrz. 2010 12:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für HKXVZBi 10 Unities + Antwort hilfreich

Hallo,

schau mal nach der function "split"

dim ergebnis as variant

ergebnis = split(ausgangstext,"-"(trennzeichen))
=> ergebnis(0)= teil des ausgangstextes vor "-"
=> ergebnis(1)= teil nach dem ersten aber vor dem zeiten "-"
=> ergebnis(n)= teil nach dem nten aber vor dem n+1ten "-"

Gruß
Samson

------------------
Operative Hektik ersetzt geistige Windstille.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz