테크레시피

엑셀 수식 언어에서 사용자 정의 함수를…람다

마이크로소프트 엑셀 개발팀이 2020년 12월 4일(현지시간) 엑셀 수식 언어를 이용해 사용자 정의 함수를 정의할 수 있는 람다(LAMBDA)를 베타에 탑재했다고 발표했다.

지금까지도 엑셀을 이용해 사용자 정의 함수를 정의하는 건 이미 가능했다. 하지만 이 때에는 자바스크립트 같은 완전히 다른 언어로 설명을 해야 했다. 반면 람다는 엑셀 자체 공식 언어로 지정 함수를 정의할 수 있다. 또 하나의 함수에서 다른 함수를 호출할 수 있다.

람다에서 정의된 함수에 ‘MYFUNCTION’ 등을 쓰면 시트에서 MYFUNCTION과 설명만으로 호출할 수 있다. 또 람다는 재귀 가능하며 MYFUNCTION 정의에서 MYFUNCTION을 호출할 수 있다. 이 메커니즘은 이전에는 자바스크립트 없이 할 수 없던 것이다.

예를 들어 이미지처럼 인코딩되어 있는 스테이션ID 속에서 위치값만 확장하려면 지금까지는 다음과 같은 함수를 입력해야 했다(= LEFT (RIGHT (B18, LEN (B18) -FIND ( “-“, B18)), FIND ( “-“, RIGHT (B18, LEN (B18) -FIND ( “-“, B18))) – 1)). 하지만 이 경우 논리 오류를 찾아내고 그 값을 일일이 수동으로 수정해야 하며 이 과정에서 실수가 발생할 가능성도 높아진다. 또 수식 만들기가 아닐 때 목적을 알기 어렵다는 문제도 있었다.

하지만 람다 함수를 이용해 GETLOCATION이라는 명칭으로 함수를 작성하면(= LAMBDA (stationID, LEFT (RIGHT (stationID, LEN (stationID) -FIND ( “-“, stationID)), FIND ( “-“, RIGHT (stationID, LEN (stationID) -FIND ( “-“, stationID)) ) -1))) 오류가 발생해도 단 1개만 수정하면 된다.

그 뿐 아니라 추가 로직을 이용해 함수를 만들 수도 있다(= XLOOKUP (GETLOCATION (B18) table1 [locations, table1 [tax])).

그 밖에 람다는 재귀가 가능하며 특정 문자열을 제거하려는 경우 그 자체를 참조한다는 함수 REPLACECHARS를 정의해 삭제 대상 문자(illegal characters)가 포함되지 않은 경우에는 텍스트스트링(textString)으로 돌아가서 문자(illegalChars)가 나타날 때마다 삭제한다는 IF문을 만들 수 있다.

= LAMBDA (textString, illegalChars,

IF (illegalChars = “”textstring,

REPLACECHARS (

SUBSTITUTE (textString, LEFT (illegalChars 1), “”),

RIGHT (illegalChars, LEN (illegalChars) -1)

)))

람다를 이용하려면 오피스 인사이더 프로그램에 신청해 엑셀 베타를 이용해야 한다. 관련 내용은 이곳에서 확인할 수 있다.

이원영 기자

컴퓨터 전문 월간지인 편집장을 지내고 가격비교쇼핑몰 다나와를 거치며 인터넷 비즈니스 기획 관련 업무를 두루 섭렵했다. 현재는 디지털 IT에 아날로그 감성을 접목해 수작업으로 마우스 패드를 제작 · 판매하는 상상공작소(www.glasspad.co.kr)를 직접 운영하고 있다. 동시에 IT와 기술의 새로운 만남을 즐기는 마음으로 칼럼니스트로도 활동 중이다.

뉴스레터 구독