Daily Life of BlueRose

컴퓨터 & 코딩 공부/엑셀 & VBA

엑셀 VBA 기본기능 정리 - Cells/Range 관련 속성 및 메서드

푸른로즈 2023. 7. 6. 00:16
728x90

 

Cells/Range 관련 속성 및 메서드

 

    • 간단한 메서드
      • 메모삽입 : AddComment(Text)
      • 셀내용물 삭제 : ClearContents
      • 셀 배경색상 수정 : interior.color = RGB(255, 255, 255)
    • 셀 테두리 설정 : Borders
      • 기본형 : Range.Borders(Index).LineStyle = xlNone
      • 특징
        • Range개체의 테두리를 일일이 설정할 때 사용
        • Index에는 xlEdgeTop, xlEdgeBottom, xlEdgeLeft, xlEdgeRight와 xlDiagonalDown, xlDiagonalUp 그리고 xlInsideHorizontal, xlInsideVertical이 있음
        • 하위 속성으로 LineStyle, Weight, Color가 있으며, 각각 Index를 가짐
        • 외곽선을 일괄지정할 때에는 Borders 대신 BorderAround를 사용하면 된다. 하위 속성은 동일함

 

    • 정렬 : Sort
      • 기본형 : rng.Sort rng(1,1)[정렬기준1]. xlDescending[오름/내림], rng(1,2)[정렬기준2], [Type값, 피벗테이블과 관련된 부분, 대부분 생략], xlAscending[오름/내림], header :=xlNo[머릿글여부], Orientation:=xLlSortColumns[정렬의 방향, 일반적으로 열(column)방향정렬]
      • 주의사항 : Sheets("시트명").Sort.SortField.Clear를 선행하여, 기존기준을 제거후 실행한다.
      • 활용예시1 (가로로 데이터가 나오는 표에 대하여 정렬하기)
Sheets("시트명").Sort.SortField.Clear                       'Sort전, 기존 Sort기준 제거
Dim rng As Range                                            '범위개체 rng선언
	Set rng = Range("A1").CurrentRegion                         'CurrentRegion을 rng로 지정
	Set rng = rng.Offset(, 1).Resize(, rng.Columns.Count - 1)   '열머릿글을 범위에서 제외
rng.Sort rng(3, 1), xlAscedinng, Orientation:=xlSortRows    '열방향 sort 진행

 

      • 활용예시2 (가로로 데이터가 나오는 표 중, 각 항목별로 정렬이 필요한 경우)

Sheets("시트명").Sort.SortField.Clear                   				'Sort전, 기존 Sort기준 제거
Dim c As Range, rng As Range
For Each c In Range("a1").CurrentRegion.Resize(, 1)     				'a1셀의 CurrentRegion 1열 대상 순회    Set rng = Range(c.Offset(, 1), Cells(c.Row, Columns.Count).End(xlToLeft))		'순회별로 열머릿값 제외한 범위 선택
    if rng.count > 1 then							'1열 이상의 데이터만 Sort 시행
    	rng.Sort Cells(c.Row, 1), xlAscending, Header:=xlNo, Orientation:=xlSortRows	'순회별로 첫행을 기준으로 정렬시행
    End if                                          				      	'조건 : 머리값 없음 / 방향 : 가로
Next
    • 행 삽입
      • 기본형 : Selection.Insert Shift:=xlDown
      • 활용예시 : 제목줄 제외하고 한칸씩 삽입하기

Dim i As Long, Lr As Long
    i = 0
    Lr = Cells(Rows.Count, "a").End(xlUp).Row
For i = Lr To 2 Step –1
    If i <> Lr Then
        Cells(i, "a").Offset(1).EntireRow.Insert shift:=xlDown
    End If
Next

 

  • 행 삭제
    • 기본형 : Selection.delete shift:=xlDown
    • 유의사항 : 삭제하려는 범위의 row, column에 대하여, row<=Column인 경우 xlUp이 적용되며, 나머지의 경우에는 xlShiftToLeft가 적용된다. 단, 맨 아랫줄은 반드시 xlShiftToLeft가 적용된다.
    • 활용형
      • 방법1 : 각 행을 내려가며 한 행씩 삭제
      • 방법2 : 변수 1개에 삭제할 범위를 할당한 후 한번에 선택, 삭제
Dim r As Range              				'For문을 위한 임시변수 r
Dim i As Long              		
Dim uSelected As Range          			'현재 선택된 셀을 저장할 변수
    Set uSelected = ActiveCell        			
Dim uSelected_Lr As Range           			'선택된 셀이 소속된 행의 가장 마지막 셀(열)을 저장할 변수
    Set uSelected_Lr = Cells(Rows.Count, uSelected.Column).End(xlUp)  
Dim uOffset As Long         				'어디서 지정하든 동일한 크기를 나타내도록 offset 마련
    uOffset = uSelected.CurrentRegion.Column - uSelected.Column
For i = 2 To uSelected_Lr.Row      			'i의 순환범위는 선택셀 이후 ~ 선택열의 가장 마지막 셀
    If Len(Cells(i, uSelected_Lr.Column)) < 1 Then   	'조건 : 길이가 1미만인 셀
        If r Is Nothing Then            			'r이 nothing인 경우, 순환중인 셀을 삽입
            Set r = Cells(i, uSelected_Lr.Column + uOffset).Resize(, uSelected.CurrentRegion.Columns.Count)
        Else   					'r에 이미 내용물이 있다면 순환중인 셀을 union 처리
            Set r = Union(r, Cells(it, uSelected_Lr.Column + uOffset).Resize(, uSelected.CurrentRegion.Columns.Count))
        End If
    End If
Next
If Not r Is Nothing Then r.Delete       			'r이 nothing이 아닌 경우, 삭제 실행
반응형