Excel: Ekstrak nombor daripada rentetan teks

  • Berkongsi Ini
Michael Brown

Tutorial menunjukkan cara mengekstrak nombor daripada pelbagai rentetan teks dalam Excel dengan menggunakan formula dan alat Ekstrak.

Apabila ia datang untuk mengekstrak sebahagian daripada rentetan teks dengan panjang tertentu , Excel menyediakan tiga fungsi Substring (Kiri, Kanan dan Tengah) untuk mengendalikan tugas dengan cepat. Apabila ia datang untuk mengekstrak nombor daripada rentetan alfanumerik, Microsoft Excel menyediakan... tiada apa-apa.

Untuk mendapatkan nombor daripada rentetan dalam Excel, ia memerlukan sedikit kepintaran, sedikit kesabaran dan sekumpulan fungsi yang berbeza bersarang antara satu sama lain. Atau, anda boleh menjalankan alat Ekstrak dan menyelesaikan tugas dengan klik tetikus. Di bawah anda akan menemui butiran penuh tentang kedua-dua kaedah.

    Cara mengekstrak nombor daripada hujung rentetan teks

    Apabila anda mempunyai lajur rentetan abjad angka di mana nombor datang selepas teks, anda boleh menggunakan formula berikut untuk mendapatkannya.

    RIGHT( sel, LEN( sel) - MAX(IF(ISNUMBER(MID( sel)>, ROW(TIDAK LANGSUNG("1:"&LEN( sel))), 1) *1)=SALAH, ROW(TIDAK LANGSUNG("1:"&LEN( sel))), 0)))

    Kami akan membincangkan logik formula sedikit kemudian. Buat masa ini, cuma gantikan sel dengan rujukan kepada sel yang mengandungi rentetan asal (A2 dalam kes kami), dan masukkan formula dalam mana-mana sel kosong dalam baris yang sama, katakan dalam B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    Formula ini mendapat nombor hanya dari hujung. Jika rentetan juga mempunyai nombor di awal atau tengah, ia adalahdiabaikan:

    Pengekstrakan dilakukan dengan fungsi RIGHT yang tergolong dalam kategori fungsi Teks. Output fungsi ini sentiasa teks . Dalam kes kami, hasilnya ialah subrentetan angka , yang dari segi Excel juga ialah teks, bukan nombor.

    Jika anda memerlukan hasil menjadi nombor (yang boleh anda gunakan dalam pengiraan selanjutnya), kemudian bungkus formula ke dalam fungsi VALUE atau lakukan operasi aritmetik yang tidak mengubah hasil, katakan, darab dengan 1 atau tambah 0. Untuk menangkap ralat dalam rentetan yang tidak mengandungi nombor tunggal, gunakan fungsi IFERROR. Contohnya:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    atau

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    Nota. Dalam Dynamic Array Excel (Office 365 dan 2021), anda memasukkan formula dengan cara biasa dengan kekunci Enter. Dalam Excel 2019 dan lebih awal, ia hanya berfungsi sebagai formula tatasusunan, jadi ingat untuk menekan Ctrl + Shift + Enter untuk melengkapkannya.

    Cara formula ini berfungsi:

    Untuk mengekstrak nombor daripada rentetan abjad angka, perkara pertama yang anda perlu tahu ialah tempat untuk memulakan pengekstrakan. Kedudukan aksara bukan angka terakhir dalam rentetan ditentukan dengan bantuan formula rumit ini:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN) A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    Untuk memahami logik, mari kita siasat dari dalam :

    Gabungan ROW(INDIRECT("1:"&LEN(A2)))mencipta urutan nombor yang sepadan dengan jumlah aksara dalam rentetan sumber (A2), dan kami menyampaikan nombor jujukan ini kepada MID sebagai nombor permulaan:

    MID(A2, {1;2;3;4 ;5;6;7;8}, 1)

    Fungsi MID menarik setiap aksara individu daripada A2 dan mengembalikannya sebagai tatasusunan:

    {"0";"5";" -";"E";"C";"-";"0";"1"}

    Memandangkan MID ialah fungsi teks, outputnya sentiasa teks (seperti yang anda boleh perhatikan, semua aksara disertakan dalam tanda petikan). Untuk menukar nombor kepada nombor, kami mendarabkan tatasusunan dengan 1 (penafian berganda --MID() akan mempunyai kesan yang sama). Hasil daripada operasi ini ialah tatasusunan nombor dan #VALUE! ralat yang mewakili aksara bukan angka:

    ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})

    Fungsi ISNUMBER menilai setiap elemen tatasusunan dan memberikan keputusannya dalam bentuk nilai Boolean - BENAR untuk nombor, SALAH untuk apa-apa lagi:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}

    Tatasusunan ini pergi ke ujian logik fungsi IF, di mana setiap elemen tatasusunan dibandingkan dengan FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    Bagi setiap FALSE (nilai bukan angka), satu lagi fungsi ROW(INDIRECT()) kembali kedudukan relatifnya dalam rentetan. Untuk setiap TRUE (nilai angka), sifar dikembalikan. Tatasusunan yang terhasil kelihatan sepertiberikut:

    {0;0;3;4;5;6;0;0}

    Selebihnya mudah. Fungsi MAX mencari nombor tertinggi dalam tatasusunan di atas, iaitu kedudukan nilai bukan angka terakhir dalam rentetan (6 dalam kes kami). Cuma, tolak kedudukan itu daripada jumlah panjang rentetan yang dikembalikan oleh LEN, dan hantarkan hasilnya ke KANAN untuk memberitahunya berapa banyak aksara untuk diekstrak dari sebelah kanan rentetan:

    RIGHT(A2, LEN (A2) - 6)

    Selesai!

    Cara mengekstrak nombor dari permulaan rentetan teks

    Jika anda bekerja dengan rekod di mana teks muncul selepas nombor, anda boleh ekstrak nombor dari permulaan rentetan dengan menggunakan formula generik ini:

    LEFT( sel, MATCH(FALSE, ISNUMBER(MID( sel, ROW(INDIRECT("1: "&LEN( sel)+1)), 1) *1), 0) -1)

    Dengan rentetan asal dalam A2, gunakan formula berikut untuk mendapatkan nombor:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Tidak kira berapa banyak digit di tengah atau akhir, hanya nombor permulaan diekstrak:

    Nota. Dalam Excel 365 dan Excel 2021, kerana sokongan untuk tatasusunan dinamik, formula biasa berfungsi dengan baik. Dalam Excel 2019 dan lebih awal, anda harus menekan Ctrl + Shift + Enter untuk menjadikannya formula tatasusunan secara eksplisit.

    Cara formula ini berfungsi:

    Di sini, kami sekali lagi menggunakan gabungan fungsi ROW, INDIRECT dan LEN untuk mencipta urutan nombor yang sama dengan jumlah aksara dalam rentetan sumber ditambah 1 (peranan ituaksara tambahan akan menjadi jelas sedikit kemudian).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID dan ISNUMBER melakukan kerja yang sama seperti dalam contoh sebelumnya - MID menarik aksara individu dan ISNUMBER menukarkannya kepada nilai logik. Tatasusunan TRUE dan FALSE yang terhasil pergi ke fungsi MATCH sebagai tatasusunan carian:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH mengira kedudukan relatif FALSE pertama, memberikan kita kedudukan aksara bukan angka pertama dalam rentetan (3 dalam A2). Untuk mengekstrak nombor sebelumnya, kami menolak 1 daripada meletakkan aksara teks pertama dan menyampaikan perbezaan kepada num_chars argumen fungsi LEFT:

    LEFT(A2, 3-1)

    Sekarang, kembali kepada aksara "tambahan" dalam jujukan yang dijana oleh ROW(INDIRECT()+1)). Seperti yang anda sedia maklum, jujukan ini menyediakan titik permulaan untuk fungsi MID. Tanpa +1, MID akan mengekstrak sama banyak aksara seperti yang terdapat dalam rentetan asal. Jika rentetan mengandungi nombor sahaja, ISNUMBER hanya akan mengembalikan TRUE manakala MATCH memerlukan sekurang-kurangnya satu FALSE. Untuk memastikan itu, kami menambah satu lagi aksara kepada jumlah panjang rentetan, yang fungsi MID akan menukar kepada rentetan kosong. Contohnya, dalam B7, MID mengembalikan tatasusunan ini:

    {"1";"2";"3";"4";""}

    Nota. Seperti halnya dengan fungsi RIGHT, LEFT juga mengembalikan angkasubrentetan , yang secara teknikalnya ialah teks, bukan nombor. Untuk mendapatkan hasil sebagai nombor dan bukannya rentetan angka, sarangkan formula dalam fungsi VALUE atau darabkan hasilnya dengan 1 seperti yang ditunjukkan dalam contoh pertama.

    Cara mendapatkan nombor daripada sebarang kedudukan dalam rentetan

    Jika tugas anda membayangkan mengekstrak nombor dari mana-mana dalam rentetan, anda boleh menggunakan formula membingungkan berikut yang diterbitkan di forum MrExcel:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    Di mana A2 adalah rentetan teks asal.

    Memecahkan formula ini memerlukan artikel yang berasingan, jadi anda boleh menyalinnya ke lembaran kerja anda untuk memastikan ia benar-benar berfungsi :)

    Setelah memeriksa keputusan, walau bagaimanapun, anda mungkin melihat satu kelemahan yang tidak ketara - jika rentetan sumber tidak mengandungi nombor, formula mengembalikan sifar, seperti dalam baris 6 dalam tangkapan skrin di atas. Untuk membetulkannya, anda boleh membungkus formula dalam pernyataan IF, ujian logik yang menyemak sama ada rentetan sumber mengandungi sebarang nombor. Jika ya, formula mengekstrak nombor, sebaliknya mengembalikan rentetan kosong:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Seperti yang ditunjukkan dalam tangkapan skrin di bawah, formula yang dipertingkatkan berfungsi dengan baik (pujian kepada Alex, guru Excel kami, untuk penambahbaikan ini):

    Tidak seperti dalam semua contoh sebelumnya, hasil formula ini ialah nombor . Untuk memastikan perkara ini, cuma perhatikan nilai sejajar kanan dalam lajur B dan sifar di hadapan terpotong.

    Petua. Dalam Excel 365 -Excel 2019, terdapat penyelesaian yang lebih mudah dengan bantuan fungsi TEXTJOIN. Sila lihat Cara mengalih keluar teks dan menyimpan nombor.

    Ekstrak nombor daripada rentetan teks dengan Ultimate Suite

    Seperti yang baru anda lihat, tiada formula Excel yang remeh untuk menarik nombor daripada rentetan teks. Jika anda menghadapi masalah memahami formula atau mengubahnya untuk set data anda, anda mungkin menyukai cara mudah ini untuk mendapatkan nombor daripada rentetan dalam Excel.

    Dengan Suite Ultimate kami ditambahkan pada reben Excel anda, beginilah cara anda boleh mendapatkan semula nombor dengan cepat daripada sebarang rentetan abjad angka:

    1. Pergi ke tab Data Ablebits > Teks dan klik Ekstrak :

    2. Pilih semua sel dengan rentetan sumber.
    3. Pada anak tetingkap alat Ekstrak, pilih butang radio Ekstrak nombor .
    4. Bergantung pada sama ada anda mahu hasil menjadi formula atau nilai, pilih kotak Sisipkan sebagai formula atau biarkan ia tidak dipilih (lalai).

      Nasihat saya ialah memilih kotak ini jika anda mahu nombor yang diekstrak dikemas kini secara automatik sebaik sahaja sebarang perubahan dibuat pada rentetan sumber. Jika anda mahu keputusan menjadi bebas pada rentetan asal (cth. sekiranya anda bercadang untuk mengalih keluar data sumber pada masa akan datang), maka jangan pilih kotak ini.

    5. Klik butang Sisipkan Hasil . Selesai!

    Seperti contoh sebelumnya, hasilpengekstrakan ialah nombor , bermakna anda bebas mengira, menjumlahkan, purata atau melakukan sebarang pengiraan lain dengannya.

    Dalam contoh ini, kami telah memilih untuk memasukkan keputusan sebagai nilai dan alat tambah melakukan apa yang diminta:

    Jika kotak semak Sisipkan sebagai formula dipilih, anda' d amati formula dalam bar formula. Ingin tahu yang mana satu? Muat turun sahaja percubaan Ultimate Suite dan lihat sendiri :)

    Muat turun yang tersedia

    Nombor Ekstrak Excel - contoh buku kerja (fail.xlsx)

    Suite Ultimate - versi percubaan (.exe fail)

    Michael Brown ialah peminat teknologi yang berdedikasi dengan semangat untuk memudahkan proses kompleks menggunakan alat perisian. Dengan lebih sedekad pengalaman dalam industri teknologi, beliau telah mengasah kemahirannya dalam Microsoft Excel dan Outlook, serta Helaian Google dan Dokumen. Blog Michael berdedikasi untuk berkongsi pengetahuan dan kepakarannya dengan orang lain, menyediakan petua dan tutorial yang mudah diikuti untuk meningkatkan produktiviti dan kecekapan. Sama ada anda seorang profesional berpengalaman atau pemula, blog Michael menawarkan pandangan berharga dan nasihat praktikal untuk memanfaatkan sepenuhnya alatan perisian penting ini.