애들센스


VBA 아니고 엑셀에서 람다함수 만들기 오피스/VBA/Office.JS

파이썬 람다함수는 익명함수로서  변수에 저장할 수 있다. 아래의 예는 람다함수인데, 만들어진 함수는 변수 yAxb에 저장한다. 이 함수는 값을 x에 받아 2를 곱하고 다시 1을 더하여 돌려준다.

>>> yAxb = lambda x : 2*x + 1
>>> yAxb(4)
9

자바스크립트(ES6)에서는 일명 화살표함수라는 것이 있다. 파이썬의 람다함수처럼 이 역시 함수, 변수 yAxb에 저장한다.

// ES6
const yAxb = x => 2 * x + 1;
console.log(yAxb(4)); // 9

그런데, VBA도 할 수 없는 것을 엑셀이 비슷한 것을 만들 수 있다. 엑셀의 '이름'기능을 이용하는 것이다. 엑셀의 이름기능은 A1, B2, C4:E7 과 같은 의미없는 셀 주소 대신 의미있고 기억하기 좋은 이름을 부여주는 것이다.

워크시트의 각 셀주소는 일종의 메모리 영역이다. 프로그래밍에서 변수를 선언하면 자동으로 메모리에 변수를 붙여 주는 것인데, 셀주소가 메모리 주소이고, '이름'은 변수를 지정한 것으로 비유할 수 있다.

파이썬과 자바스크립트(ES6)에서 변수에 함수를 저장한 것 처럼 엑셀은 '이름'에 수식(함수포함)을 지정할 수 있다. 다음 그림을 보면

'yAxb'라는 이름을 주고 '=Sheet1!$B2*2+1'라는 수식을 정의하고 있다. B2라는 셀이 위의 파이썬, 자바스크립트 코드의 변수 x에 해당한다. 그래서 셀안에 '=yAxb'를 입력하면 B열의 각 행 값을 읽어와서 계산을 하게 된다.


핑백

  • nØthing specia¡ : VBA에서 람다함수 만들기 2019-11-29 22:33:59 #

    ... 블로그 단골손님, 우왕님의 천재적인 아이디어에 힘입어 VBA에서 람다함수를 만들어 보았다. 진짜 람다함수는 아니고, 엑셀의 이름기능과 VBA의 EVALUATE함수를 이용한 것이다. 이번 ... more

덧글

  • 우왕 2019/11/21 22:07 # 삭제 답글

    evaluate 를 사용하면 그 방법을 VBA에서 사용 가능할까요?
  • 타임버드 2019/11/21 22:14 #

    해본적이 없는데, 어떤 식으로 하실 건지 함 보여주세요. 즉 your turn~ㅎㅎ
댓글 입력 영역