Înlocuiți textul din celule - Sfaturi Excel

Cuprins

Jean a pus săptămâna aceasta întrebarea Excel:

Încerc să convertesc o carte de preț furnizor în Excel pentru a se potrivi codurilor lor UPC cu sistemul nostru de coduri UPC. Prețul lor are o coloană în Excel cu o serie de numere, de ex. 000004560007 SAU cel000612004. Ceea ce trebuie să fac este de două ori. Trebuie să scot primele trei zerouri fără să șterg niciun alt 0 din celulă. Apoi, trebuie să adaug un cod de 3 cifre „upc” înainte de prima cifră numerică din celulă. Aceasta va fi o nevoie continuă. Va trebui să antrenez mai mulți oameni pentru a utiliza sistemul Excel.

Se pare că Jean s-a gândit deja să folosească Edit-Replace pentru a scăpa de cele trei zerouri. Acest lucru nu ar funcționa, deoarece înlocuirea ediției pe „000004560007” ar determina dispariția ambelor apariții de 000

Mai întâi vreau să sugerez lui Jean să introducă o coloană temporară lângă codurile de preț curente, să scrie o formulă pentru a face transformarea, apoi să folosească Editare-Copiere, Editare-LipireSpecial-Valori pentru a copia formula înapoi peste codurile de preț originale.

Funcția REPLACE () prost documentată va face trucul în acest caz. Am fost dezamăgit de implementarea REPLACE (). Aș fi crezut că va cere un text specific de înlocuit, dar în schimb îi cere utilizatorului să afle pozițiile personajelor de înlocuit. REPLACE va înlocui o parte a unui șir de text cu un șir nou. Cele patru argumente pe care le transmiteți funcției sunt celula care conține textul vechi, poziția caracterului din textul vechi pe care doriți să îl înlocuiți, numărul de caractere de înlocuit și noul text de utilizat.

Presupunerea mea simplificatoare este că cele trei zerouri reprezintă debutul codului UPC în șir. Astfel, nu este nevoie să căutați primul caracter numeric din celulă. Odată ce formula găsește cele trei zerouri, poate înlocui aceste trei zerouri cu șirul „upc”.

Pentru a găsi locația primei apariții a „000” în text, utilizați această formulă:

=FIND(A2,"000")

Formula pe care Jean ar trebui să o introducă în celula B2 ar fi:

=REPLACE(A2,FIND("000",A2),3,"upc")

Gândul meu este să îi fac pe analiștii de preț să evidențieze o serie de celule și apoi să invoce această macro. Macrocomanda va utiliza o buclă cu „Pentru fiecare celulă din selecție” la început. Cu această buclă, „celula” devine o variabilă de gamă specială. Puteți utiliza cell.address sau cell.value sau cell.row pentru a găsi adresa, valoarea sau rândul celulei curente din buclă. Iată macro-ul:

Public Sub Jean() ' This macro will replace the first occurrence of "000" ' in each selected cell with the string "upc" ' copyright 1999 www.MrExcel.com For Each cell In Selection cell.Value = Replace(cell.Value, "000", "upc", 1, 1, vbTextCompare) Next cell End Sub

Rețineți că aceasta este o macrocomandă de tip distructiv. Când utilizatorul evidențiază o gamă de celule și rulează macro-ul, acele celule vor fi modificate. Este de la sine înțeles că doriți să vă testați temeinic macro-ul pe datele de test înainte de a le elibera pe datele reale de producție. Când aveți o situație precum cea a lui Jean, în care vi se va cere în mod constant să transformați o coloană folosind o formulă complexă, scrierea unei macro simple, precum cea ilustrată aici, poate fi un instrument eficient și care economisește timp.

Articole interesante...