1편을 여기서 확인하세요.
나. '홈 셀'
(1) 홈 셀의 의미
홈 셀을 병합된 셀 기준으로 보면 A1셀, 다시 말해 1행 1열이 됩니다.
따라서, Range("A1")이라고 해도 되고, Cells(1,1)이라고 해도 됩니다.
(2) 함수 만들기
반복된 동작은 Sub 프로시저로 처리하는데,
처리한 후 값을 반환받는 함수를 만들려면 Function 프로시저를 사용해야 합니다.
① 위 파일을 연 다음
개발 도구 - Visual Basic을 누릅니다.
그리고, 맨 아래에 Function이라고 쓰고, 함수명을 입력하는데,
GetHomeCell이라고 하겠습니다.
그리고 셀 주소를 인수로 받아야 하므로 인수명을 rng로 하고 형식을 Range로 지정합니다.
그러면 아래와 같이 됩니다.
Function GetHomeCell(rng As Range)
End Function
② 병합된 셀인지 아닌지에 따라 처리가 달라져야 하므로
if문을 사용합니다.
그러면 if문은 아래와 같이 됩니다.
If rng.MergeCells Then
Else
End If
입력받은 범위가 MergeCells, 병합된 셀이라면 True를 반환하고, 아니라면 False를 반환하므로 위와 같이 쓸 수 있고,
If rng.MergeCells = True Then
라고 = True를 붙일 필요가 없습니다.
③ 이제 if 문에 들어갈 구문은 반환할 값이 되는데,
엑셀은 특이하게 함수명을 반환할 값을 받기 위해 사용합니다.
따라서, 구문은
Gethomecell=rng.MergeArea.Range("A1")
이 됩니다.
먼저 병합된 영역을 구한 다음 A1셀의 값을 반환하는 것입니다.
셀 주소를 알아내려면 .Address라고 해야 하지만
값을 구할 때는 .Value라고 써야 하는데,
기본 속성인 Value는 생략가능하므로 위와 같이 되는 것입니다.
④ else 문에는 자기 셀의 값을 반환하도록 하면 됩니다.
Gethomecell=rng
(3) 함수 사용
엑셀 아이콘을 눌러 엑셀로 돌아간 다음
D3셀에 =하고 get까지 입력하면
GetHomeCell이 함수 목록에 표시됩니다.
탭 키를 눌러 함수명을 모두 입력하면 여느 괄호까지 채워지는데,
B3셀을 지정합니다.
그리고, 괄호를 닫고 * c3라고 입력하고 엔터 키를 누르면
2*1은 2가 구해지고,
D3셀의 채우기 핸들을 더블 클릭하면
병합된 셀의 경우 모두 병합된 셀의 값인 2가 곱해져서 4, 6, 8식으로 값이 반환되고,
D9셀의 경우는 B9셀이 비어 있기 때문에 0이 구해지는데,
B9셀에 3이라고 입력하면
3*7은 21이 구해집니다.
병합된 셀이면 첫 번째 셀 값에 값을 곱하고, 병합된 셀이 아니면 당연히 자기 셀 값에 값을 곱합니다.
이름을 셀병합2라고 수정했습니다.
'EXCEL - VBA' 카테고리의 다른 글
엑셀과 VBA의 Offset 함수가 다르다. (2) (0) | 2024.06.25 |
---|---|
데이터(레코드)별로 양식 시트에 기록하기 (0) | 2024.06.05 |
병합된 셀의 홈(A1) 셀 알아내기(1) - 셀 병합 관련 메소드 및 속성 (0) | 2024.05.29 |
차트의 마커(표식) 크기와 색상 변경하기 (0) | 2024.05.28 |
소재지, 특지구분, 본번, 부번 합치기(2) - VBA (0) | 2024.05.23 |