2011-05-18 6 views
15

J'ai plusieurs chaînes dans différentes cellules commeSubstring en VBA

CO20: 20 YR CONVENTIONAL 
FH30: 30 YR FHLMC 
FHA31 

Je dois obtenir la sous-chaîne de 1 à jusqu'à index « : » ou si ce n'est pas disponible jusqu'à la fin (en cas de chaîne 3). J'ai besoin d'aide pour écrire ceci dans VBA.

Répondre

25

Shorter:

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

Nice! S .., vous pourriez vouloir ajouter un Rtrim() à cela pour prendre soin des espaces de fin (par exemple "FH30:"), mais c'est génial. – ray

5

Vous pouvez d'abord trouver la position de la chaîne dans ce cas ":"

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

Ensuite, utilisez Gauche (StringToCut, NumberOfCharacterToCut)

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

-1 si ':' n'est pas trouvé, 'Right (StringToSearch, position)' retournera une chaîne vide. Aussi, qu'est-ce que 'NumberOfCharacterToCut'? D'où cela vient-il et à quoi cela correspond-il? –

+0

@Steve NumberOfCharacterToCut: C'est ce que signifient les variables et non la fonction elle-même. Et 2) Je lui montrais comment obtenir une sous-chaîne. Je vous suggère de lire et de comprendre avant de voter ... – Pepe

+0

Eh bien, votre édition est meilleure, mais s'il y a encore un problème. S'il n'y a pas de ':' dans StringToSearch, positionnez will = 0. Lorsque vous appelez ensuite Left (StringToSearch, position-1), vous obtenez une erreur d'exécution. De plus, appeler le deuxième argument à Left() 'NumberOfCharacterToCut' est trompeur. Le deuxième argument est la longueur de la chaîne à retourner, pas ce qui est coupé. Je ne doute pas que vous ne compreniez pas tout cela, mais je ne pense pas que vous vous exprimez très bien. –

9

Test ':' d'abord, puis prendre chaîne de test jusqu'à ':' ou à la fin, selon le cas, il a été trouvé

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