Excel

마지막 반복 문자 이후의 문자열 추출하기 (2)

별동산 2024. 1. 16. 08:31
반응형

특정문자의 마지막위치이후 문자열 가져오기2.xlsx
0.01MB

 

 

이번에는 Lambda 함수를 이용해 보겠습니다.

 

1. Lambda 함수

가. 구문

=LAMBDA([parameter1, parameter2, …,] calculation)  로서

인수들을 입력하고, 인수를 이용한 계산식을 끝에 입력합니다.

 

나. 사용 예

(1) 셀에 입력

셀에 =LAMBDA(x,y,x+y)(3,4)라고,

인수를 이용한 수식을 입력한 다음 인수에 들어갈 값을 괄호 안에 입력하는 방식입니다.

 

수식은 간단하게 x와 y를 더하는 것으로 3과 4를 대입하니 7이 반환됩니다.

 

(2) 이름관리자에 입력

일시적인 것은 위와 같이 사용할 수 있지만,

계속적으로 사용하는 것이라면 이름관리자에 넣고 사용하는 것이 좋습니다.

다만 한계는 이름관리자로 입력된 파일에만 적용되므로 다른 파일에도 적용하려면 다른 이름으로 저장해서 사용해야 한다는 점입니다.

 

아래는 Sheet2에서 작업합니다.

 

이름관리자에 저장하려면 이름을 먼저 지어야 하는데 Add(영어로 해야 편함)라고 하고, 수식은 위 Lambda 식에서 인수 입력하는 부분만 빼면 됩니다.

 

수식 탭의 정의된 이름 그룹에서 이름 관리자 명령을 클릭합니다. 그러면 아래와 같이 이름 관리자 창이 열리는데

 

새로 만들기를 클릭하고, 

이름에 Add, 참조 대상에 =lambda(x,y,x+y)라고 입력하고 확인을 누릅니다.

 

그러면 Add란 이름으로 Lambda 수식이 입력됐습니다.

닫기 버튼을 눌러 나간 다음

 

A2셀에 =ad라고 입력하면

아래와 같이 함수 목록에 ADDRESS와 함께 표시됩니다.

 

VBA로 만든 사용자 정의 함수와 같은 역할을 하는데, 훨씬 편합니다.

 

탭 키를 누르고, 3,4를 입력하고 엔터 키를 누르면 7이 구해집니다.

 

다. 재귀 함수

함수 안에서 함수를 다시 호출하는 것이 재귀 호출이고, 이를 이용한 함수식이 재귀 함수입니다.

그러면 무한 반복되므로 종료 조건을 줘야 합니다.

 

VBA에서 While 또는 For 반복문에서 조건에 해당하는 경우 중간에 빠질 수 있도록 하는 것과 같습니다.

 

이번에는 50까지 더하기를 해보겠습니다.

이름관리자에서 화살표키를 사용하는 것이 어렵기 때문에 Notepad++ 등을 이용해서 작성한 후 이름관리자의 참조 대상에 붙이는 것이 훨씬 편리합니다.

 

아래와 같이 Lambda 식을 작성하는데,

=lambda(x,y,
	if(x+y>50,x+y,
	add(x+1,y+2)
	)
)

 

x와 y를 더한 다음,

x에 1을 더한 값을 다시 x에 대입하고,

y에 y+2 값을 대입해서 더하는 작업을 반복하는데,

x+y가 50을 초과하게 되면 x+y값을 반환하고 끝내는 것입니다.

 

이름은 그대로 Add를 사용하고

아래 이름 관리자 창에서 편집 버튼을 누른 후

위 수식을 복사한 후 참조 대상에 붙이고 확인 버튼을 누릅니다.

수식 중간에 공백이 있어도 괜찮습니다.

 

그러면 아래와 같은 모습이 됩니다. 닫기 버튼을 누르고

 

A2셀을 보면 52가 반환됐습니다.

3,4를 넣으면 3+4를 한 다음 x는 1씩 늘어나고, y는 2씩 늘어나는데 더하면 7, 10, 13식으로 늘어나고, 50보다 큰 첫 번째 숫자는 52이므로 여기서 멈춘 것입니다.

 

2. Find 함수에 적용

가. 'last_word'란 함수 생성

Find 함수의 세 번째 인수를 Find함수를 이용해 반복 적용했는데,

이것을 재귀 함수를 이용해 쉽게 작성할 수 있습니다.

 

이름 관리자를 클릭한 후 이름으로는 last_word, 참조 대상에 아래 문자를 복사해서 붙여 넣습니다.

=lambda(textString, findChars,
	if(iserror(find(findChars, textString)),textString,
	last_word(
	mid(textString,find(findChars,textString)+1,len(textString)),
	findChars)
	)
)

 

위 구문의 의미는 아래와 같습니다.

 

=lambda(textString, findChars,

는 textString이란 문자열과 findChars란 찾을 문자열을 인수로 받는다는 것이고,

 

if(iserror(find(findChars, textString)),textString,

는 find(findChars, textString)이 에러가 났을 때 textString을 반환하고 끝낸다는 것이며,

 

에러가 아니면 아래 구문에 따라

last_word(
mid(textString,find(findChars,textString)+1,len(textString)),
findChars)

 

last_word 함수를 다시 호출하는데,

인수가 mid(textString,find(findChars,textString)+1,len(textString)),

다시 말해 textString에서 findChars를 찾은 위치의 다음부터 textString의 길이만큼 문자열을 가져와서 첫 번째 인수인 textString 인수에 넣고,

 

findChars는 변하지 않으므로 findChars를 두 번째 인수로 다시 넣습니다.

 

 

나. last_word 함수 적용

Sheet1 시트의 B7셀에 =last까지 입력하면 last_word 함수가 목록에 표시되는데, 탭 키를 눌러 입력하고,

a2셀 주소와 ₩를 입력하고 [ =last_word(A2," ₩ " ]

 

엔터 키를 누르면 마지막 ₩이후의 문자열이 반환됩니다.

 

특정문자의 마지막위치이후 문자열 가져오기(완성)2.xlsx
0.01MB

 

 

신기하지 않나요?

다만, Lambda함수는 Microsoft 365용 Excel, Mac용 Microsoft 365용 Excel, 웹용 Excel에서만 사용할 수 있기 때문에 버전이 낮다면 이런 혜택을 누릴 수 없는 아쉬움이 있습니다.

반응형