티스토리 뷰

VBA

[Excel][VBA] 워크시트의 범위 다루기

어린왕자1234 2021. 11. 25. 10:31
범위 복사하기
복사대상.Copy 붙임위치

# 붙임대상의 왼쪽 위 모서리에 붙임
   -  범위가 달라도 가능
Sub CopyRang()

    Dim rng1 As Range, rng2 As Range
    
    Set rng1 = Workbooks("통합 문서1").Worksheets("Sheet1").[A1:A10]
    Set rng2 = Workbooks("통합 문서2").Worksheets("Sheet1").[A1]
    rng1.Copy rng2
    
End Sub
범위 옮기기
자르기대상.Copy 붙임위치
# 복사와 동일 형식
    rng1.Cut rng2
크기를 모르는 범위 지정
(현재셀이 있는 범위)
Range개체.CurrentRegion
Range(ActiveCell, ActiveCell.End(방향상수))
    rng1.CurrentRegion.Cut rng2
    Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Select

셀에 입력 값을 사용자로 부터 입력 받기 
InputBox(
입력안내문)
    Range("A1").Value = InputBox("Enter the value")
다음에 있는 빈 셀에 값 입력하기
Cells(Rows.Count, 1)  'A1048576
    NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
    Cells(NextRow, 1) = "입력값"
사용자로부터 범위 입력받기
Set
 UserRange = Application.InputBox( _
        Prompt:=Prompt, _
        Title:=Title, _
        Default:=ActiveCell.Address,  _
        Type:=8)

Set UserRange = Range(InputBox(Prompt))













Application.InputBox

https://office-automation.tistory.com/23

Sub GetUserRange()
    Dim UserRange As Range
 
    Prompt = "Select a range for the random numbers."
    Title = "Select a range"

'   Display the Input Box
    On Error Resume Next
    Set UserRange = Application.InputBox( _
        Prompt:=Prompt, _
        Title:=Title, _
        Default:=ActiveCell.Address, _
        Type:=8) 'Range selection
         ' 0: 수식 / 1:숫자 / 2:텍스트 / 8:범위
    On Error GoTo 0

'   Was the Input Box canceled?
    If UserRange Is Nothing Then
        MsgBox "Canceled."
    Else
        UserRange.Formula = "=RAND()"
    End If
End Sub
선택된 셀의 개수 알아내기
   Count속성 :
long 자료형
   CoungLarge 속성:
Double 자료형
    Selection.Count          ' 선택영역 셀 수
    Range("data").Count      ' data로 이름지정된 영역의 셀 수
    Selection.Rows.Count     ' 선택영역 행 수
    Selection.Columns.Count  ' 선택영역 열 수
    
    AllCells = Cells.CountLarge
    Debug.Print Format(AllCells, "#,##0")  ' =16384*1048576
선택 범위의 유형 알아내기

하나의
연속된범위
하나 또는 그 이상의 전체 열
하나 또는 그 이상의 전체 행
전체 워크시트
다중 영역 선택(위의 경우의 조합)
    NumAreas = Selection.Areas.Count
    Set UnionRange = Selection.Areas(1)





Public Function AreaType(RangeArea As Range) As String
'   Returns the type of a range in an area
    Select Case True
        Case RangeArea.Cells.CountLarge = 1
            AreaType = "Cell"
        Case RangeArea.CountLarge = Cells.CountLarge
            AreaType = "Worksheet"
        Case RangeArea.Rows.Count = Cells.Rows.Count
            AreaType = "Column"
        Case RangeArea.Columns.Count = Cells.Columns.Count
            AreaType = "Row"
        Case Else
            AreaType = "Block"
    End Select
End Function
 선택범위 효과적으로 처리하기
Application.Intersect(SelectionActiveSheet.UsedRange)

Range개체.SpecialCells (TypeValue)
Selection.SpecialCells(xlFormulas, xlNumbers)
Selection.SpecialCells(xlConstants, xlNumbers)
Sub ColorNegative2()
'   Makes negative cells red
    Dim WorkRange As Range
    Dim cell As Range
    If TypeName(Selection) <> "Range" Then Exit Sub
    Application.ScreenUpdating = False
    Set WorkRange = Application.Intersect(SelectionActiveSheet.UsedRange)
    For Each cell In WorkRange
        If cell.Value < 0 Then
            cell.Interior.Color = RGB(255, 0, 0)
        Else
            cell.Interior.Color = xlNone
        End If
    Next cell
End Sub