Saya perlu menemukan Ruang terakhir di Sel XLS

17

Saya memiliki lembar Excel dengan nilai teks, misalnya dalam A1: "Ini adalah teks". Saya perlu menemukan posisi karakter spasi terakhir. Apakah ada formula excel yang akan memberi saya hasil yang saya inginkan? Saya telah mencoba MENCARI dan MENCARI, namun ini mulai dari kiri, yang saya butuhkan adalah mulai dari kanan.

Dheer
sumber
Duplikat lintas-situs dengan vintage yang sama: stackoverflow.com/q/18617349
Mathieu K.

Jawaban:

28

Jika dengan nilai kosong yang Anda maksud adalah "spasi", dan oleh XLS yang Anda maksud adalah Excel, maka Anda dapat menggunakan rumus ini (dengan asumsi tes yang Anda ingin temukan ruang terakhir di dalamnya A1):

=FIND("☃",SUBSTITUTE(A1," ","☃",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Anda dapat membaginya menjadi 3 bagian:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))memberi Anda jumlah ruang, sebut saja x,
  • SUBSTITUTE(A1," ","☃",[x])akan menggantikan xruang th (jadi yang terakhir) oleh manusia salju,
  • FIND("☃",[...])akan memberi Anda posisi manusia salju. Yang merupakan posisi ruang terakhir.
m4573r
sumber
Bekerja dengan sempurna. Terima kasih. Butuh beberapa saat untuk mencari tahu mengapa itu berhasil terlepas dari penjelasan Anda :)
Dheer
5
+1 untuk jawaban yang bagus, terperinci, dan karakter pengganti paling kreatif.
Doug Glancy
Juga berfungsi di LibreOffice Calc dan Google Sheets.
Mathieu K.
8

Ini cara lain, karakter apa saja diperbolehkan dalam A1 (bahkan manusia salju!)

=LOOKUP(2^15,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))))

FIND memiliki argumen ketiga yang menentukan posisi awal pencarian, jika Anda menerapkan array nilai integer 1 ke n (di mana n adalah panjang A1) untuk parameter itu Anda mendapatkan array kembali dengan angka terakhir menjadi posisi ruang terakhir.

LOOKUPkemudian mengekstraksi angka itu dengan mencari nilai yang lebih besar dari nilai apa pun yang mungkin ditemukan dalam array itu, dalam hal ini angka terakhir ditemukan

Dalam Excel 2010atau lambat Anda juga bisa menggunakan AGGREGATEfungsi seperti ini

=AGGREGATE(14,6,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

FINDmengembalikan array yang sama seperti sebelumnya dan dengan menggunakan 14 sebagai argumen AGGREGATE1 dan 1 sebagai yang terakhir Anda mendapatkan nilai terbesar dalam array, sementara mengabaikan kesalahan [6]

barry houdini
sumber
1
bekerja dengan baik. Meskipun saya adalah pengembang beberapa waktu yang lalu, saya masih tidak tahu bagaimana dan mengapa INDIRECT bekerja :)
Dheer
1
Dengan asumsi A1 memiliki 12 karakter maka bagian ini "1:"&LEN(A1)dievaluasi menjadi "1:12" - itu adalah string yang ROW tidak dapat diproses tetapi INDIRECT mengubah string menjadi referensi yang valid yang dapat ditangani oleh ROW sehingga ROW (1:12) kemudian memberi Anda {1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
barry houdini
Terima kasih sudah menjelaskan. Masuk akal sekarang. Yang berarti Temukan sendiri secara implisit bekerja dengan array dan dieksekusi untuk setiap nilai sebagai posisi awal ...
Dheer
Benar, FIND mengembalikan array, mis. Jika A1 mengandung barry larry houdinimaka FIND akan mengembalikan array ini {6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}dan LOOKUP dan / atau AGGREGATE akan mengambil nilai numerik terakhir / terbesar dari itu, yaitu 12
barry houdini
Catatan: ini berfungsi di LibreOffice Calc. Itu tidak berfungsi di Google Sheets, melainkan menemukan kejadian pertama.
Mathieu K.