Apakah ada cara yang efisien untuk mengidentifikasi kecocokan karakter / string terakhir dalam string menggunakan fungsi dasar? Yaitu bukan karakter / string terakhir dari string, tetapi posisi kemunculan karakter / string terakhir dalam sebuah string. Search
dan find
keduanya bekerja dari kiri ke kanan jadi saya tidak bisa memikirkan cara menerapkannya tanpa algoritma rekursif yang panjang. Dan solusi ini sekarang tampaknya sudah usang.
excel-formula
geotheory
sumber
sumber
search
danfind
keduanya konten string permintaan , 'cocok' adalah istilah standar, ditambah contoh yang ditautkan.Jawaban:
Dengan versi excel yang lebih baru, muncul fungsi baru dan metode baru. Meskipun dapat direplikasi dalam versi yang lebih lama (namun saya belum pernah melihatnya sebelumnya), ketika seseorang memiliki Excel O365, ia dapat menggunakan:
Ini juga dapat digunakan untuk mengambil posisi terakhir dari substring (tumpang tindih):
Sementara ini keduanya memungkinkan kita untuk tidak lagi menggunakan karakter pengganti yang sewenang-wenang dan memungkinkan pola yang tumpang tindih, "downside" adalah penggunaan array.
Catatan: Anda bisa memaksa perilaku yang sama di versi Excel yang lebih lama melalui keduanya
Dimasukkan melalui CtrlShiftEnter, atau menggunakan inline
INDEX
untuk menyingkirkan persimpangan implisit:sumber
Saya rasa saya mengerti maksud Anda. Katakanlah misalnya Anda menginginkan \ paling kanan di string berikut (yang disimpan dalam sel A1):
Drive: \ Folder \ SubFolder \ Filename.ext
Untuk mendapatkan posisi yang terakhir \, Anda akan menggunakan rumus ini:
Itu memberitahu kita yang paling kanan \ adalah pada karakter 24. Ia melakukan ini dengan mencari "@" dan mengganti "\" terakhir dengan "@". Ini menentukan yang terakhir dengan menggunakan
Dalam skenario ini, substring hanyalah "\" yang memiliki panjang 1, sehingga Anda dapat meninggalkan divisi di akhir dan cukup gunakan:
Sekarang kita bisa menggunakannya untuk mendapatkan path folder:
Inilah jalur folder tanpa trailing \
Dan untuk mendapatkan hanya nama file:
Namun, di sini adalah versi alternatif untuk mendapatkan semuanya di sebelah kanan dari contoh terakhir dari karakter tertentu. Jadi, dengan menggunakan contoh yang sama, ini juga akan mengembalikan nama file:
sumber
SUBSTITUTE
semua (3) contoh\
tanpa apa-apa (memperpendek panjang string) oleh 3) -> bahwa\
(yang ke-3) adalah yang terakhir; gantikan dengan sesuatu yang unik danFIND
posisi karakter unik itu ... luar biasa ... terima kasih!=ISNUMBER(SEARCH("@",A1))
, seperti yang diusulkan oleh @ gwin003 .99
? Apakah Anda hanya mengasumsikan panjang berbagai string ini kurang dari 99? Lihat jawaban ini dan jawaban ini yang tidak membuat asumsi seperti itu.Bagaimana dengan membuat fungsi khusus dan menggunakannya dalam rumus Anda? VBA memiliki fungsi bawaan
InStrRev
,, yang melakukan persis seperti yang Anda cari.Masukkan ini ke modul baru:
Dan fungsi Anda akan terlihat seperti ini (dengan asumsi string asli dalam B1):
sumber
tiger[ dan Jean-François Corbett menyarankan untuk menggunakan rumus ini untuk menghasilkan string tepat dari kemunculan terakhir karakter "\"
Jika karakter yang digunakan sebagai pemisah adalah spasi, "", maka rumusnya harus diubah menjadi:
Tidak perlu disebutkan, karakter "{" dapat diganti dengan karakter apa pun yang tidak "normal" akan muncul di teks untuk diproses.
sumber
Baru saja menemukan solusi ini, tidak perlu VBA;
Temukan kejadian terakhir "_" dalam contoh saya;
Dijelaskan dalam ke luar;
Semoga ini bermanfaat.
sumber
Anda bisa menggunakan fungsi ini saya buat untuk menemukan contoh terakhir dari string dalam sebuah string.
Memang rumus Excel yang diterima berfungsi, tetapi terlalu sulit untuk dibaca dan digunakan. Pada titik tertentu, Anda harus membelah diri menjadi potongan-potongan yang lebih kecil agar dapat dirawat. Fungsi saya di bawah ini dapat dibaca, tetapi itu tidak relevan karena Anda menyebutnya dalam rumus menggunakan parameter bernama. Ini membuatnya mudah digunakan.
Saya menggunakannya seperti ini:
sumber
Mempertimbangkan bagian dari Komentar yang dibuat oleh @Silk tujuan akhir saya benar-benar adalah untuk mendapatkan segalanya dengan benar bahwa kejadian terakhir pendekatan alternatif dengan formula yang sangat sederhana adalah menyalin kolom (katakanlah
A
) string dan pada salinan (katakanlah ColumnB) terapkan Find and Replace. Misalnya mengambil contoh:Drive:\Folder\SubFolder\Filename.ext
Ini mengembalikan apa yang tersisa (di sini
Filename.ext
) setelah instance terakhir dari karakter apa pun yang dipilih (di sini\
) yang terkadang merupakan tujuan dan memfasilitasi menemukan posisi karakter seperti terakhir dengan formula pendek seperti:sumber
Saya agak terlambat ke pesta, tapi mungkin ini bisa membantu. Tautan dalam pertanyaan memiliki rumus yang serupa, tetapi milik saya menggunakan pernyataan IF () untuk menghilangkan kesalahan.
Jika Anda tidak takut dengan Ctrl + Shift + Enter, Anda dapat melakukannya dengan cukup baik dengan rumus array.
String (dalam sel A1): "one.two.three.four"
Rumus:
Hasil: 14
Pertama,
mengembalikan array bilangan bulat 1-99:
{1,2,3,4,...,98,99}
.Lanjut,
mengembalikan array string 1-panjang yang ditemukan di string target, lalu mengembalikan string kosong setelah panjang string target tercapai:
{"o","n","e",".",..."u","r","","",""...}
Lanjut,
membandingkan setiap item dalam array dengan string "." dan mengembalikan indeks karakter dalam string atau FALSE:
{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Terakhir,
mengembalikan nilai maksimum array:
14
Kelebihan formula ini adalah pendek, relatif mudah dipahami, dan tidak memerlukan karakter unik.
Kekurangannya adalah penggunaan Ctrl + Shift + Enter dan batasan panjang string. Ini dapat dikerjakan dengan variasi yang ditunjukkan di bawah ini, tetapi variasi itu menggunakan fungsi OFFSET () yang merupakan fungsi volatil (baca: lambat).
Tidak yakin berapa kecepatan rumus ini vs. yang lain.
Variasi:
sumber
Dalam versi Excel yang lebih baru (2013 dan lebih tinggi), pengisian flash mungkin merupakan solusi sederhana dan cepat, lihat: Menggunakan Isi Flash di Excel .
sumber
Cara sederhana untuk melakukannya di VBA adalah:
sumber
Sangat terlambat ke pesta, tetapi solusi sederhana menggunakan VBA untuk membuat fungsi kustom.
Tambahkan fungsi ke VBA di Buku Kerja, Lembar Kerja, atau Modul VBA
Kemudian formula sel
dalam sel dan string yang akan dicari di sel B1 akan mengisi sel dengan teks yang mengekor "/" terakhir dari sel B1. Tidak ada batasan panjang, tidak ada rumus yang tidak jelas. Satunya downside yang bisa saya pikirkan adalah perlunya buku kerja yang didukung makro.
Fungsi VBA pengguna apa pun dapat dipanggil dengan cara ini untuk mengembalikan nilai ke rumus sel, termasuk sebagai parameter ke fungsi Excel bawaan.
Jika Anda akan menggunakan fungsinya dengan berat, Anda ingin memeriksa case ketika karakter tidak ada dalam string, maka string kosong, dll.
sumber
Sel
A1 = find/the/position/of/the last slash
Cara mudah untuk melakukannya adalah membalikkan teks dan kemudian menemukan garis miring pertama seperti biasa. Sekarang Anda bisa mendapatkan panjang teks lengkap dikurangi angka ini.
Seperti itu:
=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1
Ini mengembalikan 21, posisi yang terakhir /
sumber
REVERSETEXT
bukan formula Excel standar