문자열을 조합하는 구문이다.
56번은 엑셀 365함수를 이용하여 textjoin을 함수의 빈셀포함을 적용하면 나오는 똑같은 결과를 가져오는 구문이다.
VBA 의 join함수를 사용하려면 1차원 배열 형태여야 하기 때문에 2차원 배열을 1차원화 하는 방법을 가져와야 한다.
Vtemp = rngA.Resize(1, 5)
V = Application.Index(Vtemp, 1, Array(1, 2, 3, 4, 5))
Cells(rngA.Row, "h") = Join(V, ",")
영역을 동적배열로 다이렉트로 가져오게 되면 2차원 배열이 되는데 이 2차원 배열을 1차원 배열화 하려면 슬라이싱 작업을 거쳐야 한다. Array(1, 2, 3, 4, 5)는 열의 갯수를 의미한다.
56-1은 셀에 출력 후 가로 정렬을 통해서 Sort를 한후 중복값을 제거하면 된다.
rngX.Copy Cells(rngA.Row, "j")
Set rngJ = Cells(rngA.Row, "j").Resize(1, 5)
rngJ.Sort rngJ(1), 1, Orientation:=xlLeftToRight '= 가로정렬
For i = 1 To rngJ.SpecialCells(2).Cells.Count '= 중복값제거를 위한 순환
If InStr(str, CLng(rngJ(i))) = 0 Then str = IIf(str = "", rngJ(i), str & "," & rngJ(i))
Next i
이렇게 뿌려진 데이터는 지저분하기 때문에 가로 정렬인 경유에는 왼쪽에서 오른쪽으로 삭제를 해줘야 깔끔하게 유지할 수 있다.
Cells(rngA.Row, "k").Resize(1, 4).Delete Shift:=xlToLeft
솔직히 늘 이야기 하지만 이런 배열의 정렬은 ArrayList가 값이다.
ArrayList관련 글도 여러편 포스팅했으니까. 확인해서 내것으로 만드길 바란다.
더보기
Option Explicit
Sub 기초방56()
Dim rngAll As Range: Set rngAll = [b5:b30]
Dim rngA As Range, rngX As Range, rngJ As Range
Dim Vtemp, V
Dim str$, i&
[H5:J30].ClearContents '= 초기화
Application.ScreenUpdating = False '= 화면 업데이트 정지
For Each rngA In rngAll '= 전체순환
Vtemp = rngA.Resize(1, 5) '= 영역을 임시배열에 담아라
V = Application.Index(Vtemp, 1, Array(1, 2, 3, 4, 5)) '= 2차원배열을 1차원배열로..
Cells(rngA.Row, "h") = Join(V, ",") '= join을 통한 문자열 출력
Set rngX = rngA.Resize(1, 5) '= 56_1 시작
rngX.Copy Cells(rngA.Row, "j") '= 56_1 출력할 셀에 값 출력
Set rngJ = Cells(rngA.Row, "j").Resize(1, 5)
rngJ.Sort rngJ(1), 1, Orientation:=xlLeftToRight '= 가로정렬
For i = 1 To rngJ.SpecialCells(2).Cells.Count '= 중복값제거를 위한 순환
If InStr(str, CLng(rngJ(i))) = 0 Then str = IIf(str = "", rngJ(i), str & "," & rngJ(i))
Next i
Cells(rngA.Row, "k").Resize(1, 4).Delete Shift:=xlToLeft '= 출력한 셀값 제거
Cells(rngA.Row, "j") = str '= 고유값 + 정렬된 값을 출력
str = ""
Next rngA
Application.ScreenUpdating = True
End Sub
같은 방 크루인 시훈아빠의 코드를 첨부할테니 더 다양한 방법으로 다각화에 성공하길 바란다.
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #58 [ 불일치 영역 색칠하기 ] (0) | 2023.07.11 |
---|---|
[기초방] VBA 100제 #57 [ 영역 합계구하기 ] (0) | 2023.07.07 |
[기초방] VBA 100제 #55 [ 색상그룹평균 ] (0) | 2023.07.05 |
[기초방] VBA 100제 #54 [ 색상그룹정렬 ] (0) | 2023.07.04 |
[기초방] VBA 100제 #53 [ 색상정렬 ] (0) | 2023.07.03 |
댓글