1. 경우의 수 찾기
프로그램은 모든 경우의 수를 찾아서 그에 따른 처리를 해야 완벽한 프로그램이 됩니다. 하나라도 빠지면 불완전하고 이상한 결과를 낳게 되니 모든 경우의 수를 찾는 노력을 게을리 하면 안됩니다. 이것이 처리 로직을 짜는 것만큼 중요합니다.
위 표를 살펴보면 셀 병합이 된 경우도 있고, 안된 경우도 있고,
셀 병합도 가로 방향으로만 된 경우, 세로 방향으로만 된 경우, 두 방향 모두 셀 병합인 경우가 있습니다.
또한 글자도 굵은 글자가 있고, 보통 글자가 있고, 들여쓰기가 된 경우도 있고 아닌 경우도 있고,
데이터가 문자인 경우도 있고 숫자인 경우도 있습니다. 일반적으로 숫자는 천단위마다 콤마를 넣어서 표시합니다.
위와 같은 개별 요인들을 결합해서 모든 경우의 수를 도출하고 그에 따른 적당한 처리방법을 강구해야 합니다.
2. 프로그램
코드는 아래와 같습니다.
Option Explicit
Sub make_table2()
'변수 선언
Dim end_Row As Integer, end_Col As Integer, i As Integer, j As Integer, k As Integer
Dim start_loc As Integer, end_loc As Integer
' 마지막 행과 열을 구함
end_Row = Range("a1000").End(xlUp).Row
For j = 2 To 100
If InStr(Cells(end_Row, j), "<tr>") > 0 Then
end_Col = j - 1
Exit For
End If
Next
If end_Col = 0 Then
end_Col = Cells(end_Row, 100).End(xlToLeft).Column
End If
' 기존 데이터 지움
Range(Cells(1, end_Col + 1), Cells(end_Row, 100)).ClearContents
' 첫번째로 기록할 셀에 table, tbody 입력
Cells(1, end_Col + 1) = "<table style='border-collapse: collapse; width: 100%;' border='1' data-ke-align='alignLeft'><tbody>"
'1행부터 끝행까지 반복 처리
For i = 1 To end_Row
'1열부터 끝열까지 반복 처리
For j = 1 To end_Col
' 셀에 데이터가 있는 경우
If Len(Cells(i, j)) > 0 Then
Select Case j
'첫 열인 경우
Case 1:
' 세로 방향, 가로 방향이 모두 병합된 경우
If Cells(i, j).MergeArea.Rows.Count > 1 And Cells(i, j).MergeArea.Columns.Count > 1 Then
'기존 값에 <tr> 넣고, <td 태그를 넣으면서, rowspan, colspan 값을 넣고, 처리 셀 값을 결합하고 td 태그 닫음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td rowspan=" & Cells(i, j).MergeArea.Rows.Count & _
" colspan=" & Cells(i, j).MergeArea.Columns.Count & ">" & Cells(i, j) & "</td>"
' 세로 방향만 셀 병합인 경우
ElseIf Cells(i, j).MergeArea.Rows.Count > 1 Then
'기존 값에 <tr> 넣고, <td 태그를 넣으면서, rowspan 값만 넣고, 처리 셀 값을 결합하고 td 태그 닫음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td rowspan=" & Cells(i, j).MergeArea.Rows.Count & ">" & Cells(i, j) & "</td>"
' 가로 방향만 셀 병합인 경우
ElseIf Cells(i, j).MergeArea.Columns.Count > 1 Then
'기존 값에 <tr> 넣고, <td 태그를 넣으면서, colspan 값만 넣고, 처리 셀 값을 결합하고 td 태그 닫음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td colspan=" & Cells(i, j).MergeArea.Columns.Count & ">" & Cells(i, j) & "</td>"
' 셀 병합이 아닌 경우
Else
'기존 값에 <tr> 연결하고, <td> 태그 열면서 처리 셀 값을 결합하고 td 태그 닫음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td>" & Cells(i, j) & "</td>"
End If
' 끝 열인 경우
Case end_Col:
' 끝열이 병합이면서 값이 있을 수는 없으므로 셀 병합 조건 없음
' 기존 값에 결합하면서 td 태그를 열고 처리 셀값을 더한 다음 td태그와 tr태그를 닫음
' 1행보다 큰 경우만 처리 셀 값이 숫자인 경우 천 단위마다 콤마를 넣음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<td>" & _
IIf(i > 1 And WorksheetFunction.IsNumber(Cells(i, j)), WorksheetFunction.Text(Cells(i, j), "#,##0"), Cells(i, j)) & "</td></tr>"
' 중간 열인 경우
Case Else:
' 세로 방향, 가로 방향이 모두 병합된 경우
If Cells(i, j).MergeArea.Rows.Count > 1 And Cells(i, j).MergeArea.Columns.Count > 1 Then
' 기존 값에 <tr> 넣고, <td 태그를 넣으면서, rowspan, colspan 값을 넣고, 처리 셀 값을 결합하고 td 태그 닫음
' 1행보다 큰 경우만 처리 셀 값이 숫자인 경우 천 단위마다 콤마를 넣음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<td rowspan=" & Cells(i, j).MergeArea.Rows.Count & _
" colspan=" & Cells(i, j).MergeArea.Columns.Count & ">" & _
IIf(i > 1 And WorksheetFunction.IsNumber(Cells(i, j)), WorksheetFunction.Text(Cells(i, j), "#,##0"), Cells(i, j)) & "</td>"
' 세로 방향만 셀 병합인 경우
ElseIf Cells(i, j).MergeArea.Rows.Count > 1 Then
' 기존 값에 <tr> 넣고, <td 태그를 넣으면서, rowspan 값만 넣고, 처리 셀 값을 결합하고 td 태그 닫음
' 1행보다 큰 경우만 처리 셀 값이 숫자인 경우 천 단위마다 콤마를 넣음
Cells(i, end_Col + j) = "<td rowspan=" & Cells(i, j).MergeArea.Rows.Count & ">" & _
IIf(i > 1 And WorksheetFunction.IsNumber(Cells(i, j)), WorksheetFunction.Text(Cells(i, j), "#,##0"), Cells(i, j)) & "</td>"
' 가로 방향만 셀 병합인 경우
ElseIf Cells(i, j).MergeArea.Columns.Count > 1 Then
' 기존 값에 <tr> 넣고, <td 태그를 넣으면서, colspan 값만 넣고, 처리 셀 값을 결합하고 td 태그 닫음
' 1행보다 큰 경우만 처리 셀 값이 숫자인 경우 천 단위마다 콤마를 넣음
Cells(i, end_Col + j) = "<td colspan=" & Cells(i, j).MergeArea.Columns.Count & ">" & _
IIf(i > 1 And WorksheetFunction.IsNumber(Cells(i, j)), WorksheetFunction.Text(Cells(i, j), "#,##0"), Cells(i, j)) & "</td>"
' 셀 병합이 아닌 경우
Else
'기존 값에 결합하면서 <td> 태그 열면서 처리 셀 값을 결합하고 td 태그 닫음
' 1행보다 큰 경우만 처리 셀 값이 숫자인 경우 천 단위마다 콤마를 넣음
Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<td>" & _
IIf(i > 1 And WorksheetFunction.IsNumber(Cells(i, j)), WorksheetFunction.Text(Cells(i, j), "#,##0"), Cells(i, j)) & "</td>"
End If
End Select
'셀에 데이터가 없는 경우
Else
Select Case j
'첫번째 열인 경우
Case 1:
'셀 병합이라면 <tr> 태그 추가
If Cells(i, j).MergeArea.Rows.Count > 1 Or Cells(i, j).MergeArea.Columns.Count > 1 Then
Cells(i, end_Col + j) = "<tr>"
'셀 병합이 아니라면 <tr><td></td> 태그 추가
Else
Cells(i, end_Col + j) = "<tr><td></td>"
End If
' 끝 열인 경우
Case end_Col:
'셀 병합이라면 </tr> 태그 추가
If Cells(i, j).MergeArea.Rows.Count > 1 Or Cells(i, j).MergeArea.Columns.Count > 1 Then
Cells(i, end_Col + j) = "</tr>"
'셀 병합이 아니라면 <td></td></tr> 태그 추가
Else
Cells(i, end_Col + j) = "<td></td></tr>"
End If
'중간 열인 경우
Case Else:
'셀 병합이 아니라면 <td></td> 태그 추가
If Cells(i, j).MergeArea.Rows.Count = 1 And Cells(i, j).MergeArea.Columns.Count = 1 Then
Cells(i, end_Col + j) = "<td></td>"
End If
End Select
End If
'가운데 정렬, 숫자인 경우 오른쪽 정렬
If Cells(i, j).HorizontalAlignment = xlCenter Then
Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), "<td", "<td style='text-align:center;' ")
ElseIf WorksheetFunction.IsNumber(Cells(i, j)) Then
Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), "<td", "<td style='text-align:right;' ")
' Cells(i, end_Col + j).NumberFormat = "#,##0"
End If
' 글자 굵게
If Cells(i, j).Font.Bold = True Then
start_loc = InStr(Cells(i, end_Col + j), ">")
end_loc = InStr(start_loc, Cells(i, end_Col + j), "<")
Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1), "<b>" & Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1) & "</b>")
End If
' 들여쓰기
If Cells(i, j).IndentLevel > 0 Then
start_loc = InStr(Cells(i, end_Col + j), ">")
end_loc = InStr(start_loc, Cells(i, end_Col + j), "<")
Dim n_nbsp As String
n_nbsp = ""
For k = 1 To Cells(i, j).IndentLevel
n_nbsp = n_nbsp & " "
Next
Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1), n_nbsp & Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1))
End If
Next
Next
' 마지막에 닫는 tbody와 table 태그 추가
Cells(end_Row, end_Col + j - 1) = Cells(end_Row, end_Col + j - 1) & "</tbody></table>"
End Sub
3. 프로그램에 대한 설명
① 명시적으로 변수 선언
Option Explicit |
변수 선언을 명시적으로 하라는 의미입니다. 변수의 형식이 숫자이거나 문자로 지정해야 문자인데 숫자가 들어오거나 할 경우 에러를 잡을 수 있습니다.
② 서브 프로시저의 형식
Sub make_table2() 코드 End Sub |
sub 프로시져의 이름은 make_table2이고 괄호안에 아무 것도 없는 것은 인수가 없기 때문입니다. End Sub로 끝납니다. sub 입력하고 프로시저 이름을 입력한 다음 엔터키를 누르면 ()와 End Sub가 자동으로 입력됩니다.
③ 변수 선언 형식
'변수 선언 Dim end_Row As Integer, end_Col As Integer, i As Integer, j As Integer Dim start_loc As Integer, end_loc As Integer |
변수 선언 앞의 작은 따옴표(')는 주석 표시로서 코드에 대한 설명을 기록하거나 실행하지 않아야 할 코드 앞에 붙입니다.
변수는 dim 다음 변수명, 그리고 형식을 as 다음에 적습니다. integer은 정수로서 음수, 양수가 가능한데 -32,767부터 32,767까지입니다.
④ 처리할 대상의 마지막 행과 열을 구함
' 마지막 행과 열을 구함 end_Row = Range("a1000").End(xlUp).Row For j = 2 To 100 If InStr(Cells(end_Row, j), "<tr>") > 0 Then end_Col = j - 1 Exit For End If Next If end_Col = 0 Then end_Col = Cells(end_Row, 100).End(xlToLeft).Column End If |
표 안의 데이터를 처리하는 것이므로 마지막 행과 열을 알아야 합니다.
마지막 행인 end_Row는 a1000셀에서 위로 올라와서 멈추는[End(xlUp)] 셀의 행 수(row)입니다.
마지막 열인 end_Col은 아래와 같이 오른쪽에 HTML 태그가 작성되기 때문에 좀 복잡하게 구했습니다.
먼저 tr 태그의 위치를 for 반복문과 inStr함수를 이용해서
InStr(Cells(end_Row, j), "")이 0보다 크다면 tr 태그가 있는 것이므로 j+1을 end_Col로 하고,
0일 경우, 다시 말해 tr 태그가 없을 경우는 마지막 행 100번째 열에서 왼쪽으로 와서 걸리는[End(xlToLeft)] 열의 수(Column)가 end_Col이 됩니다.
cells함수는 행과 열을 이용해서 셀을 지정합니다. 다시 말해 cells(3,2)라면 3행 2열이므로 B3셀이 됩니다.
⑤ 기존 데이터 지움
' 기존 데이터 지움 Range(Cells(1, end_Col + 1), Cells(end_Row, 100)).ClearContents |
HTML 코드가 있는 범위, 끝열 다음 1행부터 마지막 행 100열까지 지웁니다.
⑥ HTML 코드 작성
ⓐ table, tbody 태그 엶
' 첫번째로 기록할 셀에 table, tbody 입력 Cells(1, end_Col + 1) = "<table style='border-collapse: collapse; width: 100%;' border='1' data-ke-align='alignLeft'><tbody>" |
HTML 태그로 표를 만들기 위해 table을 이용하는데
border-collapse: collapse; 중첩되지 않게 하고,
width: 100%; 너비는 100%,
border='1' 경계선은 실선으로 그리고,
data-ke-align='alignLeft' 왼쪽 정렬합니다.
그리고, tbody를 엽니다.
ⓑ for 반복문
'1행부터 끝행까지 반복 처리 For i = 1 To end_Row '1열부터 끝열까지 반복 처리 For j = 1 To end_Col 실행문 Next Next |
For 문은 변수의 시작값과 종료값을 지정해서 시작값에서 종료값까지 1씩 증가하면서 처리합니다. 증가값을 지정하려면 step 2 식으로 지정합니다.
For 문의 Next로 끝나고 그 안에 실행문을 넣습니다.
위 코드는 for 반복문을 이중으로 사용한 것으로 i가 변하는 동안 j도 변하면서 처리됩니다.
i가 1일 때 j가 1부터 end_Col까지 변하면서 처리되고, i가 1이 증가한 2가 되면 다시 j가 1부터 end_Col까지 변하면서 처리됩니다.
ⓒ if 조건문
' 셀에 데이터가 있는 경우 If Len(Cells(i, j)) > 0 Then 실행문1 else 실행문2 end if |
If 조건문으로 Len(Cells(i, j)) > 0, 셀에 데이터가 있는 경우와 없는 경우를 나눠서 처리합니다.
ⓓ select case 조건문
Select Case j '첫 열인 경우 Case 1: 실행문1 ' 끝 열인 경우 Case end_Col: 실행문2 ' 중간 열인 경우 Case Else: 실행문3 End Select |
Select문도 if문과 비슷하게 조건에 따라 처리하는 것인데,
case j로 j값에 따라서 처리를 합니다.
위 코드의 경우는 j가 1, 첫 열인경우, end_Col, 끝 열인 경우, Else, 중간 열인 경우로 나눠서 처리하고 있습니다.
[여기서부터는 1열일 경우의 처리]
' 세로 방향, 가로 방향이 모두 병합된 경우 If Cells(i, j).MergeArea.Rows.Count > 1 And Cells(i, j).MergeArea.Columns.Count > 1 Then '기존 값에 <tr> 넣고, <td 태그를 넣으면서, rowspan, colspan 값을 넣고, 처리 셀 값을 결합하고 td 태그 닫음 Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td rowspan=" & Cells(i, j).MergeArea.Rows.Count & _ " colspan=" & Cells(i, j).MergeArea.Columns.Count & ">" & Cells(i, j) & "</td>" |
셀 병합 여부 등을 판단하는 것은 https://lsw3210.tistory.com/153 글을 참고 바랍니다.
첫 열이므로 tr 태그를 넣고,
세로, 가로 모두 셀 병합된 경우는 td 태그 안에 rowspan과 colspan을 넣는데, rowspan 값은 Cells(i, j).MergeArea.Rows.Count로 구하고, colspan값은 Cells(i, j).MergeArea.Columns.Count로 구합니다.
또한 위에서 table 태그를 삽입했기 때문에 기존 데이터인 Cells(i, end_Col + j)와 결합(&)합니다.
코드가 길 경우는 _ 표시를 줄 뒤에 추가한 다음 다음 줄에 입력하면 한 줄로 인식됩니다.
' 세로 방향만 셀 병합인 경우 If Cells(i, j).MergeArea.Rows.Count > 1 Then '기존 값에 <tr> 넣고, <td 태그를 넣으면서, rowspan, colspan 값을 넣고, 처리 셀 값을 결합하고 td 태그 닫음 Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td rowspan=" & Cells(i, j).MergeArea.Rows.Count & ">" & Cells(i, j) & "</td>" |
세로 방향만 셀 병합이라면 위 코드에서 colspan 부분만 빼면 됩니다.
' 가로 방향만 셀 병합인 경우 ElseIf Cells(i, j).MergeArea.Columns.Count > 1 Then '기존 값에 <tr> 넣고, <td 태그를 넣으면서, colspan 값만 넣고, 처리 셀 값을 결합하고 td 태그 닫음 Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td colspan=" & Cells(i, j).MergeArea.Columns.Count & ">" & Cells(i, j) & "</td>" |
가로 방향만 셀 병합이라면 colspan 부분만 넣으면 됩니다.
' 셀 병합이 아닌 경우 Else '기존 값에 <tr> 연결하고, <td> 태그 열면서 처리 셀 값을 결합하고 td 태그 닫음 Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<tr><td>" & Cells(i, j) & "</td>" End If |
셀 병합이 아닌 경우는 단순히 tr과 td 태그 사이에 처리 셀의 값만 넣으면 됩니다.
기존에 입력된 값과 결합하는 것은 같습니다.
[여기서부터는 표의 끝 열일 경우의 처리]
' 끝 열인 경우 Case end_Col: ' 끝열이 병합이면서 값이 있을 수는 없으므로 셀 병합 조건 없음 ' 기존 값에 결합하면서 td 태그를 열고 처리 셀값을 더한 다음 td태그와 tr태그를 닫음 ' 1행보다 큰 경우만 처리 셀 값이 숫자인 경우 천 단위마다 콤마를 넣음 Cells(i, end_Col + j) = Cells(i, end_Col + j) & "<td>" & _ IIf(i > 1 And WorksheetFunction.IsNumber(Cells(i, j)), WorksheetFunction.Text(Cells(i, j), "#,##0"), Cells(i, j)) & "</td></tr>" |
끝 열인 경우 td 태그 안에 처리 셀값을 넣는 것을 같고 tr 태그를 닫아 한 줄을 마무리 합니다.
iif 함수는 VBA에서 사용하는 IF 함수로 if문과 구분하기 위해 i를 앞에 붙였습니다.
따라서, iif함수의 입력 방식은 iif(조건, 참일 경우 값, 거짓일 경우 값)으로 if함수와 동일합니다.
조건이 i > 1 And WorksheetFunction.IsNumber(Cells(i, j))인데, 처리 행 i가 1보다 크고, 처리 셀 값이 숫자일 경우란 의미입니다. 다시 말해 1행일 경우는 숫자이더라도 거짓이 됩니다.
WorksheetFunction.Text(Cells(i, j), "#,##0") : Text 함수가 VBA에 없기 때문에 워크시트의 함수인 Text를 사용해야 하며 이 때는 WorksheetFunction을 앞에 붙입니다.
Text(숫자, 숫자 형식)인데, 숫자 형식을 천단위마다 콤마를 넣고 0일 경우에도 0을 표시하도록 한 것입니다.
이하 If문안의 실행문은 위와 비슷하므로 설명을 생략하겠습니다.
ⓔ 가운데 정렬, 오른쪽 정렬
' 처리 셀이 가운데 정렬인 경우 가운데 정렬, 숫자인 경우는 오른쪽 정렬 If Cells(i, j).HorizontalAlignment = xlCenter Then Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), "<td", "<td style='text-align:center;' ") ElseIf WorksheetFunction.IsNumber(Cells(i, j)) Then Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), "<td", "<td style='text-align:right;' ") End If |
처리 셀이 가운데 정렬(맞춤)이라면 HTML 코드에도 가운데 정렬에 해당하는 style='text-align:center;' "를 넣는데 substitute(대체) 함수를 이용해서 기존의 <td 를 <td style='text-align:center;' 로 바꾸도록 했습니다.
또한 숫자인 경우에는 정렬은 안되어 있더라도
오른쪽 정렬하도록 했습니다.
ⓕ 처리 셀이 굵은 글자일 경우 글자 굵게
' 글자 굵게 If Cells(i, j).Font.Bold = True Then start_loc = InStr(Cells(i, end_Col + j), ">") end_loc = InStr(start_loc, Cells(i, end_Col + j), "<") Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1), "<b>" & Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1) & "</b>") End If |
글자 굵기가 참인 경우
처리된 셀의 값이 <td style='text-align:center;' >금액</td>이므로
>의 위치를 찾아 start_loc 변수에 대입하고,
start_loc 부터 <의 위치를 찾아 end_loc에 대입한 다음
mid함수를 이용해 >와 < 사이에 있는 문자, 위에서는 금액을 찾습니다.
그리고,substitue 함수를 이용해 앞뒤에 <b>와 </b>를 붙여서 글자를 굵게 만듭니다.
ⓖ 처리 셀이 들여쓰기된 경우 들여쓰기
' 들여쓰기 If Cells(i, j).IndentLevel > 0 Then start_loc = InStr(Cells(i, end_Col + j), ">") end_loc = InStr(start_loc, Cells(i, end_Col + j), "<") n_nbsp = "" For k = 1 To Cells(i, j).IndentLevel n_nbsp = n_nbsp & " " Next Cells(i, end_Col + j) = WorksheetFunction.Substitute(Cells(i, end_Col + j), Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1), n_nbsp & Mid(Cells(i, end_Col + j), start_loc + 1, end_loc - start_loc - 1)) End If |
들여쓰기가 된 경우는 indentLevel이 0보다 큰지 여부로 판단합니다.
마찬가지로 >와 <의 위치를 찾아 그 사이의 문자 앞에 , 공백을 indent_level만큼 삽입합니다.
ⓗ tbody, table 태그 닫음
' 마지막에 닫는 tbody와 table 태그 추가 Cells(end_Row, end_Col + j - 1) = Cells(end_Row, end_Col + j - 1) & "</tbody></table>" |
4. 프로그램 실행
위 코드를 개발도구 - 매크로 명령을 누른 후
매크로 이름 목록에서 make_table2를 더블 클릭하거나 클릭하고 실행 버튼을 눌러 실행하면
아래와 같이 왼쪽 표 오른쪽에 HTML 코드가 생성됩니다. G1셀부터 L12셀까지 마우스로 끌어서 범위를 선택하고 홈 탭에서 복사 명령을 누릅니다.
그리고, 본 화면 윗 부분에 있는 기본모드를 누른 다음 HTML을 선택합니다.
그리고, 맨 아래 줄에 붙여 넣으면 아래와 같이 되는데,
위 HTML을 누른 후 다시 기본모드를 눌러 본 화면으로 돌아오면 아래와 같이 엑셀 표가 삽입된 것을 알 수 있습니다.
구분 | 2021 | 2022 | |||
수량 | 금액 | 수량 | 금액 | ||
전체 | 3,807 | 1,903,500 | 3,865 | 1,932,500 | |
서울 | 소계 | 2,392 | 1,196,000 | 2,555 | 1,277,500 |
강남 | 617 | 308,500 | 650 | 325,000 | |
강동 | 458 | 229,000 | 335 | 167,500 | |
강서 | 783 | 391,500 | 967 | 483,500 | |
강북 | 534 | 267,000 | 603 | 301,500 | |
경기 | 소계 | 638 | 319,000 | 803 | 401,500 |
수원 | 275 | 137,500 | 668 | 334,000 | |
의정부 | 312 | 156,000 | 642 | 321,000 | |
제주도 | 777 | 388,500 | 507 | 253,500 |
'EXCEL - VBA' 카테고리의 다른 글
매크로 기록으로 엑셀 VBA의 내부를 보다 (0) | 2022.10.17 |
---|---|
엑셀의 유용함, 사용자 지정 함수 (2) | 2022.10.07 |
엑셀의 표를 티스토리의 표로 변환하는 매크로(3) - 셀 병합1 (1) | 2022.09.29 |
엑셀의 표를 티스토리의 표로 변환하는 매크로(2) - 가운데 정렬, 굵게 (0) | 2022.09.28 |
엑셀의 표를 티스토리의 표로 변환하는 매크로(1) - HTML 작성 (2) | 2022.09.22 |