Menggabungkan dua huruf pertama dari nama depan dan dua huruf pertama dari nama belakang

9

Saya memiliki spreadsheet nama pengguna.

Nama depan dan belakang berada di sel kolom yang sama A.

Apakah ada rumus yang akan menggabungkan dua huruf pertama dari nama depan (kata pertama) dan dua huruf pertama dari nama belakang (kata kedua)?

Misalnya John Doe, harus menjadi JoDo.

Saya mencoba

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))

tapi ini memberi saya JoDoehasilnya.

prweq
sumber
2
Bacaan penting: Pemrogram Kebohongan Percaya Tentang Nama
StackOverthrow
Apakah ada jawaban yang berhasil? (Jika demikian, dapatkah Anda menandainya sebagai Jawaban dengan mengeklik tanda centang di sebelah kiri pos.)
BruceWayne

Jawaban:

15

Iya; dengan asumsi setiap orang hanya memiliki Nama Depan dan Nama Belakang, dan ini selalu dipisahkan oleh spasi yang dapat Anda gunakan di bawah ini:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)

Saya hanya bisa mendasarkan jawaban ini pada asumsi-asumsi itu karena semua yang Anda berikan

Atau jika Anda ingin ruang masih disertakan:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)
PeterH
sumber
2
@prweq no probs, menerimanya sebagai benar jika itu bekerja untuk Anda
PeterH
Solusi termudah dan termudah untuk dipahami. (Ya, kecuali untuk menggunakan FIND()daripada SEARCH();-)) Karena Anda mengasumsikan selalu ada pemisah ruang, rumus kedua Anda dapat disederhanakan menjadi=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS
4
@ RajeshSaya tahu. Itu sebabnya jawaban saya dimulai denganassuming each person only has a First and Last name
PeterH
2
Pemrogram kepalsuan percaya tentang nama ; tidak masuk akal untuk menangani semua kasus dari awal jika perangkat lunak Anda tidak memiliki jangkauan internasional
Aaron
1
Saya sarankan TRIM(LEFT(A1,2))kalau-kalau nama depan mereka hanya memiliki satu huruf, tetapi mungkin cukup mudah untuk memeriksa kasus-kasus khusus secara manual juga.
Engineer Toast
11

Dan untuk menyelesaikannya, inilah solusi yang akan mengembalikan dua karakter pertama dari nama depan, dan dua karakter pertama dari nama belakang, tetapi juga menyumbang nama tengah.

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

masukkan deskripsi gambar di sini

Terima kasih kepada @Kyle untuk bagian utama formula ini

BruceWayne
sumber
1
Anda mengalahkan saya untuk itu ;-) (Sudah lewat tengah malam dan saya perlu tidur - berencana menambahkan ini ke jawaban saya setelah itu.) Sedikit perbaikan pada formula Anda akan menggunakan satu ~bukan empat. Jika Anda khawatir bahwa Tilda dapat digunakan sebagai bagian dari nama (!) Atau, lebih mungkin, diketik secara tidak sengaja, cukup gunakan karakter yang tidak muncul di papan ketik apa pun. Saya lebih suka menggunakan §. adalah satu lagi yang bagus.
robinCTS
@BruceWayne ,, Formula Anda lebih kompeten ,,, karena hanya mengakses Firts & Nama belakang mengabaikan Nama tengah ,,, Dipilih ☺
Rajesh S
@RajeshS Bagaimana dengan orang dengan nama Spanyol , seperti mantan pembalap F1 Fernando Alonso Díaz yang memiliki 1 nama depan, 2 nama keluarga, dan tanpa nama tengah? (Atau bahkan Raja Felipe Juan Pablo Alfonso dari Todos los Santos de Borbón dan de Grecia ?)
Chronocidal
2
@ Chronocidal sekarang kita akan pergi ke lubang kelinci dari apa yang programmer percaya tentang nama
BruceWayne
1
@robinCTS - Panggilan bagus! Saya mendapatkan formula dari jawaban lain (diedit), dan tidak terlalu menggali terlalu dalam. Terima kasih atas tipsnya!
BruceWayne
9

Ini cara lain ...

Cuplikan layar lembar kerja

  • Sebuah nama
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
Stese
sumber
Anda dapat melangkah lebih jauh dan menghapus semua kolom tambahan dengan menggabungkannya=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH
Ya, saya melakukan itu beberapa saat setelah itu!
Stese
ya saya perhatikan Anda mengedit jawabannya, Nice Answer!
PeterH
5

Pertama, saya ingin mengatakan bahwa jawaban PeterH adalah yang paling sederhana dan termudah untuk dipahami. (Meskipun preferensi saya adalah menggunakan FIND()daripada SEARCH()- mengetik dua karakter kurang membantu menghindari RSI ;-))

