Daftar Isi
Tutorial ini akan mengajarkan Anda cara memisahkan teks dari angka di Excel dengan menggunakan rumus asli dan fungsi kustom. Anda juga akan belajar cara membagi teks dan angka menjadi dua kolom terpisah.
Bayangkan ini: Anda menerima data mentah untuk dianalisis dan menemukan bahwa angka-angka bercampur dengan teks dalam satu kolom. Dalam kebanyakan situasi, tentu akan lebih nyaman untuk memilikinya dalam kolom terpisah untuk pemeriksaan lebih dekat.
Jika Anda bekerja dengan data yang homogen, Anda mungkin bisa menggunakan fungsi LEFT, RIGHT, dan MID untuk mengekstrak jumlah karakter yang sama dari posisi yang sama. Tapi itu adalah skenario ideal untuk tes laboratorium. Dalam kehidupan nyata, Anda kemungkinan besar berurusan dengan data yang berbeda di mana angka datang sebelum teks, setelah teks atau di antara teks. Contoh-contoh di bawah ini memberikan solusi yang tepat untuk inikasus.
Cara menghapus teks dan menyimpan angka di sel Excel
Solusi ini berfungsi di Excel 365, Excel 2021, dan Excel 2019
Microsoft Excel 2019 memperkenalkan beberapa fungsi baru yang tidak tersedia di versi sebelumnya, dan kita akan menggunakan salah satu fungsi tersebut, yaitu TEXTJOIN, untuk menghapus karakter teks dari sel yang berisi angka.
Rumus generiknya adalah:
TEXTJOIN("", TRUE, IFERROR(MID( sel , ROW(INDIRECT("1:"&LEN( sel ))), 1) *1, ""))Di Excel 365 dan 2021, yang satu ini juga akan berfungsi:
TEXTJOIN("", TRUE, IFERROR(MID( sel , SEQUENCE(LEN( sel )), 1) *1, ""))Pada pandangan pertama, rumus-rumus ini mungkin terlihat agak mengintimidasi, tetapi memang berhasil :)
Misalnya, untuk menghapus teks dari angka di A2, masukkan salah satu rumus di bawah ini di B2, lalu salin ke sel sebanyak yang diperlukan.
Di Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, ""))
Di Excel 2019, itu harus dimasukkan sebagai rumus array dengan Ctrl + Shift + Enter . Dalam array dinamis Excel, ini berfungsi sebagai rumus normal yang dilengkapi dengan tombol Enter.
Di Excel 365 dan 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Hasilnya, semua karakter teks dihapus dari sel dan angka disimpan:
Bagaimana formula ini bekerja:
Untuk lebih memahami logikanya, mari kita mulai menyelidiki rumus dari dalam:
Anda menggunakan ROW(INDIRECT("1:"&LEN(string)))) atau SEQUENCE(LEN(string)) untuk membuat urutan angka yang sesuai dengan jumlah total karakter dalam string sumber, lalu memasukkan angka-angka berurutan tersebut ke fungsi MID sebagai angka awal. Di B2, bagian rumus ini terlihat sebagai berikut:
MID(A2, {1;2;3;4;4;5;5;6;7;7;8;9;10;11;12;13;14;15}, 1)
Fungsi MID mengekstrak setiap karakter dari A2 dimulai dengan yang pertama dan mengembalikannya sebagai array:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Larik ini dikalikan dengan 1. Nilai numerik bertahan tanpa perubahan, sementara mengalikan karakter non-numerik menghasilkan kesalahan #VALUE!
{2;1;0;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;}
Fungsi IFERROR menangani error ini dan menggantikannya dengan string kosong:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Larik akhir ini disajikan ke fungsi TEXTJOIN, yang menggabungkan nilai yang tidak kosong dalam larik ( ignore_empty argumen diatur ke TRUE) menggunakan string kosong ("") untuk pembatas:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Tip. Untuk Excel 2016 - 2007, solusi juga ada, tetapi rumusnya jauh lebih kompleks. Anda dapat menemukannya di tutorial ini: Cara mengekstrak angka di Excel.
Fungsi kustom untuk menghapus teks dari angka
Solusi ini berfungsi untuk semua versi Excel
Jika Anda menggunakan versi Excel yang lebih lama atau menemukan rumus di atas terlalu sulit untuk diingat, tidak ada yang menghalangi Anda untuk membuat fungsi Anda sendiri dengan sintaks yang lebih sederhana dan nama yang ramah pengguna seperti HapusTeks Fungsi yang ditentukan pengguna (UDF) dapat ditulis dalam dua cara:
Kode VBA 1:
Di sini, kita melihat setiap karakter dalam string sumber satu per satu dan memeriksa apakah itu numerik atau bukan. Jika angka, karakter ditambahkan ke string yang dihasilkan.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionKode VBA 2:
Kode ini membuat objek untuk memproses ekspresi reguler. Dengan menggunakan RegExp, kita menghapus semua karakter selain angka 0-9 dari string sumber.
Function RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionPada lembar kerja kecil, kedua kode akan bekerja sama baiknya. Pada lembar kerja besar di mana fungsi dipanggil ratusan atau ribuan kali, kode 2 yang menggunakan VBScript.RegExp akan bekerja lebih cepat.
Langkah-langkah mendetail untuk menyisipkan kode di buku kerja Anda dapat ditemukan di sini: Cara memasukkan kode VBA di Excel.
Pendekatan mana pun yang Anda pilih, dari perspektif pengguna akhir, fungsi untuk menghapus teks dan meninggalkan angka sesederhana ini:
HapusTeks(string)Misalnya, untuk menghapus karakter non-numerik dari sel A2, rumus di B2 adalah:
=HapusTeks(A2)
Salin saja ke bawah kolom, dan Anda akan mendapatkan hasil ini:
Catatan. Baik rumus asli maupun output fungsi kustom a string numerik Untuk mengubahnya menjadi angka, kalikan hasilnya dengan 1, atau tambahkan nol, atau bungkus rumus dalam fungsi VALUE. Sebagai contoh:
=HapusTeks(A2) + 0
=VALUE(HapusTeks(A2))
Cara menghapus angka dari string teks di Excel
Solusi ini berfungsi di Excel 365, Excel 2021, dan Excel 2019
Rumus untuk menghapus angka dari string alfanumerik cukup mirip dengan yang dibahas dalam contoh sebelumnya.
Untuk Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( sel , ROW(INDIRECT("1:"&LEN( sel ) )), 1) *1), MID( sel , ROW(INDIRECT("1:"&LEN( sel ))), 1), ""))Di Excel 2019, ingatlah untuk menjadikannya sebagai rumus larik dengan menekan tombol Ctrl + Shift + Enter secara bersamaan.
Untuk Excel 365 dan 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( sel , SEQUENCE(LEN( sel 1) *1), MID( sel , SEQUENCE(LEN( sel )), 1), ""))Misalnya, untuk menghapus angka dari string di A2, rumusnya adalah:
=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), ""))
Hasilnya, semua angka dihapus dari sel dan karakter teks disimpan:
Seperti yang ditunjukkan pada tangkapan layar di atas, rumus ini menghapus karakter numerik dari posisi mana pun dalam string: di awal, di akhir, dan di tengah. Namun, ada peringatan: jika string dimulai dengan angka yang diikuti oleh spasi , ruang itu dipertahankan, yang menghasilkan masalah spasi terdepan (seperti di B2).
Untuk menyingkirkan ekstra spasi sebelum teks , bungkus rumus dalam fungsi TRIM seperti ini:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Sekarang, hasil Anda benar-benar sempurna!
Bagaimana formula ini bekerja:
Intinya, cara kerja rumusnya sama seperti yang dijelaskan pada contoh sebelumnya. Perbedaannya adalah, dari array akhir yang disajikan ke fungsi TEXTJOIN, Anda perlu menghapus angka, bukan teks. Untuk melakukannya, kita menggunakan kombinasi fungsi IF dan ISERROR.
Seperti yang Anda ingat, MID(...)+0 menghasilkan array angka dan #VALUE! error yang merepresentasikan karakter teks di posisi yang sama:
{2;1;0;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;#NILAI!;}
Fungsi ISERROR menangkap kesalahan dan meneruskan larik nilai Boolean yang dihasilkan ke IF:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Ketika fungsi IF melihat TRUE (kesalahan), ia menyisipkan karakter teks yang sesuai ke dalam larik yang diproses dengan bantuan fungsi MID lainnya. Ketika fungsi IF melihat FALSE (angka), ia menggantinya dengan string kosong:
{"";""";"";""; "S"; "u"; "n"; "s"; "e"; "t";""; "R"; "o"; "a"; "d"}
Array terakhir ini diteruskan ke TEXTJOIN, sehingga ia menggabungkan karakter teks dan mengeluarkan hasilnya.
Fungsi kustom untuk menghapus angka dari teks
Solusi ini berfungsi untuk semua versi Excel
Dengan mengingat bahwa rumus yang kuat harus tetap sederhana, saya akan membagikan kode fungsi yang ditentukan pengguna (UDF) untuk menghapus karakter numerik apa pun.
Kode VBA 1:
Fungsi HapusAngka(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i HapusAngka = sRes End FunctionKode VBA 2:
Fungsi HapusAngka(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" HapusAngka2 = .Replace(str, "" ) End With End FunctionSeperti halnya dengan fungsi RemoveText, kode kedua lebih baik digunakan di lembar kerja besar untuk mengoptimalkan kinerja.
Setelah kode ditambahkan ke buku kerja Anda, Anda bisa menghapus semua karakter numerik dari sel menggunakan fungsi kustom ini:
HapusAngka(string)Dalam kasus kita, rumus dalam B2 adalah:
=HapusAngka(A2)
Untuk memangkas spasi di depan jika ada, sarangkan fungsi kustom di dalam TRIM seperti yang Anda lakukan pada rumus asli:
=TRIM(HapusAngka(A2))
Pisahkan angka dan teks ke dalam kolom terpisah
Dalam situasi ketika Anda ingin memisahkan teks dan angka ke dalam dua kolom, akan lebih baik jika pekerjaan itu dilakukan dengan satu formula, setuju? Untuk ini, kita cukup menggabungkan kode dari HapusTeks dan RemoveNumbers menjadi satu fungsi, bernama SplitTextNumbers , atau secara sederhana Berpisah , atau apa pun yang Anda suka :)
Kode VBA 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then 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 If EndFungsiKode VBA 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionFungsi kustom baru kita memerlukan dua argumen:
SplitTextNumbers(string, is_remove_text)Di mana is_remove_text adalah nilai Boolean yang menunjukkan karakter mana yang akan dihapus:
- BENAR atau 1 - hapus teks dan simpan angka
- SALAH atau 0 - hapus angka dan simpan teks
Untuk set data sampel kami, rumus-rumusnya mengambil bentuk ini:
Untuk menghapus karakter non-numerik:
=SplitTextNumbers(A2, TRUE)
Untuk menghapus karakter numerik:
=BagiTeksBilangan(A2, FALSE)
Tip. Untuk menghindari potensi masalah spasi di depan, saya sarankan untuk selalu membungkus rumus yang menghapus angka dalam fungsi TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Alat khusus untuk menghapus angka atau teks
Bagi mereka yang tidak suka mempersulit hal-hal yang tidak perlu, saya akan menunjukkan cara kami sendiri untuk menghapus teks atau angka di Excel.
Dengan asumsi Ultimate Suite kami ditambahkan ke pita Excel Anda, inilah yang Anda lakukan:
- Pada Data Ablebits tab, di tab Teks kelompok, klik Hapus > Hapus Karakter .
Tip. Jika hasilnya mengandung beberapa spasi di depan, alat Trim Spaces akan menghilangkannya dalam waktu singkat.
Itulah cara menghapus karakter teks atau numerik dari string di Excel. Saya berterima kasih telah membaca dan berharap dapat melihat Anda di blog kami minggu depan!
Unduhan yang tersedia
Hapus teks atau angka di Excel - contoh (file .xlsm)
Ultimate Suite - versi percobaan (file .exe)