2011-05-18 14 views
15

tengo varias cadenas en diferentes células comoSubcadena en VBA

CO20: 20 YR CONVENTIONAL 
FH30: 30 YR FHLMC 
FHA31 

que necesito para obtener la subcadena de 1 a hasta el índice de ':' o si eso no está disponible hasta que termina (en el caso de la cadena de 3) Necesito ayuda para escribir esto en VBA.

Respuesta

25

Shorter:

Split(stringval,":")(0) 
+3

¡Agradable! S .., es posible que desee agregar un Rtrim() a eso para cuidar los espacios finales (por ejemplo, "FH30:"), pero esto es genial. – ray

5

primera Puede encontrar la posición de la cadena en este caso ":"

'position = InStr(StringToSearch, StringToFind) 
position = InStr(StringToSearch, ":") 

A continuación, utilice Izquierda (StringToCut, NumberOfCharacterToCut)

Result = Left(StringToSearch, position -1) 
+0

-1 si ':' no se encuentra, 'Right (StringToSearch, position)' devolverá una cadena vacía. Además, ¿qué es 'NumberOfCharacterToCut'? ¿De dónde vino eso y para qué es igual? –

+0

@Steve NumberOfCharacterToCut: Eso es lo que significan las variables y no la función se llama a sí misma. Y 2) Le estaba mostrando cómo obtener una subcadena. Le sugiero que lea y comprenda antes de votar ... – Pepe

+0

Bueno, su edición es mejor, pero si todavía hay un problema. Si no hay ':' en StringToSearch, la posición será = 0. Cuando llame a la izquierda (StringToSearch, posición-1), obtendrá un error de tiempo de ejecución. Además, llamar al segundo argumento a Left() 'NumberOfCharacterToCut' es engañoso. El segundo argumento es la longitud de la cadena a devolver, no lo que se corta. No dudo que no entiendas todo esto, pero no creo que te expreses muy bien. –

9

prueba para ':' en primer lugar, a continuación, tomar cadena de prueba hasta ':' o al final, dependiendo de si se encontró

Dim strResult As String 

' Position of : 
intPos = InStr(1, strTest, ":") 
If intPos > 0 Then 
    ' : found, so take up to : 
    strResult = Left(strTest, intPos - 1) 
Else 
    ' : not found, so take whole string 
    strResult = strTest 
End If