표를 정렬하고 합계를 구하는 문제이다.
이문제는 365 함수의 MAKEARRAY + 테이블 정렬을 복습하는 차원으로 만들었다.
=HSTACK(
MAKEARRAY(ROWS($B$4:$F$13),COLUMNS($B$4:$F$13),
LAMBDA(r,c,INDEX(SORT(INDEX($B$4:$F$13,r,),,,1),c))),
BYROW(B4:F13,LAMBDA(s,SUM(s)))
)
이문제의 관건은 역시나 가로행의 정렬이었는데 시훈아빠님께서 정말 놀라운 꿀팁으로 풀어버렸다.
코드는 이렇다.
SMALL 함수로 정렬을 하는 TRICK을 선보였다...지림
시훈 아빠님의 코드를 참고하여 본인 코드를 공개하려고 한다
하나는 셀기반으로 출력을 한거구
또 하나는 TEXTSPLIT + 배열상수 방식을 VBA로 풀어낸 것이다.. 재밌고 편한걸로 공부하길 바란다.
위에는 알거고, TEXTSPLIT 방식을 좀 더 설명하면
For i = 1 To UBound(vAll, 1)
str = IIf(str = "", Join(.Small(.Index(vAll, i), Array(1, 2, 3, 4, 5)), ","), str & ";" & _
Join(.Small(.Index(vAll, i), Array(1, 2, 3, 4, 5)), ",")) & "," & _
.Sum(.Index(vAll, i))
Next i
End With
rngX.Formula2 = "=TEXTSPLIT(" & "{" & str & "}" & "," & """,""" & "," & """;""" & ")"
뭔가 복잡해보이지만 함수식으로 고치면
점수1, 점수2, 점수3, 점수4, 점수5, 합계;점수6, 점수7, 점수8, 점수8, 점수10, 합계;
이런식으로 같은 행은 콤마(,) 이어지고, 행구분은 세미콜론(;)으로 이뤄짐
이것을 365 함수인 TEXTSPLIT로 TEXTSPLIT(문자, "행구분자", "열구분자") 로 표기 한것이다.
실제 이것은 배열에서 이루어지는것으로 문자를 VBA에서 배열상수화 시키기 위해서 앞뒤로 { }로 붙혀주고 구분자로 콤마와 세미콜론을 VBA식으로 넣어준것이다.
마지막으로 가장 중요한것은 이렇게 VBA 에서 배열상수를 사용하려면 반드시 FORMULA2를 사용하여야 한다.
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #84 [ 교차 테이블 만들기] (2) | 2023.10.20 |
---|---|
[기초방] VBA 100제 #83 [ 테이블 역순으로 출력하기 ] (0) | 2023.10.20 |
[기초방] VBA 100제 #81 [ 테이블 형태 변경하기 ] (2) | 2023.10.19 |
[기초방] VBA 100제 #80 [ 테이블교차하기 ] (0) | 2023.10.19 |
[기초방] VBA 100제 #79 [ 로또번호 정렬하기 ] (2) | 2023.10.19 |
댓글