이름에서 처음 두 글자와 성에서 처음 두 글자를 결합


9

사용자 이름 스프레드 시트가 있습니다.

이름과 성은 같은 열의 셀에 A있습니다.

이름의 첫 두 글자 (첫 번째 단어)와 성의 첫 두 글자 (두 번째 단어)를 연결하는 수식이 있습니까?

예를 들어 John Doe되어야합니다 JoDo.

나는 시도했다

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

그러나 이것은 JoDoe결과로 나를 제공합니다 .



트릭을 수행하는 답변이 있습니까? (그렇다면 게시물 왼쪽에있는 확인 표시를 클릭하여 답변으로 표시하십시오.)
BruceWayne

답변:


15

예; 각 사람이 이름과 성만 가지고 있다고 가정하면, 이것은 항상 다음과 같이 사용할 수있는 공백으로 구분됩니다.

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

나는 당신이 제공 한 모든 가정에 대해서만이 대답을 근거로 할 수있었습니다.

또는 공백을 계속 포함하려면 다음을 수행하십시오.

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

2
@prweq 어떤 문제도 없습니다, 그것이 당신에게 효과가 있다면 그것을 올바르게 받아들이십시오
PeterH

가장 간단하고 이해하기 쉬운 솔루션. (글쎄, 사용하는 것을 제외하고 FIND()대신 SEARCH();-)) 당신이 가정하고 있기 때문에 항상 공간 분리가, 두 번째 공식은 단순화 될 수있다=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS

4
@RajeshS 알고 있습니다. 그 이유는 내 대답 시작assuming each person only has a First and Last name
PeterH

2
거짓 프로그래머들은 이름에 대해 믿는다 . 소프트웨어가 국제적으로 도달 할 수없는 경우 모든 상황을 처리하는 것이 이치에 맞지 않습니다
Aaron

1
내가 제안 TRIM(LEFT(A1,2))그들의 이름은 하나 개의 문자가 만약을하지만, 수동뿐만 아니라 그 특별한 경우를 확인하기 쉽게 충분히있을 수 있습니다.
엔지니어 토스트

11

그리고 반올림하기 위해 이름의 처음 두 문자와 성의 첫 두 문자를 반환 하지만 중간 이름을 설명 하는 솔루션이 있습니다.

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

여기에 이미지 설명을 입력하십시오

공식의 주요 부분에 대한 @Kyle 덕분에


1
당신은 저를 이겼습니다 ;-) (자정이 지나고 잠을 잘 필요가 있습니다-나중에 이것을 내 대답에 추가 할 계획이었습니다.) 수식의 약간의 개선 ~은 4 대신 단일을 사용하는 것입니다. Tilda가 이름 (!)의 일부로 사용되거나 실수로 입력되었을 가능성이 우려되는 경우 키보드에 표시되지 않는 문자 만 사용하십시오. 사용하는 것을 선호합니다 §. 또 다른 좋은 것입니다.
robinCTS 2018

@BruceWayne는 ,, 수식은 ☺ 중간 이름을 무시 단지 Firts 및 성 접근이기 때문에 ,,, 업 투표 ,,, 더 능력이
인 Rajesh S

@RajeshS 전 F1 드라이버 Fernando Alonso Díaz 와 같이 스페인어 이름을 가진 사람들은 어떻습니까? (또는 심지어 펠리페 후안 파블로 후안 파블로 알폰소 데 토 도스 로스 산토스 드 보르 본과 드 그 레시아 ?)
연대기

2
@Chronocidal 지금 우리의 토끼 구멍을거야 프로그래머가 이름에 대해 무엇을 믿는
BruceWayne

1
@robinCTS-좋은 전화! 나는 다른 답변 (편집)에서 공식을 얻었으며 실제로 너무 많이 파고 들지 않았습니다. 팁 주셔서 감사합니다!
BruceWayne

9

이것은 또 다른 방법입니다 ...

워크 시트 스크린 샷

  • 이름
  • B- =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

추가 열을 병합하여 추가 열을 모두 제거 할 수 있습니다=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH

네, 잠시 후에 그랬어요!
Stese

