Bagaimana saya dapat Mengekstrak Karakter antara dua kata dalam excel tetapi mencari dari Kanan ke Kiri


0

Saat ini saya memilikinya di Sel A1:

"timeZone": "Etc / UTC"}, "body": "[~ kevin.tom] [~ sergio.Melle] [~ seema.item] Apakah laporan dikirim ke klien?", "updateAuthor": "body ":" [~ katelyn.robert] \ r \ n \ r \ n Belum "," updateAuthor ":

Dan saya ingin mengekstraksi semuanya

"tubuh":"

dan

"," perbarui Pengarang

Seperti yang Anda lihat di A1, jika saya membagi konten antara "body": "dan", "updateAuthor kami memiliki dua hasil:

[~ kevin.tom] [~ sergio.Melle] [~ seema.item] Apakah laporan dikirimkan ke klien?

dan

[~ katelyn.robert] \ r \ n \ r \ nTidak "," updateAuthor

Saya ingin dapat mengekstraksi hasil terakhir, yaitu

[~ katelyn.robert] \ r \ n \ r \ nTidak "," updateAuthor

Saya akan selalu menambahkan lebih banyak ke sel A1 dan saya perlu Sel B1 untuk memperbarui dan menarik hasil terakhir, apa pun itu.

Saat ini, saya dapat membuat kode ini di Sel B1:

= MID (B1, FIND ("body", B1) +7, FIND ("updateAuthor", B1, FIND ("body", B1) +1) -CARI ("body", B1) -10)

Ini bekerja untuk saya tetapi mengekstrak hasil pertama yang ditemukannya sedangkan saya ingin hasil dari kejadian terakhir. Pada dasarnya, excel mencari dari Kiri ke Kanan ketika saya ingin mencari dari Kanan ke Kiri. Adakah yang tahu cara memodifikasi ini untuk membuatnya berfungsi?

Saat ini, dengan kode saya di B1, saya mendapatkan ini di B1:

[~ kevin.tom] [~ sergio.Melle] [~ seema.item] Apakah laporan dikirimkan ke klien?

Tetapi saya menginginkan ini:

[~ katelyn.robert] \ r \ n \ r \ n Belum

Saya mencoba menyelesaikan ini tanpa menggunakan VBA


Saya berasumsi bahwa Anda tidak memiliki rumus di Cell  B1yang mereferensikan B1. Saya kira Anda memiliki rumus di Cell  B1yang merujuk A1(atau sebaliknya). Tolong jangan menanggapi dalam komentar; edit pertanyaan Anda untuk membuatnya lebih jelas dan lebih lengkap.
Scott

Akankah selalu ada dua contoh "body":"?
cybernetic.nomad

Ini adalah sel yang tumbuh sehingga lebih banyak teks akan ditambahkan ke dalamnya. Tetapi ketika teks ditambahkan ke dalamnya, teks yang diinginkan akan selalu ada di antara "body":"dan ","updateAuthor Jadi untuk menjawab pertanyaan Anda, ya, akan ada banyak"body":"
Kevin Truong

Anda dapat melakukannya dengan cukup mudah dengan ekspresi reguler, seperti ("body":")(.+?)(","updateAuthor":$). Info lebih lanjut tentang cara melakukannya di sini
cybernetic.nomad

Terima kasih atas umpan baliknya, saya sangat menghargainya. Saya mencari cara untuk melakukan ini tanpa VBA. Apakah ada sesuatu yang bisa saya tambahkan ke formula untuk mencapai ini?
Kevin Truong

Jawaban:


0

OK, saya hanya ingin menunjukkan bahwa saya benar-benar percaya ini akan lebih mudah untuk diketahui dengan VBA, tapi saya cukup penasaran untuk melakukannya sebagai formula.

=MID(A1,FIND("body",A1,FIND("body",A1,1)+1)+7,FIND("updateAuthor",A1,FIND("updateAuthor",A1,1)+1)-(FIND("body",A1,FIND("body",A1,1)+1)+10))

Ini mengasumsikan bahwa Anda dapat menggunakan "tubuh" dan "pembaruanAuthor" seperti yang Anda lakukan dalam rumus yang Anda berikan. Jika Anda benar-benar ingin mencari string karakter dengan simbol tanda baca, seperti "body"."maka temuan akan membutuhkan sesuatu seperti CHAR(34) & "body" & CHAR(34) & ":" & CHAR(34)dan CHAR(34) & "," & CHAR(34) & "updateAuthor". Jika Anda melakukannya, Anda juga harus mengubah angka ofset yang ditambahkan (+7 dan +10).

Ini juga mengasumsikan bahwa ada dua, dan hanya dua, penulis dalam sel. Pendekatan ini tidak akan berfungsi jika Anda memiliki sejumlah variabel penulis.

Sintaks untuk fungsi Mid adalah MID(text,start_num,num_chars).

Sintaks untuk fungsi Temukan adalah FIND(find_text,within_text,start_num).

FIND("body",A1,FIND("body",A1,1)+1)+7

Ini memberi Anda nomor awal untuk fungsi Mid.

Temuan di dalam FIND("body",A1,1)mengembalikan lokasi kemunculan pertama "tubuh" di A1. Anda perlu menambahkan 1 untuk itu untuk nomor awal dari pencarian berikutnya atau Anda hanya akan mendapatkan lokasi yang sama. Temuan luar kemudian melihat A1 lagi untuk "tubuh", tetapi mulai mencari satu karakter setelah lokasi kejadian pertama. Anda harus menambahkan offset untuk menemukan lokasi karakter pertama setelah Anda "body":"karena fungsi find akan memberi tahu Anda di mana karakter itu bberada.

FIND("updateAuthor",A1,FIND("updateAuthor",A1,1)+1)-(FIND("body",A1,FIND("body",A1,1)+1)+10

Ini memberi Anda jumlah karakter untuk fungsi Pertengahan.

Pernyataan pencarian rekursif ini bekerja sama seperti di atas untuk menemukan perbedaan antara awal informasi penulis dan awal tag akhir ","updateAuthor,, dengan offset yang sesuai ditambahkan di akhir.


0

Jika Anda mempertimbangkan kembali dan akan menerima VBA, maka pertimbangkan Fungsi Buatan Pengguna berikut:

Public Function GrabData(s As String) As String
    Dim dq As String
    dq = Chr(34)
    arr = Split(s, "body" & dq & ":" & dq)
    brr = Split(arr(UBound(arr)), dq & "," & dq & "updateAuthor")
    GrabData = brr(0)
End Function

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.