İlk addan ilk iki harfi ve soyadından ilk iki harfi birleştirmek


9

Kullanıcı adlarından oluşan bir e-tablom var.

Adı ve soyadı aynı sütun hücresindedir A.

İlk adın (ilk sözcük) ilk iki harfini ve soyadının ilk iki harfini (ikinci sözcük) birleştirecek bir formül var mı?

Örneğin John Doe, olmalı JoDo.

denedim

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

ama bu bana JoDoesonuç veriyor .



Cevaplardan herhangi biri hile yapar mı? (Eğer öyleyse, lütfen
yazının

Yanıtlar:


15

Evet; her bir kişinin yalnızca bir Adı ve Soyadı olduğunu ve bunun her zaman bir boşlukla ayrıldığını varsayarak aşağıdakileri kullanabilirsiniz:

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

Bu cevabı sadece sizin verdiğiniz varsayımlara dayandırabilirdim.

Veya yine de bir alanın dahil edilmesini istiyorsanız:

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

2
@prweq hayır prob, sizin için çalışıyorsa doğru olarak kabul
PeterH

En basit ve anlaşılması en kolay çözüm. (Eh, ;-) FIND()yerine kullanmak dışında SEARCH()) Her zaman bir boşluk ayırıcı olduğunu varsaydığınız için, ikinci formülünüz basitleştirilebilir=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS 11:18 '

4
@RajeshS biliyorum. Bu yüzden cevabım ile başlıyorassuming each person only has a First and Last name
PeterH

2
Yanlışlıklar programcılar isimlere inanır ; Yazılımınızın uluslararası bir erişimi yoksa, tüm bu durumları en baştan ele almanız mantıklı değildir
Aaron

1
TRIM(LEFT(A1,2))İlk adının sadece bir harfi olması durumunda önerim , ancak bu özel durumları manuel olarak da kontrol etmek yeterince kolay olabilir.
Mühendis Tost

11

Ve işleri tamamlamak için, ilk adın ilk iki karakterini ve soyadının ilk iki karakterini döndürecek bir çözüm, ancak aynı zamanda ikinci adları da hesaba katacak bir çözüm .

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

resim açıklamasını buraya girin

Formülün ana kısmı için @Kyle'a teşekkürler


1
Beni yendin ;-) (Bu gece yarısından iyi geçti ve uyumam gerekiyor - bunu daha sonra cevabıma eklemeyi planlıyordu.) Formülünde küçük bir gelişme ~dört yerine tek bir tane kullanmak olurdu . Bir Tilda'nın bir adın (!) Bir parçası olarak kullanılabileceğinden veya büyük olasılıkla yanlışlıkla yazıldığından endişeleniyorsanız, herhangi bir klavyede görünmeyen bir karakter kullanın. Ben kullanmayı tercih ederim §. başka iyi bir şey.
robinCTS

@BruceWayne ,, Formülünüz daha yetkin, çünkü sadece Firts & Soyadı erişiyor Orta adı görmezden geliyor ,,, Yukarı oy ☺
Rajesh S

@RajeshS 1 ad, 2 soyadı ve ikinci adı olmayan eski F1 sürücüsü Fernando Alonso Díaz gibi İspanyolca isimleri olan insanlar ne olacak ? (Ya da Kral Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y de Grecia ?)
Kronokidal


1
@robinCTS - İyi çağrı! Formülü başka bir cevaptan aldım (düzenlendi) ve gerçekten çok daha derin kazmadım. İpuçları için teşekkürler!
BruceWayne

9

Bu başka bir yol ...

Çalışma sayfasının ekran görüntüsü

  • Bir isim
  • B - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

Daha da ileri gidebilir ve tüm bu ekstra sütunları birleştirerek kaldırabilirsiniz=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH

Evet, birkaç dakika sonra yaptım!
Stese

evet cevabı düzenlediğini fark ettim, Güzel Cevap!
PeterH

5

Öncelikle, PeterH'nin cevabının anlaşılması en kolay ve en kolay olduğunu söylemek istiyorum . (Her ne kadar benim tercihim - iki daha az karakter yazmak FIND()yerine kullanmak olsa da, SEARCH()RSI ;-) 'den kaçınmaya yardımcı olur.)