예, 답변을 수정했습니다. 니스 답변입니다.
PeterH

5

우선, PeterH의 대답 이 가장 간단하고 이해하기 쉽다고 말하고 싶습니다 . (내 선호는 RSI를 피하는 데 도움이되는 두 개의 적은 문자를 입력 하는 FIND()대신 사용 하는 것이지만 SEARCH();-))

MID(), LEFT()또는을 사용 하지 않고 이름의 원하지 않는 부분을 제거하는 RIGHT()데 사용하는 대체 대답 REPLACE()은 다음과 같습니다.

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

설명:

내부 REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")는 성의 세 번째 문자부터 문자를 제거하고 외부 는 첫 번째 이름의 세 번째 문자에서 공백을 포함하여 문자를 제거합니다.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


부록 1 :

위의 공식은 단일 중간 이름을 허용하도록 조정할 수도 있습니다.

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

대체하여 FIND(" ",A1)함께 IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)두 번째 공백을 찾거나 (첫 번째 공백 이후 공백 검색을 시작하여) 그렇지 않으면 오류가 발생합니다. 두 번째 공백이 없으면 첫 번째 공백을 찾습니다.
IFERROR(find_second_space, FIND(" ",A1))


이 긴 버전은 여러 개의 중간 이름을 허용합니다.

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

이 경우 FIND(" ",A1)에는로 대체됩니다 FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))공백 수를 계산합니다. 마지막 공백을로 바꿉니다 . 마지막 공간을 찾는 것과 동일한 첫 번째 를 찾습니다 .
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

( §물론, 전체 이름 문자열에 존재하지 않는 문자로 대체 될 수 있습니다 CHAR(1). 더 일반적이고 안전한 대안은을 사용하는 것 입니다.)


물론 BruceWayne의 답변 은 여러 개의 중간 이름을 허용하는 가장 간단하고 이해하기 쉬운 솔루션입니다. 잘했다. 다른 답변을 게시 할 때까지는 ;-)입니다.


부록 2 :

모든 솔루션은 다음 IFERROR()과 같이 함수 내에 래핑하여 단일 이름의 경우에만 적용 할 수 있습니다 (4 개의 문자 결과가 필요한 경우) .

=IFERROR(solution, alternate_formula)

위의 일반적인 경우는 공식이며 특정 솔루션을보다 효율적으로 수정할 수 있습니다. 예를 들어, 단일 이름의 경우 첫 두 글자를 마지막 두 글자와 결합해야하는 경우 PeterH의 답변 을 다음과 같이보다 효율적으로 조정할 수 있습니다.

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


단일 문자 이름 또는 이니셜 (공백 또는 점은 두 번째 문자로 허용되지 않는다고 가정)을 허용하기 위해 다음과 같은 솔루션을 사용할 수 있습니다.

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

단일 문자는 이름으로 하드 코딩되거나 계산 될 수 있습니다. 또는 ""공백이나 점을 제거하는 데 사용 하십시오.


당신이 경우 마지막으로, 정말 전체 이름이 단일 문자 인 경우에 대한 수용에 필요한 전용 (!), 단지 공식과 전용 단일 이름을 바꿈 다른 IFERROR() . (물론, 대체 공식이 그 특별한 경우를 처리하지 않는다고 가정하십시오.)


부록 3 :

마지막으로 (no, really * ;-)) 여러 연속 및 / 또는 선행 / 후행 공백을 수용하려면 TRIM(A1)대신을 사용하십시오 A1.


* 나는 T 씨와 같은 한 글자 성의 경우를 독자들을위한 연습으로 남겨 둘 것이다.

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


1
항상 그렇듯이 귀하의 답변은 Excel의 고급 사용자 안내서에서 온 것 같습니다! 이것은 당신이 그것을 일찍 게시했다면 가장 많이 투표 된 답변이 될 것입니다!
PeterH

@PeterH 보완 해 주셔서 감사합니다. 핫 네트워크 질문 목록에 도달하면 질문을 우연히
만났으므로

2

이 답변을 바탕으로 여러 중간 이름으로 작동하는 우아한 솔루션이 있습니다.

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

