기초방에서 올린 문제 #1
초심으로 돌아가기 위한 프로젝트 #1 : 빈셀에 규칙을 이용하여 채우는 문제
왼쪽에 있는 문제는 엑셀 상에서 F5 > alt + s > alt + k를 누르고 바로 ' = 바로 윗셀 +1 '을 하면 된다.
하지만 오른쪽 문제는 좀 생각을 해야한다.
엑사남님은
Sub aaaaa()
'''' 선택 범위 빈셀에 함수 입력하기
Range("B4:B23").SpecialCells(xlCellTypeBlanks) = "=B5+1"
Range("D4:I23").SpecialCells(xlCellTypeBlanks) = "=COLUMN()-3+((ROW()-4)*6)"
End Sub
이렇게 풀어버리셨다...
순간 알고리즘 문제를 내야하나 하고 욱했다..ㅋㅋㅋ
이번 기초방 문제에 기존에 참여가 힘드셨던 많은 분들이 함께 해주시고 본인들의 코드를 오픈하였다.
그 코드들을 본인은 잔인하게 박제하려고 한다.
훗날 이 프로젝트가 끝날때 그 분들이 얼마나 달라졌는지 오늘 이 박제된 본인들의 코드들을 보고 성장의 척도를
갸늠하시길 바란다.
그리고 여기 또 하나의 실력자인 잔머리Jr님 코드도 올린다.
손수 한땀 한땀 주석을 달아주셨다. 잔머리JR님은 블로그도 운영중이신데, 그 구성과 글솜씨가 일품이어서 링크를 첨부한다.
https://blog.naver.com/mrdjrblog
코딩하는 룡룡이 : 네이버 블로그
- 배움의 흔적을 남기는 소중한 공간. - 매크로 제작 문의https://open.kakao.com/o/sNboYsIc
blog.naver.com
솔직히 주석다는게 귀찮고 힘들다.
물론 유지 보수를 위해서는 주석이 필수인데 실무에서는 크게 크게 주석을 달고 그밑에 코드를 진행하기에 하나하나 주석을 다는건 코드 짜는것 보다 더 힘들 수 있다.
잔머리JR님께 다시한번 감사를 표한다.
오늘 공개할 코드는 딱총님의 코드로 하려고 한다.
숙제를 낸 본인의 의도와 90%이상 일치한다.
코드 진행은 이렇다.
왼쪽 영역과 오른쪽 영역을 Union으로 묶어버리면 보기에는 하나의 영역으로 보이지만
VBA 에서는 영역을 분리해서 인식하게 된다.
set rngAll = Union(왼쪽, 오른쪽)
이렇게 하였을때 rngAll.areas(1) / rngAll.areas(2) 로 분리가 된다.
숫자가 1부터 +1 씩 진행되기에 Areas의 속성값인 Count로 Area의 크기를 확인하여 빈셀 여부를 판단하여
빈셀에 +1씩 증가시킨 값을 넣어주면 된다.
참 기분이 좋다..이런 코드들을 보고 있으면...
앞으로도 많은 참여 부탁드립니다.
Option Explicit
Sub 빈셀채우기()
Dim rngAll As Range: Set rngAll = Union([b4:b23], [d4:i23])
Dim rngA As Range
Dim rngX As Range
Dim i&, j&
For Each rngA In rngAll.Areas '= 병합 Areas 순환
For Each rngX In rngA
셀움직임 rngX
i = i + 1 '= 숫자를 +1 증가
If IsEmpty(rngX) Then
rngX = i '= 값이 비어 있으면 증가된 i값을 넣어라
rngX.Font.Color = vbBlack
End If
Next rngX
i = 0 '= i값 초기화
Next rngA
End Sub
Function 셀움직임(rngX As Range)
Dim j&
'= 해당코드는 셀의 움직임을 보이기 위한 임시코드
For j = 1 To 500
rngX.Select
Next j
End Function
'VBA' 카테고리의 다른 글
[VBA] 네이버 영어사전 LV4.(댓글 요청) (5) | 2022.12.31 |
---|---|
[셀레니움]#3_네이버날씨 크롤링 (0) | 2022.12.27 |
[VBA] 사용자정렬(ArrayList)_feat(평택_호텔관리_딱총) (1) | 2022.12.25 |
[VBA] 사용자 지정 정렬을 해보자 (0) | 2022.12.22 |
[VBA] 다중 Collection으로 단어조합하기 (5) | 2022.12.21 |
댓글