2017-01-09 4 views
0

ich habe wie „NIFTY29-12-2016CE6300.00“ Zeichenfolge zwischen Zeichenfolge hinzuzufügen und ich möchte Ausgabe als: „NIFTY_29-12-2016_6300_CE“wie jedes Zeichen in dem Zugang vba

das Problem ersten ist Teil dh (NIFTY) nicht in einem feste Länge kann es abcd, rdftghe oder irgendetwas und letzten Teil dh (6300.00) ist auch nicht feste Länge sein kann 123.8888888.23.88989 oder irgendetwas

versuchen, diesen Code zu bekommen, Position die erste Ziffer in einer Zeichenfolge und ich kann "_" vor dem Code wie folgt:

If InStr(CStr(rs.Fields!Symbol), "CE") Then 
        StrOg = CStr(rs.Fields!Symbol) 

        For i = 1 To Len(StrOg) 

         currentCharacter = Mid(StrOg, i, 1) 
         If IsNumeric(currentCharacter) = True Then 
          GetPosChar = i 
          Exit For 
         End If 
        Next i 
        strtemp = Left(StrOg, GetPosChar) & "_" & Right() & "_" 
       Else 

Ich bin acheveving bis zu diesem: "NIFTY_" bitte helfen Sie mir !!!! Vielen Dank im Voraus

+0

gibt es 2 Ersatz in Ihrer Frage. Eins ist vor der ersten Ganzzahl und Sekunde ist die letzte Dezimalzahl. Hab ich recht ? Sie haben den ersten Ersatz gelöst, während Sie mit dem zweiten stecken geblieben sind? –

+0

Ich bin immer noch nicht in der Lage, das Datum und die Zahl am Ende der Zeichenfolge zu extrahieren und die Zeichenfolge für das erwartete Ergebnis neu anordnen ... –

Antwort

1

Versuchen Sie unten. Da Sie nicht richtig erklärt haben, wo Änderungen vorgenommen werden müssen. Ich schrieb den Code mit einigen Annahmen wie, Symbol CE steht Ihnen zur Verfügung, wir müssen alle Dezimalstellen usw. abschneiden. Sie können den Code sehen und weitermachen.

Private Sub test() 
    Dim StrOg As String 

    StrOg = "NIFTY29-12-2016CE6123.8888888" 
    Debug.Print "Org=" & StrOg 
    Debug.Print "New=" & ReFormat(StrOg) 

End Sub 

Private Function ReFormat(ByVal inputText) As String 
    Dim strNew As String 
    Dim charPos As Integer 
    Dim counter As Integer 
    Dim found As Boolean 

    'Search for 1st character from reverse and remove the 2 charters (i.e. symbol CE) 
    found = False 
    For i = Len(inputText) To 1 Step -1 
    If (Not IsNumeric(Mid$(inputText, i, 1))) And Mid$(inputText, i, 1) <> "." Then 
     charPos = i 
     found = True 
     Exit For 
    End If 
    Next i 
    If found Then 
    strNew = Left$(inputText, charPos - 2) & "_" & Right$(inputText, Len(inputText) - charPos) 
    Else 
    strNew = inputText 
    End If 

    'Search for 1st digit and if found update the string 
    found = False 
    For i = 1 To Len(strNew) 
    If IsNumeric(Mid$(strNew, i, 1)) Then 
     charPos = i 
     found = True 
     Exit For 
    End If 
    Next i 
    If found Then 
    strNew = Left$(strNew, charPos - 1) & "_" & Right$(strNew, Len(strNew) - charPos + 1) 
    End If 

    'Search for last decimal and truncate thereAfter 
    charPos = InStrRev(strNew, ".") 
    If charPos > 0 Then 
    strNew = Left$(strNew, charPos - 1) & "_CE" 
    End If 

    ReFormat = strNew 

End Function 
+0

Dank @Mukul Varshney funktioniert es !!!!! –

Verwandte Themen