Extraire les sous-strings dans une string en spécifiant le premier et le dernier de la sous-string

Je voulais savoir s'il y a une façon de pouvoir extraire une sous-string pour sortir une string en spécifiant le début de quelques caractères et le caractère final.

Par exemple, j'ai une string comme au bas de la question dans une cellule dans mon classur et chaque cellule a une grande string similaire. Je voudrais extraire tout le nom dans un tableau.

Le "c1-mc-" sera toujours un préfixe pour un nom. J'espérais pouvoir utiliser une fonction dans laquelle je pourrais préciser que pour chaque sous-string commençant par "c1-mc" et se terminant par vbLf (enter), extrayez celles-ci. Je pense que Instr () et Split () pourraient aider mais ne pas savoir comment procéder.

"Str: 1/2/1 End : 1/2/2 Name: cl-mc-23223322 Name: c1-mc-dddssda Info: alot of detail Name: c1-asa-dddssda task: asdf Name: c1-mc-xd132eds" <the code which works> For Each rng1 In table1.DataBodyRange.Columns(8).Cells MySsortingng = rng1.Value Do Until InStr(MySsortingng, "c1-mc") = 0 namestart = InStr(MySsortingng, "c1-mc") name = Mid(MySsortingng, namestart) nameend = InStr(name, vbLf) - 1 name = Left(name, nameend) 'this gives you a name namestart = InStr(name, "c1-mc") name = Mid(name, namestart) nameend = InStr(name, " ") - 1 If (nameend = -1) Then nameend = Len(name) End If name = Left(name, nameend) ' gives you name incase there are no next lines MySsortingng = Replace(MySsortingng, name, "") 'this cuts the original ssortingng so it now starts where the name ended. MsgBox name i = i + 1 Loop Next 

EDIT après avoir relu votre question, je pense que je n'ai pas répondu correctement. Veuillez donner plus de détails sur ce qui est réellement contenu dans chaque cellule et sur le nombre de cellules dont nous parlons (1?).

Une string est une concaténation de caractères. L'écriture de votre string sur plusieurs lignes ne signifie pas qu'elle change réellement. Le changement de ligne se produit lorsque vous entrez chr (10) ou vbLF, comme vous l'avez dit. Je ne suis pas sûr de la partie de la string que vous avez postée que vous vouliez extraire. En supposant que vous souhaitez prendre le nom d'une cellule et que la string est contenue dans la variable de string [myssortingng]:

 Dim name as ssortingng Dim namestart as integer Dim nameend as integer namestart = Instr(Myssortingng, "c1-mc-" ) name = Mid(Myssortingng, namestart + 1) nameend = Instr(Myssortingng, vbLF) name = Left(name, nameend) 

Maintenant, le nom contiendrait le nom de votre string. Testez-le (je n'ai pas, vous devrez peut-être ajuster quelques choses mineures) et, lorsque vous l'avez, utilisez une boucle for pour boucler vos cellules et append le nom à votre tableau souhaité.

EDIT 2: Puisque vous souhaitez extraire toutes les instances du nom dans votre cellule, je modifierais ceci:

 Dim name as ssortingng Dim namestart as integer Dim nameend as integer Dim namearray() as ssortingng Dim i as integer Do Until Instr(Myssortingng, "c1-mc-" ) = 0 'will continue filling the array until Myssortinggn no longer has any names) namestart = Instr(Myssortingng, "c1-mc-" ) name = Mid(Myssortingng, namestart + 1) nameend = Instr(Myssortingng, vbLF) name = Left(name, nameend) 'this gives you a name Myssortingng = Mid(Myssortingng, Instr(Myssortingng, name) ) 'this cuts the original ssortingng so it now starts where the name ended. namearray(i) = name i = i + 1 Loop