Isi kandungan
Tutorial ini akan mengajar anda cara mengasingkan teks daripada nombor dalam Excel dengan menggunakan formula asli dan fungsi tersuai. Anda juga akan belajar cara membahagikan teks dan nombor kepada dua lajur yang berasingan.
Bayangkan ini: anda menerima data mentah untuk analisis dan mengetahui bahawa nombor bercampur dengan teks dalam satu lajur. Dalam kebanyakan situasi, pastinya lebih mudah untuk meletakkannya dalam lajur berasingan untuk pemeriksaan yang lebih dekat.
Sekiranya anda menggunakan data homogen, anda mungkin boleh menggunakan fungsi KIRI, KANAN dan MID untuk mengekstrak bilangan aksara yang sama dari kedudukan yang sama. Tetapi itu adalah senario yang ideal untuk ujian makmal. Dalam kehidupan sebenar, anda berkemungkinan besar berurusan dengan data yang berbeza di mana nombor datang sebelum teks, selepas teks atau antara teks. Contoh di bawah memberikan penyelesaian tepat untuk kes ini.
Cara mengalih keluar teks dan menyimpan nombor dalam sel Excel
Penyelesaian berfungsi dalam Excel 365, Excel 2021 , dan Excel 2019
Microsoft Excel 2019 memperkenalkan beberapa fungsi baharu yang tidak tersedia dalam versi terdahulu dan kami akan menggunakan salah satu fungsi tersebut, iaitu TEXTJOIN, untuk menanggalkan aksara teks daripada sel mengandungi nombor.
Formula generik ialah:
TEXTJOIN("", TRUE, IFERROR(MID( sel, ROW(INDIRECT( "1:"&LEN( sel))), 1) *1, ""))Dalam Excel 365 dan 2021, yang ini juga akan berfungsi:
TEXTJOIN("", TRUE,IFERROR(MID( sel, SEQUENCE(LEN( sel)), 1) *1, ""))Pada pandangan pertama, formula mungkin kelihatan agak menakutkan, tetapi ia berfungsi :)
Sebagai contoh, untuk mengalih keluar teks daripada nombor dalam A2, masukkan salah satu daripada formula di bawah dalam B2, dan kemudian salin ke seberapa banyak sel yang diperlukan.
Dalam Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
Dalam Excel 2019, ia mesti dimasukkan sebagai formula tatasusunan dengan Ctrl + Shift + Enter . Dalam tatasusunan dinamik Excel, ia berfungsi sebagai formula biasa yang dilengkapkan dengan kekunci Enter.
Dalam Excel 365 dan 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Hasilnya, semua aksara teks adalah dialih keluar daripada sel dan nombor disimpan:
Cara formula ini berfungsi:
Untuk lebih memahami logik, mari kita mula menyiasat formula dari dalam:
Anda menggunakan sama ada ROW(INDIRECT("1:"&LEN(rentetan))) atau SEQUENCE(LEN(rentetan)) untuk mencipta jujukan nombor yang sepadan dengan jumlah nombor daripada aksara dalam rentetan sumber, dan kemudian suapkan nombor berjujukan tersebut ke fungsi MID sebagai nombor permulaan. Dalam B2, bahagian formula ini kelihatan seperti berikut:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Fungsi MID mengekstrak setiap aksara daripada A2 bermula dengan yang pertama dan mengembalikannya sebagai tatasusunan:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Tatasusunan ini didarab dengan 1. Nilai berangka kekal tanpa perubahan, sambil mendarab aksara bukan angka menghasilkan #VALUE! ralat:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Fungsi IFERROR mengendalikanralat ini dan menggantikannya dengan rentetan kosong:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Tatasusunan akhir ini disampaikan kepada fungsi TEXTJOIN, yang menggabungkan nilai bukan kosong dalam tatasusunan ( ignore_empty argumen ditetapkan kepada TRUE) menggunakan rentetan kosong ("") untuk pembatas:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Petua. Untuk Excel 2016 - 2007, penyelesaian juga wujud, tetapi formulanya jauh lebih kompleks. Anda boleh menemuinya dalam tutorial ini: Cara mengekstrak nombor dalam Excel.
Fungsi tersuai untuk mengalih keluar teks daripada nombor
Penyelesaian berfungsi untuk semua versi Excel
Jika anda menggunakan versi Excel yang lebih lama atau temui formula di atas juga sukar untuk diingati, tiada apa yang menghalang anda daripada mencipta fungsi anda sendiri dengan sintaks yang lebih ringkas dan nama mesra pengguna seperti RemoveText . Fungsi takrif pengguna (UDF) boleh ditulis dalam dua cara:
Kod VBA 1:
Di sini, kita melihat setiap aksara dalam rentetan sumber satu demi satu satu dan semak sama ada ia angka atau tidak. Jika nombor, aksara ditambah pada rentetan yang terhasil.
Fungsi RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i , 1)) Kemudian sRes = sRes & Pertengahan(str, i, 1) Tamat Jika Seterusnya i RemoveText = sRes End FunctionKod VBA 2:
Kod mencipta objek untuk memproses ungkapan biasa. Menggunakan RegExp, kami mengalih keluar semua aksara selain daripada digit 0-9 daripada rentetan sumber.
Fungsi RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp") .Global = True .Corak = "[^0-9]" RemoveText = .Replace(str, "") Tamat Dengan Fungsi TamatPada lembaran kerja kecil, kedua-dua kod akan berfungsi dengan baik. Pada lembaran kerja besar yang fungsinya dipanggil ratusan atau ribuan kali, kod 2 yang menggunakan VBScript.RegExp akan berfungsi dengan lebih pantas.
Langkah terperinci untuk memasukkan kod dalam buku kerja anda boleh didapati di sini: Cara memasukkan VBA kod dalam Excel.
Mana-mana pendekatan yang anda pilih, dari perspektif pengguna akhir, fungsi untuk memadam teks dan meninggalkan nombor adalah semudah ini:
RemoveText(string)Contohnya, untuk alih keluar aksara bukan angka daripada sel A2, formula dalam B2 ialah:
=RemoveText(A2)
Cukup salin ke bawah lajur dan anda akan mendapat hasil ini:
Nota. Kedua-dua formula asli dan fungsi tersuai mengeluarkan rentetan angka . Untuk mengubahnya menjadi nombor, darabkan hasil dengan 1, atau tambah sifar, atau bungkus formula dalam fungsi VALUE. Contohnya:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Cara mengalih keluar nombor daripada rentetan teks dalam Excel
Penyelesaian berfungsi dalam Excel 365, Excel 2021 dan Excel 2019
Formula untuk mengalih keluar nombor daripada rentetan abjad angka hampir serupa dengan yang dibincangkan dalam contoh sebelumnya.
Untuk Excel 365 - 2019:
TEXTJOIN(" ", BENAR, JIKA(ISERR(MID( sel , ROW(TIDAK LANGSUNG("1:"&LEN( sel ) )), 1) *1), MID( sel , ROW(TIDAK LANGSUNG("1:"&LEN( sel ))), 1), ""))Dalam Excel 2019, ingat untuk menjadikannya formula tatasusunan dengan menekan kekunci Ctrl + Shift + Enter bersama-sama.
Untuk Excel 365 dan 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( sel , SEQUENCE(LEN( sel 1) *1), MID ( sel , SEQUENCE(LEN( sel )), 1), ""))Contohnya, untuk menanggalkan nombor daripada rentetan dalam A2, formulanya ialah:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Atau
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
Akibatnya, semua nombor dialih keluar daripada sel dan aksara teks disimpan:
Seperti yang ditunjukkan dalam tangkapan skrin di atas, formula menjalurkan aksara berangka dari mana-mana kedudukan dalam rentetan: pada permulaan, akhir dan tengah. Walau bagaimanapun, terdapat kaveat: jika rentetan bermula dengan nombor diikuti dengan ruang , ruang itu dikekalkan, yang menghasilkan masalah ruang utama (seperti dalam B2).
Untuk menyingkirkan ruang tambahan sebelum teks , bungkus formula dalam fungsi TRIM seperti ini:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Kini, hasil anda benar-benar sempurna!
Cara formula ini berfungsi:
Pada dasarnya, formula berfungsi sama seperti yang dijelaskan dalam contoh sebelumnya. Perbezaannya ialah, daripada tatasusunan terakhir yang disampaikan kepada fungsi TEXTJOIN, anda perlu mengalih keluar nombor, bukan teks. Untuk melakukannya, kami menggunakan gabungan fungsi IF dan ISERROR.
Seperti yang anda ingat,MID(…)+0 menjana tatasusunan nombor dan #VALUE! ralat yang mewakili aksara teks dalam kedudukan yang sama:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Fungsi ISERROR menangkap ralat dan menghantar tatasusunan nilai Boolean yang terhasil kepada IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Apabila fungsi IF melihat TRUE (ralat), ia memasukkan aksara teks yang sepadan ke dalam tatasusunan yang diproses dengan bantuan fungsi MID yang lain. Apabila fungsi IF melihat FALSE (nombor), ia menggantikannya dengan rentetan kosong:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Susun atur akhir ini diserahkan kepada TEXTJOIN, jadi ia menggabungkan aksara teks dan mengeluarkan hasilnya.
Fungsi tersuai untuk mengalih keluar nombor daripada teks
Penyelesaian berfungsi untuk semua versi Excel
Perlu diingat bahawa formula yang teguh harus disimpan mudah, saya akan berkongsi kod fungsi yang ditentukan pengguna (UDF) untuk menanggalkan sebarang aksara angka.
Kod VBA 1:
Fungsi RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Kemudian sRes = sRes & Pertengahan(str, i, 1) Tamat Jika Seterusnya i RemoveNumbers = sRes End FunctionVBA code 2:
Function RemoveNumbers(str As String ) Sebagai Rentetan Dengan CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "") End With End FunctionSeperti yang berlaku pada fungsi RemoveText, kod kedua adalah lebih baik untuk digunakan dalam besarlembaran kerja untuk mengoptimumkan prestasi.
Setelah kod ditambahkan pada buku kerja anda, anda boleh mengalih keluar semua aksara angka daripada sel menggunakan fungsi tersuai ini:
RemoveNumbers(string)Dalam kes kami, formula dalam B2 ialah:
=RemoveNumbers(A2)
Untuk memangkas ruang hadapan jika ada, sarangkan fungsi tersuai di dalam TRIM seperti yang anda lakukan pada formula asli:
=TRIM(RemoveNumbers(A2))
Pisah nombor dan teks kepada lajur yang berasingan
Dalam situasi apabila anda ingin mengasingkan teks dan nombor kepada dua lajur, adalah bagus untuk menyelesaikan tugas dengan satu formula , setuju? Untuk ini, kami hanya menggabungkan kod fungsi RemoveText dan RemoveNumbers ke dalam satu fungsi, bernama SplitTextNumbers atau hanya Split , atau apa sahaja yang anda suka :)
Kod VBA 1:
Fungsi SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" Untuk i = 1 Kepada Len(str) sCurChar = Mid(str, i, 1) Jika Benar = IsNumeric(sCurChar) Kemudian sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End FunctionVBA code 2:
Function SplitTextNumbers(str As String , is_remove ) Astext As_remove Dengan CreateObject ( "VBScript.RegExp") .Global = Benar Jika Benar = is_remove_text Kemudian .Corak = "[^0-9]" Lain.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "") End With End FunctionFungsi tersuai baharu kami memerlukan dua argumen:
SplitTextNumbers(string, is_remove_text)Di mana is_remove_text ialah nilai Boolean yang menunjukkan aksara yang hendak dilucutkan:
- TRUE atau 1 - alih keluar teks dan simpan nombor
- FALSE atau 0 - alih keluar nombor dan simpan teks
Untuk set data sampel kami, formula menggunakan borang ini:
Untuk mengalih keluar aksara bukan angka:
=SplitTextNumbers(A2, TRUE)
Untuk memadamkan aksara angka :
=SplitTextNumbers(A2, FALSE)
Petua. Untuk mengelakkan kemungkinan masalah ruang utama, saya mengesyorkan sentiasa membalut formula yang mengalih keluar nombor dalam fungsi TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Alat khas untuk mengalih keluar nombor atau teks
Bagi mereka yang melakukannya bukan seperti merumitkan perkara yang tidak perlu, saya akan menunjukkan cara kita sendiri untuk mengalih keluar teks atau nombor dalam Excel.
Dengan mengandaikan Suite Ultimate kami ditambahkan pada reben Excel anda, inilah yang anda lakukan:
- Pada tab Ablebits Data , dalam kumpulan Teks , klik Alih Keluar > Alih Keluar Aksara .
Petua. Jika hasilnya mengandungi beberapa ruang utama, Ruang Pangkasalat akan menghapuskannya dalam masa yang singkat.
Begitulah cara untuk mengalih keluar aksara teks atau angka daripada rentetan dalam Excel. Saya mengucapkan terima kasih kerana membaca dan berharap dapat berjumpa anda di blog kami minggu depan!
Muat turun yang tersedia
Alih keluar teks atau nombor dalam Excel - contoh (fail .xlsm)
Suite Ultimate - versi percubaan (fail .exe)