본문 바로가기
VBA/365 FUNCTION

[365 함수리뷰] 영역에서 중복되지 않은 5개 뽑아내기

by 일등미노왕국 2023. 11. 8.

다음과 같은 리스트가 주어졌을 때, 중복되지 않은 랜덤한 값 5개를 뽑아내는 문제이다.

 

랜덤한 값을 뽑아내는 문제는  RAND 함수를 사용하면 되는데, 365에서는 RANDARRAY 함수로 야무지게 뽑아 낼 수 있어 소개하려고 한다.

 

우선 각 리스트에 랜덤한 값을 부여하는 코드는 이렇다.

 

=LET(

  _tbl,HSTACK(RANDARRAY(COUNTA(C3:D9),1,0,1,0),  TOCOL(C3:D9)),

  _tbl
)

 

코드 설명을 하면 리스트 영역만큼 행의 값을 주고, 열값은 1, 최소값 0, 최대값 1인 영역에 정수가 아닌 소수로 구성된 영역이 만들어 지고,  그 옆의 열에는 리스트 값을 한줄로 길게 나열하라는 의미이다.

 

이렇게 주어진 영역을 LET  함수에서 _tbl로 설정한다.

 

주어진 랜덤한값에서 5개의 큰값을 뽑아낸다. 아래 코드는 앞서 만든 테이블에서 큰값 1부터 5까지의 값을 열방향으로 나열하라는 의미이다.

 

LARGE(_tbl,SEQUENCE(,5))

 

 

 

이렇게 구해진 값을 Vlookup으로 구하면 5개의 랜덤한 값을 가져올수 있는데 이것을 TEXTJOIN함수로 마무리를 하게 되면 문제의 결과값처럼 도출되게 된다.

 

=LET(
_tbl,HSTACK(RANDARRAY(COUNTA(C3:D9),1,0,1,0),TOCOL(C3:D9)),
_key,LARGE(_tbl,SEQUENCE(,5)),
TEXTJOIN(",",,VLOOKUP(_key,_tbl,2,0)))

 

 

 

오늘은 RANDARRAY 함수와 LARGE함수와의 조합을 통한 중복되지 않은 랜덤한 값을 뽑아내는것을 연습해보았다.

댓글