설명:

SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))단어 간 공백을 전체 문자열의 길이와 동일한 공백으로 바꿉니다. 임의로 큰 숫자가 아닌 문자열 길이를 사용하면 수식이 모든 길이 문자열에 대해 작동하며 효율적으로 작동합니다.

RIGHT(space_expanded_string, LEN(A1))공백이 앞에 붙은 가장 오른쪽 단어를 추출합니다. *

TRIM(space_prepended_rightmost_word) 가장 오른쪽에있는 단어를 추출합니다.

LEFT(rightmost_word, 2) 가장 오른쪽 단어 (성)의 처음 두 문자를 추출합니다.


* 경고 : 사용자 이름은 후행 공백을 포함하는 것이 가능하다면, 당신의 첫 번째 인수 교체해야 SUBSTITUTE()즉, A1함께 TRIM(A1). 단어 사이의 선행 공백과 연속 된 여러 공백은로만 올바르게 처리됩니다 A1.


시도 수정

시도한 솔루션을 자세히 살펴보면 첫 번째 단어의 첫 두 글자 (예 : 첫 번째 이름)와 두 번째 단어 의 첫 두 글자 (있는 경우 )를 연결하는 수식에 매우 근접한 것처럼 보입니다 .

사용자 이름에 중간 이름이 포함 된 경우 수정 된 수식은 성 대신 이름이 아닌 첫 번째 중간 이름에서 처음 두 글자를 잘못 가져옵니다 (의도가 실제로 성에서 추출한다고 가정).

또한 모든 사용자 이름이 이름 또는 이름과 성으로 만 구성된 경우 수식은 불필요하게 복잡하고 단순화 될 수 있습니다.


수식의 작동 방식을 확인하고 수정하려면 다음과 같이 미리 정리하면 더 쉽습니다.

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


작동 방식을 이해하려면 먼저 A1공백이 포함되지 않은 경우 (예 : 단일 이름 만 포함) 발생하는 상황을 살펴보십시오 . 검색 문자열이 대상 문자열에 없으면 오류를 리턴 IFERROR()하므로 모든 함수는 두 번째 인수로 평가됩니다 .FIND()#VALUE!

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

세 번째 인수는 MID()0 으로 평가되므로 함수가 출력 ""되고 수식 결과는 단일 이름의 처음 두 문자입니다.


이제 정확히 두 개의 이름이있는 경우 (즉, 정확히 하나의 공백이 있음)를보십시오. 첫 번째 및 세 번째 IFERROR()함수는 첫 번째 인수로 평가되지만 두 번째 함수는 첫 번째 인수 만 FIND(" ", SUBSTITUTE(A1," ","",1))제거한 후 다른 공간을 찾으려고 시도 하므로 두 번째 인수로 평가됩니다 .

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

분명히, MID()두 번째 단어 (즉, 성)를 전체적으로 반환하며 수식 결과는 이름의 첫 두 문자 뒤에 성의 모든 문자가옵니다.


완성도를 높이기 위해 수식을 수정하는 방법이 상당히 분명해야하지만 적어도 세 개의 이름이있는 경우도 살펴 보겠습니다. 이번에는 모든 IFERROR()함수가 첫 번째 인수로 평가됩니다.

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

이전의 경우보다 약간 덜 명확하지만 MID()정확히 두 번째 단어 전체 (즉, 첫 번째 중간 이름)를 반환합니다 . 따라서 수식 결과는 이름의 첫 두 문자 뒤에 첫 번째 중간 이름의 모든 문자가옵니다.


분명히 수정은 출력 LEFT()의 처음 두 문자를 얻는 데 사용 하는 것입니다 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
)


위에서 언급 한 단순화는 다음 LEFT(MID(…,…,…), 2)과 같이 대체 됩니다 MID(…,…,2).

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

또는 한 줄에 :

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

이것은 본질적 으로 단일 이름으로도 작동하도록 수정 된 PeterH의 솔루션입니다 (이 경우 결과는 이름의 처음 두 문자에 불과 함).


참고 : 사전 수식은 실제로 입력 한 경우 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.