Ne kullanımları bu alternatif cevap MID(), LEFT()ne de RIGHT(), ancak bunun yerine kullanır REPLACE()şöyle adının istenmeyen kısımlarını kaldırmaktır:

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

Açıklama:

İç REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")kaldırır dış iken ileriye soyadının üçüncü karakterinden karakterler, uzaklaşmaların ve uzay dahil olmak üzere ilk ismin üçüncü karakterinden karakter.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Zeyilname 1:

Yukarıdaki formül, tek bir ikinci ada izin vermek için de uyarlanabilir:

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

değiştirerek FIND(" ",A1)ile IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)ikinci boşluğu (ilk boşluktan sonraki boşluk için aramayı başlatarak) veya aksi halde hataları bulur. ikinci boşluk yoksa ilk boşluğu bulur.
IFERROR(find_second_space, FIND(" ",A1))


Bu (uzun soluklu) versiyon, herhangi bir sayıda orta isme izin verir:

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

Bu durumda FIND(" ",A1)ile değiştirilir FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))boşluk sayısını sayar. ile son boşluğu değiştirir . son alanı bulmakla aynı olanı bulur .
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

( §Elbette, tam ad dizesinde bulunmadığı garanti edilen herhangi bir karakterle değiştirilebilir. Daha genel, daha güvenli bir alternatif kullanmak olacaktır CHAR(1).)


Tabii ki, BruceWayne'nin cevabının , herhangi bir sayıda orta isme izin veren en basit ve anlaşılması en kolay çözüm olduğunu unutmayın. Öyleydi. Diğer cevabımı gönderene kadar ;-)


Zeyilname 2:

Tüm çözümler, aşağıdaki IFERROR()gibi bir işlev içine sarılarak (tek karakterli bir sonuç için bir gereksinim varsa) yalnızca tek bir ad için hitap edecek şekilde uyarlanabilir :

=IFERROR(solution, alternate_formula)

Yukarıdakilerin genel bir vaka formülü olduğunu ve belirli bir çözümde daha verimli bir değişiklik yapmak mümkün olabileceğini unutmayın. Örneğin, tek bir isim söz konusu olduğunda, ilk iki harfi son iki harfle birleştirmekse, PeterH'nin cevabı bu şekilde daha verimli bir şekilde uyarlanabilir:

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


Tek harfli bir ad veya bir adın başlamasına izin vermek için (ikinci karakter olarak boşluk veya noktanın kabul edilemez olduğu varsayılarak) aşağıdakiler herhangi bir çözümle kullanılabilir:

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

Tek karakterin sabit olarak kodlanabileceğini veya addan hesaplanabileceğini unutmayın. (Veya ""boşluk veya noktayı kaldırmak için kullanın .)


Son olarak, tam adın yalnızca tek bir karakter (!) Olduğu duruma gerçekten hitap etmeniz gerekiyorsa, sadece tek adlı formülü başka bir formla sarın IFERROR(). (Elbette, alternatif formülün bu özel durumla ilgilenmediğini varsayarsak.)


Zeyilname 3:

Son olarak, son olarak (Hayır, gerçekten * ;-)) birden fazla ardışık ve / veya yönlendirmek için hitap / sonunda boşluk kullanımı TRIM(A1)yerine A1.


* Davayı Bay T gibi tek harfli soyadı, okuyucu için bir egzersiz olarak bırakacağım.

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


1
Her zaman olduğu gibi, cevaplarınız Excel'in gelişmiş bir kullanıcı kılavuzundan geliyor gibi görünüyor! Daha önce yayınlamış olsaydınız bu en çok oy alan cevap olurdu
PeterH

@PeterH Tamamlayıcı için teşekkürler. Sadece Sıcak Ağ Soruları listesine çarptığında soruya rastladım, bu yüzden partiye biraz geç kaldım ;-)
robinCTS 11:18 '

2

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 A1ile 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 A1boş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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.