이번에는 Reduce와 Scan 함수를 이용해 원문자를 제거해 보겠습니다.
1. Reduce 함수를 이용한 수식
가. Reduce 함수의 구문
=REDUCE([initial_value], array, lambda(accumulator, value))
initial_value는 초기값, array는 배열,
accumulator는 initial_value와 array를 받는 것이고,
value는 accumulator를 이용해서 값을 구하는 수식입니다.
나. 원문자가 아니라면 한 글자씩 결합
A2셀을 대상으로 A22셀에서 수식을 작성하겠습니다.
먼저 초기값은 문자열을 결합할 것이므로 ""으로 해야 합니다. 비워두면 0으로 생각해서 이상한 값이 나옵니다.
array는 배열인데, 글자를 한 글자씩 구분하기 위해 1부터 해당 셀의 길이만큼 숫자를 배열로 넘깁니다.
그리고, lambda 수식을 작성하는데,
초기값은 s로 받고, array는 c로 받습니다.
그리고, value는 한 글자씩 Unicode가 9331보다 큰 지 판단해서 크다면 문자열을 결합하고,
아니면 그 값, 다시 말해 초기값 또는 결합한 값을 유지하도록 합니다.
따라서, 전체 수식은
=reduce("",sequence(len(a2)),lambda(s,c,if(unicode(mid(a2,c,1))>9331,s&mid(a2,c,1),s)))
s값은 A2셀을 한 글자씩 처리할 때마다 만, 만둣, 만둣국을 바뀝니다.
이제 A22셀의 수식을 복사해서 A22셀에서 U26셀까지 붙여 넣습니다.
이전과 마찬가지로 셀에 값이 없을 때 에러가 발생하므로
=다음에 iferror(를 추가하고, 맨 뒤에 ,"")를 추가하면 됩니다.
=IFERROR(REDUCE("",SEQUENCE(LEN(A2)),LAMBDA(s,c,IF(UNICODE(MID(A2,c,1))>9331,s&MID(A2,c,1),s))),"")
모든 셀에서 원문자가 제거되었습니다.
U5셀과 같이 중간에 원문자가 들어가 있어도 문제없이 잘 처리됐습니다.
2. Scan과 Reuce 함수를 결합한 수식
가. Scan 함수의 구문
=SCAN ([initial_value], array, lambda(accumulator, value))
구문은 Reduce와 똑같습니다.
나. 모든 범위를 한꺼번에 처리
Scan함수를 사용하려고 하는 이유는
위 수식에서는 한 셀만 처리했기 때문에 A2셀부터 U6셀까지 한꺼번에 처리하기 위한 것입니다.
Scan으로 초기값과 범위를 모두 넘긴 다음 Reduce에서 한 셀씩 처리하는 것입니다.
따라서, 위 수식=IFERROR(REDUCE("",SEQUENCE(LEN(A2)),LAMBDA(s,c,IF(UNICODE(MID(A2,c,1))>9331,s&MID(A2,c,1),s))),"")
에서 A2 자리에 Scan으로 받은 범위를 넘기면 됩니다. 초기값을 Reduce함수에서 지정하므로 Scan함수의 초기값은 의미가 없습니다.
수식은
=scan("",a2:u6,lambda(ss,cc, IFERROR(REDUCE("",SEQUENCE(LEN(cc)),LAMBDA(s,c,IF(UNICODE(MID(cc,c,1))>9331,s&MID(cc,c,1),s))),"")))
입니다.
scan함수의 ""는 s와 c가 있으므로 ss로 받고,
a2:u6은 cc로 받고,
A2를 모두 cc로 바꾼 것입니다.
그러면 A2셀에서 U6셀까지 한 셀씩 원문자가 아닌 경우만 결합해서 결괏값을 반환합니다.
그러면 수식을 A27셀에만 입력했는데, U31셀까지 모두 처리됩니다.
A27셀부터 U31셀까지가 파란색 실선으로 둘러싸여져 있습니다.
'Excel' 카테고리의 다른 글
오른쪽부터 3개의 평균 구하기 (0) | 2024.05.16 |
---|---|
해당 월까지의 계획과 실적의 합계 구하기 (0) | 2024.05.15 |
문자열 중 원문자 지우기(3) - TextJoin, Sequence (0) | 2024.05.13 |
문자열 중 원문자 지우기(2) - Unichar, Find, Min, Left (0) | 2024.05.10 |
문자열 중 원문자 지우기(1) - Unicode, Substitute (0) | 2024.05.09 |