Jawaban alternatif yang tidak menggunakan MID(), LEFT()juga RIGHT(), melainkan menggunakan REPLACE()untuk menghapus bagian yang tidak diinginkan dari nama adalah sebagai berikut:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

Penjelasan:

Bagian dalam REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")menghilangkan karakter dari karakter ketiga dari nama belakang dan seterusnya, sedangkan bagian luar menghapus karakter dari karakter ketiga dari nama pertama hingga dan termasuk spasi.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Tambahan 1:

Formula di atas juga dapat disesuaikan untuk memungkinkan satu nama tengah:

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

dengan mengganti FIND(" ",A1)dengan IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)menemukan spasi kedua (dengan memulai pencarian spasi setelah spasi pertama) atau kesalahan sebaliknya. menemukan ruang pertama jika tidak ada ruang kedua.
IFERROR(find_second_space, FIND(" ",A1))


Versi (bertele-tele) ini memungkinkan sejumlah nama tengah:

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

Dalam hal FIND(" ",A1)ini diganti dengan FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))menghitung jumlah spasi. mengganti ruang terakhir dengan . menemukan yang pertama yang sama dengan menemukan ruang terakhir.
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

( §Tentu saja, bisa diganti dengan karakter apa pun yang dijamin tidak ada dalam string nama lengkap. Alternatif yang lebih umum dan lebih aman adalah menggunakan CHAR(1).)


Perhatikan bahwa, tentu saja, jawaban BruceWayne adalah solusi paling sederhana dan termudah untuk dipahami yang memungkinkan sejumlah nama tengah. Ya itu. Sampai saya memposting jawaban saya yang lain , yaitu ;-)


Tambahan 2:

Semua solusi dapat disesuaikan untuk memenuhi kasus satu nama saja (jika ada persyaratan untuk hasil empat karakter) dengan membungkusnya dalam suatu IFERROR()fungsi seperti:

=IFERROR(solution, alternate_formula)

Perhatikan bahwa di atas adalah rumus kasus umum, dan dimungkinkan untuk membuat modifikasi yang lebih efisien untuk solusi tertentu. Misalnya, jika persyaratan dalam hal satu nama adalah untuk menggabungkan dua huruf pertama dengan dua huruf terakhir, jawaban PeterH dapat lebih efisien diadaptasi dengan cara ini:

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


Untuk memungkinkan huruf tunggal nama depan atau inisial (dengan asumsi spasi atau titik tidak dapat diterima sebagai karakter kedua) berikut ini dapat digunakan dengan solusi apa pun:

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

Perhatikan bahwa karakter tunggal dapat berupa hard-coded atau dihitung dari namanya. (Atau gunakan ""untuk menghapus spasi atau titik.)


Terakhir, jika Anda benar - benar harus memenuhi kasus di mana nama lengkap adalah satu karakter saja (!), Cukup bungkus formula hanya nama tunggal dengan yang lain IFERROR() . (Dengan asumsi, tentu saja, bahwa formula alternatif tidak menangani kasus khusus itu.)


Tambahan 3:

Akhirnya, akhirnya (tidak, benar-benar * ;-)) untuk memenuhi beberapa ruang berturut-turut dan / atau memimpin / mengikuti, gunakan TRIM(A1)sebagai ganti A1.


* Saya akan meninggalkan kasing untuk satu huruf nama belakang, seperti T, sebagai latihan untuk pembaca.

Petunjuk: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")

robinCTS
sumber
1
Seperti biasa jawaban Anda sepertinya berasal dari panduan pengguna tingkat lanjut dari Excel! Ini akan menjadi jawaban pilihan teratas jika Anda mempostingnya sebelumnya!
PeterH
@ PeterH Terima kasih atas komplemennya. Saya hanya menemukan pertanyaan setelah menyentuh daftar Pertanyaan Jaringan Panas, jadi saya agak terlambat ke pesta ;-)
robinCTS
2

Berdasarkan jawaban ini , inilah solusi elegan yang bekerja dengan sejumlah nama tengah:

=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)

Penjelasan:

SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))mengganti spasi antar kata dengan spasi sama dengan jumlahnya dengan panjang keseluruhan string. Menggunakan panjang string daripada angka besar yang sewenang-wenang menjamin rumus ini berfungsi untuk string panjang apa pun dan berarti itu melakukannya secara efisien.

RIGHT(space_expanded_string, LEN(A1))mengekstrak kata paling kanan yang diawali dengan banyak spasi. *

TRIM(space_prepended_rightmost_word) mengekstrak kata paling kanan.

LEFT(rightmost_word, 2) mengekstrak dua karakter pertama dari kata paling kanan (nama belakang).


