VBA, de recherche dans la colonne de caractère spécifique, extrait de la chaîne jusqu'à ce personnage
Dans une colonne spécifique, je recherche un caractère spécifique dans les cellules...dire "(" ou "/". Une fois que ce personnage se trouve dans une cellule, je veux extraire la partie depuis le début de la chaîne jusqu'à ce que le point de ce caractère, dans la cellule adjacente à celle-ci.
E. g. quelques valeurs dans la colonne pourrait ressembler -
Samsung (india)
Samsung/Dhamal
Blackberry (chikna)
Blackberry/Kala Anda
iPhone - egypt
iPhone 5 * yeda
La sortie ressemblera -
Samsung
Samsung
Blackberry
Blackberry
iPhone
iPhone 5
REMARQUE: Les valeurs de cellule dans la colonne spécifique, ne sont pas statiques, n'ai pas de modèle, peut contenir d'autres caractères spéciaux, ne sont pas d'une longueur spécifique.
- J'ai essayé divers code de combinaisons par exemple, InStr, Milieu, GAUCHE etc. mais je n'arrive pas à obtenir ce droit. Je ne peux pas obtenir la boucle définition correctement couplé avec la manière de trouver un personnage, extrait de cellule adjacente, de passer à la cellule suivante, ainsi de suite et ainsi de suite.
Vous devez vous connecter pour publier un commentaire.
Cette question est bien adapté pour les expressions régulières. La fonction suivante renvoie la position du caractère précédant le premier match d'une simple regex motif dans une chaîne donnée. Si aucune correspondance n'est trouvée, la fonction retourne la longueur de la chaîne. La fonction peut être combinée avec la fonction GAUCHE pour extraire le texte qui précède le match. (L'utilisation de la GAUCHE est nécessaire parce que, par souci de simplicité, cette fonction ne permet pas de mettre en œuvre submatches.)
La formule suivante permet d'extraire les noms de produit dans votre échantillon de données:
Briser le match motif
" \(|\/| -| \*"
:Pour en savoir plus sur les expressions régulières, consultez cette expression régulière tutoriel, l'un des nombreux disponibles sur le web.
Pour que la fonction puisse fonctionner, vous devez définir une référence à Microsoft VBScript Regular Expressions 5.5. Pour ce faire, sélectionnez Outils/Références de l'IDE VBA et de vérifier cet élément, qui sera ainsi jusqu'à la longue liste de références.
La sous-routine suivante s'applique à la chaîne d'extraction de chaque cellule dans la colonne de données et écrit la nouvelle chaîne de caractères à un résultat déterminé colonne. Bien qu'il serait possible de simplement appeler la fonction pour chaque cellule dans la colonne de données, cela permettrait de payer les frais généraux de la compilation de l'expression régulière (qui s'applique à toutes les cellules) chaque fois que la fonction a été appelée. Pour éviter cette surcharge de travail, la sous-routine divise la fonction de match en deux parties, la définition du modèle en dehors de la boucle à travers les cellules de données, et le modèle d'exécution à l'intérieur de la boucle.
Quelque chose comme cela fonctionne:
Si vous avez plus que les deux personnages nid dans un peu plus SI consolidés. Il y a une limite sur la quantité de ce que vous pouvez faire avant d'atteindre la limite d'itération pour les fonctions de la Cellule.
Vous pouvez utiliser le
Split()
fonction. Voici un exemple:Il suffit de faire la même chose pour n'importe quel autre caractère que vous voulez diviser. En savoir plus sur ce sur MSDN: http://msdn.microsoft.com/fr-fr/library/6x627e5f%28v=vs.80%29.aspx
L'autre (mieux?) alternative que je vois serait d'utiliser
InStr()
avecLeft()
.InStr()
renvoie la position du premier match qu'il trouve. Ensuite vous avez juste à recadrer votre chaîne. Voici un exemple:http://msdn.microsoft.com/fr-fr/library/8460tsh1%28v=vs.80%29.aspx
position > 0
valable sur une chaîne de caractères?Cela devrait fonctionner pour vous:
Il n'est pas supprimer la fuite des espaces sur la fin, mais un simple ajout à la sous pourrait changer que si vous vouliez. Bonne Chance.
PLUS:
Vous pouvez obtenir la ligne de la dernière cellule de données dans une colonne et utilisez-la dans votre gamme de produits(voir ci-dessous):