Excel - Faire correspondre une chaîne à une colonne et incrémenter de 1

Problème

J'ai deux feuilles avec des données comme suit:

Drap :

Chaîne, résultat

A0101

Format de la chaîne dans la feuille de feuille 1 colonne A: Axxxx (A - alphabet a à z, x nombre 0-9). l'Alphabet est le démarreur de la série.

Feuille 2:

 A0101001 B0102001 Q9911001 S7834001 A0101002 A0101003 

Colonne A feuille 2 - Axxxxxxx (A - alphabet de a à z, x numéro de 0 à 9)

les trois derniers chiffres sont en séquence pour chacun des cinq premiers caractères.

comme dans les données ci-dessus:

 A0101001 A0101002 A0101003 

Le nombre ne passera jamais à 005 pour la chaîne A0101

Je veux faire correspondre la chaîne de la cellule A2, feuille 1, aux valeurs de la colonne A de la feuille 2.

Si ma chaîne est: A0101 de la feuille 1 et que je trouve les trois entrées suivantes de la feuille 2: A0101001, A0101002, A0101003, le résultat dans la cellule B2 de la feuille 1 est A0101004. Mes données sont séquentielles.

Solution

J'ai ajouté une autre donnée en A3 dans la feuille 1

B0102

Dans la feuille 2, la ligne correspond aux en-têtes de colonne et les données, au-dessous.

chaîne:

 A0101001 B0102001 Q9911001 S7834001 A0101002 A0101003 

Ensuite, essayez cette macro "test". Si vous voulez vérifier de nouveau, lancez mcaro "undo" puis "test"

 Sub test () Dim r As Range, c As Range, x As String Dim j As Entier, cfind As Range Dim y As String, ajoute As String j = 0 avec feuilles de calcul ("sheet1"). Définissez r = Range (.Range ( "A2"), .Range ("A2"). End (xlDown)) 'msgbox r.Adresse pour chaque c In rx = c.Value avec des feuilles de calcul ("sheet2") Définissez cfind = .Cells.Find (what: = x, lookat: = xlPart) Si cfind n’est rien alors GoTo nnext j = j + 1 add = cfind.Address 'msgbox j' msgbox add Do Set cfind = .Cells.FindNext (cfind) Si cfind n’est rien alors GoTo nnext If cfind .Address = add then GoTo line1 'msgbox cfind.Address j = j + 1' msgbox j Boucle line1: y = milieu (cfind, 6, 2) finit par 'sheet2 c.Offset (0, 1) = x & y & j + 1 nnext: j = 0 Suivant c Fin par fin Sous sous undo () avec feuilles de calcul ("sheet1") Plage (.Range ("B2"), .Range ("B2"). End (xlDown)). Effacer End With End Sub 

Remarque

Merci à venkat1926 pour cette astuce.

Article Précédent Article Suivant

Les Meilleurs Conseils