Mundarija
Ushbu qo'llanma sizga Excelda matnni raqamlardan tabiiy formulalar va maxsus funktsiyalardan qanday ajratishni o'rgatadi. Shuningdek, siz matn va raqamlarni ikkita alohida ustunga bo'lishni o'rganasiz.
Tasavvur qiling: siz tahlil qilish uchun xom ma'lumotlarni olasiz va raqamlar bir ustunda matn bilan aralashganligini bilib olasiz. Aksariyat hollarda ularni yaqinroq tekshirish uchun alohida ustunlarga bo'lish qulayroq bo'ladi.
Agar siz bir hil ma'lumotlar bilan ishlayotgan bo'lsangiz, ehtimol siz "CHAP", "O'NG" va "O'RTA" funksiyalaridan foydalanishingiz mumkin. bir xil pozitsiyadan bir xil miqdordagi belgilar. Ammo bu laboratoriya tekshiruvlari uchun ideal stsenariy. Haqiqiy hayotda siz bir-biriga o'xshash bo'lmagan ma'lumotlar bilan shug'ullanishingiz mumkin, bu erda raqamlar matndan oldin, matndan keyin yoki matn o'rtasida keladi. Quyidagi misollar aynan shu holat uchun yechimlarni taqdim etadi.
Matnni qanday olib tashlash va Excel kataklarida raqamlarni saqlash
Yechim Excel 365, Excel 2021 da ishlaydi. , va Excel 2019
Microsoft Excel 2019 oldingi versiyalarida mavjud boʻlmagan bir nechta yangi funksiyalarni taqdim etdi va biz hujayradan matn belgilarini olib tashlash uchun shunday funksiyalardan biri, yaʼni TEXTJOIN funksiyasidan foydalanamiz. raqamlarni o'z ichiga olgan.
Umumiy formula:
TEXTJOIN("", TRUE, IFERROR(MID( hujayra, ROW)(INDIRECT( "1:"&LEN(<1)>hujayra))), 1) *1, ""))Excel 365 va 2021 da bu ham ishlaydi:
TEXTJOIN("", TRUE,IFERROR(MID( hujayra, SEQUENCE(LEN( hujayra)), 1) *1, ""))Bir qarashda formulalar biroz qo'rqinchli ko'rinishi mumkin, lekin ular ishlaydi :)
Masalan, A2 formatidagi raqamlardan matnni olib tashlash uchun B2 formatidagi quyidagi formulalardan birini kiriting va undan so'ng uni kerak bo'lganda shuncha katakka ko'chiring.
Excel 365 - 2019 da:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
Excel 2019 da u Ctrl + Shift + Enter tugmalari yordamida massiv formulasi sifatida kiritilishi kerak. Excel dinamik massivida u Enter tugmasi bilan to'ldirilgan oddiy formula sifatida ishlaydi.
Excel 365 va 2021 da:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Natijada barcha matn belgilari hujayradan olib tashlanadi va raqamlar saqlanadi:
Ushbu formula qanday ishlaydi:
Mantiqni yaxshiroq tushunish uchun, keling, tekshirishni boshlaylik. formulani ichkaridan:
Siz umumiy songa mos keladigan raqamlar ketma-ketligini yaratish uchun QAT(INDIRECT("1:"&LEN(string))) yoki SEQUENCE(LEN(string)) dan foydalanasiz. manba qatoridagi belgilar soni va keyin ushbu ketma-ket raqamlarni MID funktsiyasiga boshlang'ich raqamlar sifatida kiriting. B2 da formulaning bu qismi quyidagicha ko'rinadi:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
MID funksiyasi har bir belgini A2 dan birinchisidan boshlab chiqaradi va ularni massiv sifatida qaytaradi:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Ushbu massiv 1 ga ko'paytiriladi. Raqamli qiymatlar o'zgarmasdan saqlanib qoladi, raqamli bo'lmagan belgini ko'paytirish esa #VALUEga olib keladi! xato:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
IFERROR funksiyasi ishlaydibu xatolar va ularni boʻsh satrlar bilan almashtiradi:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Ushbu yakuniy massiv massivdagi boʻsh boʻlmagan qiymatlarni birlashtiruvchi TEXTJOIN funksiyasiga xizmat qiladi ( ignore_empty argument TRUE ga o'rnatilgan) ajratuvchi uchun bo'sh satr ("") yordamida:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Maslahat. Excel 2016 - 2007 uchun yechim ham mavjud, ammo formula ancha murakkab. Siz buni ushbu qo'llanmada topishingiz mumkin: Excelda raqamlarni qanday chiqarish mumkin.
Raqamlardan matnni olib tashlash uchun maxsus funksiya
Yechim barcha Excel versiyalari uchun ishlaydi
Agar siz Excelning eski versiyasidan foydalansangiz yoki yuqoridagi formulalarni ham topsangiz eslab qolish qiyin, oddiyroq sintaksis va RemoveText kabi foydalanuvchi uchun qulay nom bilan o'z funksiyangizni yaratishga hech narsa xalaqit bermaydi. Foydalanuvchi tomonidan aniqlangan funktsiya (UDF) ikki usulda yozilishi mumkin:
VBA kodi 1:
Bu erda biz manba qatoridagi har bir belgini birma-bir ko'rib chiqamiz. bitta va raqamli yoki yo'qligini tekshiring. Agar raqam bo'lsa, belgi natijadagi satrga qo'shiladi.
Funktsiya RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i) , 1)) Keyin sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA code 2:
Kod muntazam ifodani qayta ishlash uchun obyekt yaratadi. RegExp-dan foydalanib, biz manba qatoridan 0-9 raqamlaridan tashqari barcha belgilarni olib tashlaymiz.
Funktsiya RemoveText(str As String ) bilan String sifatida CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) Function end bilan tugaydiKichik ish varaqlarida ikkala kod ham bir xil darajada yaxshi ishlaydi. Funktsiya yuzlab yoki minglab marta chaqiriladigan katta ish varaqlarida VBScript.RegExp dan foydalanadigan 2-kod tezroq ishlaydi.
Kodni ishchi kitobingizga kiritish bo'yicha batafsil qadamlarni bu yerda topishingiz mumkin: VBA-ni qanday kiritish kerak Excelda kod.
Qaysi yondashuvni tanlamasligingizdan qat'iy nazar, oxirgi foydalanuvchi nuqtai nazaridan, matnni o'chirish va raqamlarni qoldirish funksiyasi shu qadar oddiy:
RemoveText(string)Masalan, A2 yacheykasidan raqamli bo'lmagan belgilarni olib tashlang, B2 formulasi:
=RemoveText(A2)
Shunchaki uni ustunga ko'chiring, shunda siz quyidagi natijani olasiz:
Eslatma. Mahalliy formulalar ham, maxsus funksiya ham raqamli qatorni chiqaradi. Uni raqamga aylantirish uchun natijani 1 ga ko'paytiring yoki nol qo'shing yoki formulani VALUE funksiyasiga o'rang. Masalan:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Excelda matn qatoridan raqamlarni qanday olib tashlash mumkin
Yechim Excel 365, Excel 2021 va Excelda ishlaydi 2019
Alfanumerik qatordan raqamlarni olib tashlash formulalari avvalgi misolda ko‘rib chiqilganlarga deyarli o‘xshash.
Excel 365 - 2019 uchun:
TEXTJOIN(" ", TRUE, AGAR(ISERR(MID( hujayra , QAT(BILOSHI)"1:"&LEN( hujayra ) )), 1) *1), MID( yacheyka , QAT (BEVOILOVIY("1:"&LEN( ) katak ))), 1), ""))Excel 2019 da Ctrl + Shift + Enter tugmalarini birga bosib, uni massiv formulasi ga aylantirishni unutmang.
Excel 365 va 2021 uchun:
TEXTJOIN("", TRUE, AGAR(ISERROR(MID( hujayra , SEQUENCE)(LEN( yacheyka 1) *1), MID ( hujayra , SEQUENCE(LEN( hujayra )), 1), ""))Masalan, A2 qatoridan raqamlarni ajratib olish uchun formula quyidagicha:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Yoki
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
Natijada yacheykadan barcha raqamlar olib tashlanadi va matn belgilari saqlanadi:
Yuqoridagi skrinshotda ko'rsatilganidek, formula satrning istalgan pozitsiyasidan raqamli belgilarni ajratadi: boshida, oxirida va o'rtasida, ammo ogohlantirish bor: agar satr bo'lsa. raqamdan keyin bo'sh joy qo'yiladigan bilan boshlanadi, bu bo'sh joy saqlanib qoladi, bu esa oldingi bo'shliqlar muammosini keltirib chiqaradi (B2 da).
Matn oldidagi qo'shimcha bo'shliqlardan xalos bo'lish uchun , formulani TRIM funksiyasiga quyidagicha o'rang:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Endi, natijalaringiz mutlaqo mukammal!
Ushbu formula qanday ishlaydi:
Aslida formula avvalgi misolda tushuntirilgandek ishlaydi. Farqi shundaki, oxirgi massivdan TEXTJOIN funksiyasiga qadar matnni emas, raqamlarni olib tashlash kerak. Buni amalga oshirish uchun biz IF va ISERROR funksiyalarining kombinatsiyasidan foydalanamiz.
Esingizda bo'lsa,MID(…)+0 raqamlar qatorini va #VALUE! bir xil pozitsiyalardagi matn belgilarini ifodalovchi xatolar:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
ISERROR funksiyasi xatolarni aniqlaydi va natijada mantiqiy qiymatlar qatorini IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Ushbu yakuniy massiv TEXTJOIN ga uzatiladi, shuning uchun u matn belgilarini birlashtiradi va natija.
Matndan raqamlarni olib tashlash uchun maxsus funksiya
Yechim barcha Excel versiyalari uchun ishlaydi
Mustahkam formula saqlanishi kerakligini yodda tuting. oddiy, men har qanday raqamli belgilarni olib tashlash uchun foydalanuvchi tomonidan belgilangan funktsiya (UDF) kodini baham ko'raman.
VBA kodi 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) Agar False = IsNumeric(Mid(str, i, 1)) bo'lsa, sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionVBA code 2:
Function RemoveNumbers(str As String ) CreateObject ("VBScript.RegExp") bilan string sifatida ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End with End FunctionRemoveText funktsiyasida bo'lgani kabi, ikkinchi kodni quyidagi dasturda ishlatish yaxshiroqdir. kattaunumdorlikni optimallashtirish uchun ishchi varaqlar.
Kod ish kitobingizga qo'shilgach, ushbu maxsus funksiyadan foydalanib, hujayradan barcha raqamli belgilarni olib tashlashingiz mumkin:
Raqamlarni (string) olib tashlashBizning holatda, B2 formulasi:
=RemoveNumbers(A2)
Agar mavjud bo'lsa, bosh bo'shliqlarni kesish uchun TRIM ichidagi maxsus funktsiyani mahalliy formula kabi joylashtiring:
=TRIM(RemoveNumbers(A2))
Raqamlar va matnni alohida ustunlarga bo'ling
Matn va raqamlarni ikkita ustunga ajratmoqchi bo'lsangiz, ishni bitta formula bilan bajarsangiz yaxshi bo'lardi. , rozimisiz? Buning uchun biz RemoveText va RemoveNumbers funksiyalarining kodini SplitTextNumbers yoki oddiygina Split deb nomlangan bitta funktsiyaga birlashtiramiz. xohlaganingizcha :)
VBA kodi 1:
Funktsiya SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" i = 1 To Len(str) uchun sCurChar = Mid(str, i, 1) Agar True = IsNumeric(sCurChar) bo'lsa, sNum = sNum & sCurChar Boshqa sText = sText & amp; sCurChar End If Next If Next i If True = is_remove_text Keyin SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End FunktsiyaVBA kodi 2:
Funktsiya SplitTextNumbers(str As String , is_remove_text) CreateObject bilan ( "VBScript.RegExp" ) .Global = rost bo'lsa rost = is_remove_text Keyin .Pattern = "[^0-9]" Boshqa.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End Function with EndBizning yangi maxsus funksiyamiz ikkita argument talab qiladi:
SplitTextNumbers(string, is_remove_text)Bu yerda is_remove_text - bu qaysi belgilarni ajratish kerakligini ko'rsatadigan mantiqiy qiymat:
- TRUE yoki 1 - matnni olib tashlash va raqamlarni saqlash
- YOLG'ON yoki 0 - raqamlarni olib tashlash va matnni saqlash
Bizning namunaviy ma'lumotlar to'plamimiz uchun formulalar quyidagi shaklni oladi:
Raqamli bo'lmagan belgilarni o'chirish uchun:
=SplitTextNumbers(A2, TRUE)
Raqamli belgilarni o'chirish uchun :
=SplitTextNumbers(A2, FALSE)
Maslahat. Etakchi bo'shliqlar bilan yuzaga kelishi mumkin bo'lgan muammoning oldini olish uchun men har doim TRIM funksiyasida raqamlarni olib tashlaydigan formulani o'rashni tavsiya qilaman:
=TRIM(SplitTextNumbers(A2, FALSE))
Raqamlarni yoki matnni o'chirish uchun maxsus vosita
Shunday qiladiganlar uchun narsalarni keraksiz murakkablashtirishni yoqtirmayman, men Excelda matn yoki raqamlarni olib tashlashning o‘ziga xos usulini ko‘rsataman.
Agar bizning Ultimate Suite Excel tasmangizga qo‘shilgan bo‘lsa, siz shunday qilasiz:
- Ablebits Data yorlig'idagi Matn guruhida O'chirish > Belgilarni o'chirish -ni bosing.
Maslahat. Agar natijalarda ba'zi bosh bo'shliqlar bo'lsa, Bo'shliqlarni kesishvosita ularni qisqa vaqt ichida yo'q qiladi.
Mana, Excelda matn yoki raqamli belgilarni satrdan olib tashlash mumkin. O'qiganingiz uchun minnatdorchilik bildiraman va sizni keyingi haftada blogimizda ko'rishni orziqib kutaman!
Mavjud yuklab olishlar
Excelda matn yoki raqamlarni o'chirish - misollar (.xlsm fayli)
Ultimate Suite - sinov versiyasi (.exe fayli)