이번 41번문제는 표를 간단한 테이블 형태로 변경하는것인데..엑셀을 하는 사람들은 절대로 이러한 41번 형태의 테이블로 data를 작성하면 안된다.
엑셀에서 많이 사용되는 것중하나인 빈셀들을 윗셀의 값을 참조하는 코드는 아래와 같다.
rngU.SpecialCells(4).FormulaR1C1 = "=R[-1]C"
vtemp = Application.Transpose(rngA(1, -4).Resize(Application.CountIf(rngAll.Columns(2), rngA(1, -3)), 1))
vtemp에서 타임파트중 같은 파트들을 Countif를 통해서 그 크기를 Resise의 행의 크기로 하여 배열화 하면 2차원 배열이 됨으로 이를 Transpose를 통해 1차원 배열로 만든다.
이같은 일련의 코드를 작성하는 이유는 같은 회차의 이름들을 콤마로 연결하려하는데 이는 1차원배열만 Join으로 연결할 수 있기 때문이다.
str = Join(vtemp, ",")
슬슬 배열에 관한 문제를 준비를 해야하는 시기가 온거 같다..
기초방 50번부터는 배열에 관한 문제로 구성하려 한다.
그럼 오늘도 맛있는 코드 냠냠
더보기
Option Explicit
Sub 기초방41()
Dim rngAll As Range: Set rngAll = [c6:h18]
Dim rngA As Range
Dim rngU As Range, rngX As Range: Set rngX = [j6]
Dim str$
Dim vtemp
Sheets("문제").[c5:h18].Copy Sheets("결과").[c5]
[j6:n9].ClearContents
Set rngU = Union(rngAll.Columns(2), rngAll.Columns(3), rngAll.Columns(4)) '= 타임파트 시작시간 종료시간을 rngU로 설정
rngU.NumberFormatLocal = "h:mm;@" '= rngU영역에 숫자 포멧을 시간 형태로 해라
rngU.SpecialCells(4).FormulaR1C1 = "=R[-1]C" '= 비어있는 셀에 바로 윗 셀을 참조
[j5:n5] = Array("타임파트", "작업자", "시작시간", "종료시간", "총생산수")
For Each rngA In rngAll.Columns(6).Cells
If rngA(1, -3) <> rngA(0, -3) Then '= 타임파트가 달라지면
rngA = Application.SumIf(rngAll.Columns(2), rngA(1, -3), rngAll.Columns(5)) '= 각 횟수의 총 생산수를 sumif로 구해라
vtemp = Application.Transpose(rngA(1, -4).Resize(Application.CountIf(rngAll.Columns(2), rngA(1, -3)), 1))
'= Counif로 구한 영역의 2차원 배열을 1차원 배열로 바꾼후
str = Join(vtemp, ",") '= 바꾼 1차원 배열을 콤마로 결합해라
rngX = rngA(1, -3): rngX.Next = str: rngX(1, 3) = rngA(1, -2) '= 41-1 표 형태로 해당 데이터들을 출력해라
rngX(1, 4) = rngA(1, -1): rngX(1, 5) = rngA
Haja_format rngX
str = "": Set rngX = rngX.Offset(1) '= 다음 파트를 위한 초기화 작업
End If
Next rngA
MsgBox "테이블 출력을 완료했습니다."
End Sub
Function Haja_format(rngX As Range)
Dim i&
For i = 1 To 150
rngX.Resize(1, 5).Font.Bold = True
Next i
rngX.Resize(1, 5).Font.Bold = False
End Function
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #43 [ 조합 정렬하기 ] (0) | 2023.03.16 |
---|---|
[기초방] VBA 100제 #42 [ 고급필터 ] (0) | 2023.03.16 |
[기초방] VBA 100제 #40 [ 가로정렬 ] (0) | 2023.03.15 |
[기초방] VBA 100제 #39 [ 문자조합하기 ] (0) | 2023.03.14 |
[기초방] VBA 100제 #38 [ 재배치하기 ] (2) | 2023.03.06 |
댓글