Bu cevaba dayanarak, herhangi bir sayıda ikinci adla çalışan zarif bir çözüm:
=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)
Açıklama:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
sözcükler arası boşlukları, tüm dizenin uzunluğuna eşit sayıdaki boşluklarla değiştirir. Rasgele büyük bir sayı yerine dize uzunluğunu kullanmak, formülün herhangi bir uzunluk dizesi için çalışmasını garanti eder ve bunu verimli bir şekilde yaptığı anlamına gelir.
RIGHT(space_expanded_string, LEN(A1))
bir grup boşluk tarafından eklenen en sağdaki kelimeyi çıkarır. *
TRIM(space_prepended_rightmost_word)
en sağdaki kelimeyi çıkarır.
LEFT(rightmost_word, 2)
en sağdaki sözcüğün ilk iki karakterini çıkarır (soyadı).
* Uyarı: Bir kullanıcı adının arka boşluklar içermesi mümkünse, ilk argümanını SUBSTITUTE()
yani yani A1
ile değiştirmeniz gerekir TRIM(A1)
. Öncü boşluklar ve sözcükler arasındaki ardışık boşluklar sadece ile doğru şekilde işlenir A1
.
Denemenizi Düzeltme
Deneme çözümünüze daha yakından baktığınızda, ilk kelimenin ilk iki harfini (yani ilk ad) ve varsa ikinci sözcüğün ilk iki harfini birleştirmek için çalışan bir formüle çok yakın görünüyorsunuz .
Bir kullanıcı adı orta adlar içerecekse, düzeltilmiş formülün, soyad yerine ilk orta addan ilk iki harfi yanlış bir şekilde alacağını unutmayın (niyetinizin gerçekten soyadından çıkarmak olduğunu varsayarsak).
Ayrıca, tüm kullanıcı adları yalnızca bir ad veya bir ad ve soyadı içeriyorsa, formül gereksiz yere karmaşıktır ve basitleştirilebilir.
Formülün nasıl çalıştığını görmek ve bu şekilde düzeltmek için, ön saflaştırılmışsa, daha kolay:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
)
Nasıl çalıştığını anlamak için, öncelikle A1
boşluk içermediğinde ne olduğuna bakın (yani yalnızca tek bir ad içerir). Arama dizesi hedef dizede bulunmazsa bir hata döndürdüğünden IFERROR()
, tüm işlevler ikinci bağımsız değişkenlerine göre değerlendirilir :FIND()
#VALUE!
=
LEFT(A1,2) &
MID(
A1,
LEN(A1) + 1,
LEN(A1)
-LEN(A1)
)
Üçüncü argüman MID()
sıfıra eşitlenir, böylece işlev çıktısı ""
ve formül sonucu tek adın ilk iki karakteri olur.
Şimdi tam olarak iki adın ne olduğuna bakın (yani tam olarak bir boşluk var). Birinci ve üçüncü IFERROR()
işlevler ilk argümanlarını değerlendirir, ancak ikincisi ikinci argümanını değerlendirir, çünkü FIND(" ", SUBSTITUTE(A1," ","",1))
ilk ve yalnızca birini kaldırdıktan sonra başka bir alan bulmaya çalışır:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
LEN(A1)
- FIND(" ",A1)
)
Açıkça, MID()
ikinci kelimeyi (soyadı) bütünüyle döndürür ve formül sonucu, adın ilk iki karakterinden sonra soyadının tüm karakterlerinden oluşur.
Tamlık uğruna, formülün nasıl düzeltileceği konusunda oldukça açık olmasına rağmen, en az üç adın olduğu duruma da bakacağız. Bu kez, tüm IFERROR()
işlevler ilk argümanlarına göre değerlendirilir:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
FIND(" ", SUBSTITUTE(A1," ","",1))
- FIND(" ",A1)
)
Önceki durumda olduğundan biraz daha az açıktır, ancak MID()
tam olarak ikinci sözcüğün tamamını döndürür (yani ilk ikinci ad). Böylece, formül sonucu ilk adın ilk iki karakterinden sonra ilk ikinci adın tüm karakterlerinden oluşur.
Açıkçası, düzeltme, çıktının LEFT()
ilk iki karakterini elde etmek için kullanmaktır MID()
:
=
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
)
Yukarıda belirtildiği sadeleştirme değiştirmektir LEFT(MID(…,…,…), 2)
ile MID(…,…,2)
:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
2
)
veya bir satırda:
=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)
Bu aslında PeterH'ın tek isimlerle de çalışacak şekilde değiştirilmiş çözümüdür (bu durumda sonuç, ismin sadece ilk iki karakteri).
Not: Önceden girilmiş formüller girilirse gerçekten işe yarar.