* Peringatan: Jika memungkinkan bagi pengguna untuk memuat spasi tambahan, Anda perlu mengganti argumen pertama SUBSTITUTE()yaitu A1, dengan TRIM(A1). Spasi terdepan dan beberapa spasi berurutan antar kata ditangani dengan benar hanya dengan A1.


Memperbaiki Usaha Anda

Melihat lebih dekat pada solusi yang Anda coba, sepertinya Anda sangat dekat dengan formula yang berfungsi untuk menggabungkan dua huruf pertama dari kata pertama (yaitu nama depan) dan dua huruf pertama dari kata kedua jika ada.

Perhatikan bahwa jika nama pengguna mengandung nama tengah, rumus yang diperbaiki akan salah mengambil dua huruf pertama dari nama tengah pertama alih-alih dari nama belakang (dengan asumsi niat Anda memang untuk mengekstraknya dari nama belakang).

Juga, jika semua nama pengguna hanya terdiri dari nama depan, atau nama depan dan nama belakang, maka rumusnya tidak perlu rumit dan dapat disederhanakan.


Untuk melihat bagaimana rumus itu bekerja dan memperbaikinya, lebih mudah jika rumusnya sudah dibuat, seperti:

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  IFERROR(
    FIND(" ", SUBSTITUTE(A1," ","",1)),
    LEN(A1)
  )
  - IFERROR(FIND(" ",A1), LEN(A1))
)


Untuk memahami cara kerjanya, pertama lihat apa yang terjadi ketika A1tidak mengandung spasi (yaitu hanya berisi nama tunggal). Semua IFERROR()fungsi mengevaluasi argumen kedua mereka karena FIND()mengembalikan #VALUE!kesalahan jika string pencarian tidak ditemukan dalam string target:

=
LEFT(A1,2) &
MID(
  A1,
  LEN(A1) + 1,
  LEN(A1)
  -LEN(A1)
)

Argumen ketiga MID()mengevaluasi menjadi nol, sehingga fungsi menghasilkan ""dan hasil rumus adalah dua karakter pertama dari nama tunggal.


Sekarang lihat ketika ada tepat dua nama (yaitu ada tepat satu spasi). Fungsi pertama dan ketiga IFERROR()mengevaluasi argumen pertama mereka tetapi yang kedua mengevaluasi argumen kedua karena FIND(" ", SUBSTITUTE(A1," ","",1))berusaha menemukan ruang lain setelah menghapus yang pertama, dan hanya satu:

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  LEN(A1)
  - FIND(" ",A1)
)

Jelas, MID()mengembalikan kata kedua (yaitu nama belakang) secara keseluruhan, dan hasil rumus adalah dua karakter pertama dari nama depan diikuti oleh semua karakter dari nama belakang.


Demi kelengkapan, kami juga akan melihat kasus di mana setidaknya ada tiga nama, meskipun sekarang sudah cukup jelas bagaimana cara memperbaiki rumus. Kali ini, semua IFERROR()fungsi mengevaluasi argumen pertama mereka:

=
LEFT(A1,2) &
MID(
  A1,
  FIND(" ",A1) + 1,
  FIND(" ", SUBSTITUTE(A1," ","",1))
  - FIND(" ",A1)
)

Ini sedikit kurang jelas daripada dalam kasus sebelumnya, tetapi MID()mengembalikan persis seluruh kata kedua (yaitu nama tengah pertama). Dengan demikian, hasil rumus adalah dua karakter pertama dari nama depan diikuti oleh semua karakter dari nama tengah pertama.


Jelas, perbaikannya adalah LEFT()untuk mendapatkan dua karakter pertama dari MID()output:

=
LEFT(A1,2) &
LEFT(
  MID(
    A1,
    IFERROR(FIND(" ",A1), LEN(A1)) + 1,
    IFERROR(
      FIND(" ", SUBSTITUTE(A1," ","",1)),
      LEN(A1)
    )
    - IFERROR(FIND(" ",A1), LEN(A1))
  ),
  2
)


Penyederhanaan yang saya sebutkan di atas adalah untuk mengganti LEFT(MID(…,…,…), 2)dengan MID(…,…,2):

=
LEFT(A1,2) &
MID(
  A1,
  IFERROR(FIND(" ",A1), LEN(A1)) + 1,
  2
)

atau pada satu baris:

=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)

Ini pada dasarnya adalah solusi PeterH yang dimodifikasi untuk juga bekerja dengan nama tunggal (dalam hal ini, hasilnya hanya dua karakter pertama dari nama).


Catatan: Rumus yang sudah disiapkan sebenarnya berfungsi jika dimasukkan.

robinCTS
sumber