Ekstrak angka dari string di Excel

0

Saya memiliki kolom di excel yang terlihat seperti ini:

Census Tract 2941.10 (part), Carson city, Compton CCD, Los Angeles County, California
Census Tract 5410.02, Carson city, Compton CCD, Los Angeles County, California
Census Tract 5431 (part), Carson city, Compton CCD, Los Angeles County, California
Census Tract 5432.02 (part), Carson city, Compton CCD, Los Angeles County, California
Census Tract 5433.04, Carson city, Compton CCD, Los Angeles County, California

Saya perlu mengekstrak 2941.10, 5410.02, 5431, dll ... Saya mencoba rumus berikut: =MID(E4,MATCH(TRUE,ISNUMBER(1*MID(E4,ROW($3:$606),1)),0),COUNT(1*MID(E4,ROW($3:$606),1)))

Namun, desimal di tengah angka membuatnya sehingga dua angka terakhir terputus. Tidak semua angka memiliki desimal, dan jumlah teks setelah angka bervariasi berdasarkan baris (jadi rumus kiri dan kanan bukan opsi). Saya harus menggunakan formula excel dan bukan VBA / makro.

Ada saran?

L. Batty
sumber
Gunakan "Teks ke Kolom"
Hannu

Jawaban:

2

Gunakan ini:

=--TRIM(SUBSTITUTE(MID(SUBSTITUTE(A1," ",REPT(" ",999)),2*999,999),",",""))

masukkan deskripsi gambar di sini


Rumus di atas mengasumsikan bahwa angka selalu merupakan "kata" ketiga dalam teks. Jika bukan itu masalahnya DAN hanya ada satu kelompok nomor per string, Anda bisa menggunakan rumus array ini:

=SUM(IFERROR(--TRIM(SUBSTITUTE(MID(SUBSTITUTE(A1," ",REPT(" ",999)),(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-1)*999+1,999),",","")),0))

Menjadi formula array itu perlu dikonfirmasi dengan Ctrl-Shift-Enter, bukan Enter ketika keluar dari mode edit. Jika dilakukan dengan benar maka Excel akan memasukkan {}rumus.

Itu iterates melalui kata-kata dan mengembalikan jumlah semua grup angka, dan karena hanya ada satu grup angka itu mengembalikan hanya itu.

masukkan deskripsi gambar di sini

Scott Craner
sumber
0

EDIT: Saya menghapus jawaban pertama saya karena saya menyadari bahwa Anda mungkin ingin mengembalikan string angka, termasuk memimpin atau mengekor 0, dan setidaknya dapat dipikirkan bahwa string digit mungkin lebih panjang dari 15 digit.

Jadi rumus di bawah ini mengembalikan angka sebagai string teks, menjaga setiap nol di depan dan di belakangnya. misalnya 2941.10dikembalikan seperti itu, dan bukan sebagai2941.1

Ini adalah salah satu solusi formula

Pertama didefinisikan seqsebagai rumus Bernama:

seq Refers To:  =ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))

seqakan mengembalikan array angka {1...255} Tidak seperti ROW(INDIRECT(...metode pengembalian array, rumus ini non-volatile.

Kemudian Anda dapat menggunakan rumus array yang dimasukkan dengan menahan ctrl+shiftsambil memukulenter

=MID(A1,MATCH(TRUE,ISNUMBER(-MID(A1,seq,1)),0),LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)-MATCH(TRUE,ISNUMBER(-MID(A1,seq,1)),0)+1)

atau, Anda dapat menggunakan rumus ini sedikit lebih lama tetapi biasanya dimasukkan:

=MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))+1)

Jika demikian, seperti pada contoh Anda, bahwa urutan digit selalu dimulai pada posisi ke-14, maka Anda dapat menggunakan rumus sederhana yang dimasukkan secara normal ini:

=MID(A1,14,LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)-13)

masukkan deskripsi gambar di sini

Ron Rosenfeld
sumber