Lahtrites teksti asendamine - Exceli näpunäited

Lang L: none (table-of-contents)

Jean esitas selle nädala Exceli küsimuse:

Püüan Exceli tarnijate hinnaraamatut teisendada, et nende UPC-koodid vastaksid meie UPC-koodisüsteemile. Nende hinnaraamatus on Exceli veerg, kus on arvude seeria, nt. 000004560007 VÕI cel000612004. Mida ma pean tegema, on kaks korda. Pean esimesed kolm nulli välja võtma, lahtris muid 0-sid kustutamata. Järgmisena pean lahtrisse lisama 3-kohalise koodi "upc" enne esimest numbrit. See on pidev vajadus. Pean Exceli süsteemi kasutama koolitama mitu inimest.

Tundub, et Jean kaalus juba kolmest nullist vabanemiseks Edit-Replace kasutamist. See ei töötaks, kuna muutmise asendamise tegemine saidil "000004560007" kaob mõlemad 000 esinemissagedust.

Kõigepealt tahan soovitada, et Jean sisestaks praeguste hinnakoodide kõrvale ajutise veeru, kirjutaks ümberkujundamiseks valemi, seejärel kasutage Edit-Copy, Edit-PasteSpecial-Values, et kopeerida valem algsete hinnakoodide kohale.

Halvasti dokumenteeritud funktsioon REPLACE () teeb antud juhul trikki. Pettusin REPLACE () rakendamises. Ma oleksin arvanud, et see nõuab konkreetset teksti asendamist, kuid selle asemel palub kasutajal välja selgitada asendatavate märkide positsioonid. REPLACE asendab osa tekstistringist uue stringiga. Neli funktsiooni edastatavat argumenti on lahter, mis sisaldab vana teksti, märgi asukohta vanas tekstis, mille soovite asendada, asendatavate märkide arvu ja uut kasutatavat teksti.

Minu lihtsustav eeldus on, et kolm nulli tähistavad stringi UPC-koodi algust. Seega pole vaja lahtris esimest numbrimärki otsida. Kui valem leiab kolm nulli, võib see need kolm nulli asendada stringiga "upc".

"000" esmakordse asukoha leidmiseks tekstis kasutage järgmist valemit:

=FIND(A2,"000")

Valem, mille Jean peaks lahtrisse B2 sisestama, oleks:

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

Minu mõte on lasta hinnakujundusanalüütikutel esile tuua mitu lahtrit ja seejärel seda makrot kasutada. Makro kasutab silmust, mille alguses on kiri "Iga valiku lahtri jaoks". Selle tsükli abil saab "lahtrist" spetsiaalne vahemiku muutuja. Lingis oleva praeguse lahtri aadressi, väärtuse või rea leidmiseks võite kasutada cell.address või cell.value või cell.row. Siin on makro:

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

Pange tähele, et see on destruktiivset tüüpi makro. Kui kasutaja tõstab esile lahtrivahemiku ja käivitab makro, muudetakse neid lahtreid. On ütlematagi selge, et soovite oma makrot testiandmetega põhjalikult testida, enne kui need reaalsete tootmisandmete põhjal lahti lasete. Kui teil on Jeansi sarnane olukord, kus peate pidevalt veergu keerulise valemi abil teisendama, võib siin kirjeldatud lihtsa makro kirjutamine olla tõhus ja ajasäästlik tööriist.

Huvitavad Artiklid...