1. 문제
아래와 같은 문자열을 보면 ₩가 여러 번 나오는데, 첫 번째 ₩부터 두 번째 ₩전까지의 문자, 두 번째부터 세 번째 전까지의 문자를 추출해 보겠습니다.
2. 마지막 기호 다음의 문자열을 추출하는 Lambda 식
마지막 반복 문자 이후의 문자열 추출하기 (2)에서 했던 방법을 유사하게 적용하면 됩니다.
아래는 마지막으로 나오는 ₩다음의 문자열을 추출하기 위한 Lambda 식으로
재귀 호출을 사용해서 last_word를 반복 실행하면서 ₩가 나올 때마다 그다음의 문자열을 잘라내서 last_word 함수에 대입한 다음 마지막으로 남는 문자열을 반환하는 것입니다.
=lambda(textString, findChars,
if(iserror(find(findChars, textString)),textString,
last_word(
mid(textString,find(findChars,textString)+1,len(textString)),
findChars)
)
)
3. 지정한 번째에 해당하는 문자열 추출하기
지정한 번째에 해당하는 문자열을 추출하기 위해서는
위와 같이 계속해서 찾는 문자열 이후의 문자열에서 그다음 문자열 이전까지를 발췌해 내면 됩니다.
몇 번째를 찾아야 하므로 인수로 n을 입력하고, n을 1씩 줄여 나가면서, n이 0일 때 값을 출력해야 합니다.
따라서, 수식은 아래와 같습니다.
=lambda(textString, findChars, n,
if(n=0,
mid(textString,1,find(findChars,textString)-1),
nthChar(
mid(textString,find(findChars,textString)+1,len(textString)),
findChars,
n-1
)
)
)
수식에서 이름 관리자를 열고,
이름을 nthChar라고 하고,
참조 대상에 위 수식을 복사한 후 붙여 넣으면 됩니다.
A7셀에
=nthChar(A2,"\",1)
이라고 입력하니 아래와 같이 첫 번째와 두 번째 ₩사이의 문자열인 '시스템'을 잘 출력했습니다.
그런데 문제는 마지막 ₩에서는 ₩가 더 이상 존재하지 않으므로,
다시 말해 A8셀에
=nthChar(A2,"\",5)라고 입력하면
#VALUE! 에러가 발생합니다.
따라서, 원하는 문자를 찾지 못할 때는 문자열을 그대로 출력하도록 해야 합니다.
수정한 수식은 아래와 같으며, iserror가 조건에서 먼저 와야 합니다.
=lambda(textString, findChars, n,
if(isError(find(findChars,textString)),textString,
if(n=0,
mid(textString,1,find(findChars,textString)-1),
nthChar(
mid(textString,find(findChars,textString)+1,len(textString)),
findChars,
n-1
)
)
)
)
이제 A8셀에 값 '모든파일추출.txt'가 맞게 출력됩니다.
=nthChar(A2,"\",4)로 수정해도 '새 폴더 (2)'라고 맞게 출력됩니다.
'Excel' 카테고리의 다른 글
리본 메뉴에 매크로 명령 추가하기 (1) | 2024.01.19 |
---|---|
일정한 조건에 해당하는 합계 구하기 (0) | 2024.01.18 |
마지막 반복 문자 이후의 문자열 추출하기 (2) (0) | 2024.01.16 |
마지막 반복 문자 이후의 문자열 추출하기 (1) (2) | 2024.01.15 |
MakeArray 함수로 구구단 만들기 (0) | 2024.01.14 |