IT 관련/엑셀

엑셀 VBA 위치함수 (range, 찾기, offset)

과정에서 오는 행복 2013. 11. 21. 17:26

VBA의 오른쪽 상단의 '질문을 입력하세요' 란에 입력하세요

 Range 개체 구성원
 Worksheet 개체 구성원

[Range 개체]
 - 셀 하나
   Range("A1")     =    Cells(1, 1) - (행번호, 열번호)        =   Cells(1,  "A")
 
 - 연속된 범위
   Range("A1:A10")     =  Range("A1", "A10")  - (시작셀, 끝셀)

- 정의된 이름 범위
  Range("data")
  지정된 범위로 영역을 잡을 경우, 셀이 이동하면 영역이 변경됨
  따라서 해당열에 이름을 주워 관리하는 것이 좋음
  ex) A1은 start로  H10을 end로 하면
       Range("start", "end")

- 다른 워크시트의 범위
 Worksheets("Sheet2").Range("A1:A10")  - 워크시트의 이름이 변경되면 에러가 발생
 Sheet1.Range("A1:A10")  - Sheet1은 VBA의 코드 값임 (or Sheet1을 개체변수로 지정하여 사용) - 코드값은 변하지 않음

[표 범위]
 표범위 전체 : Ctrl + A
 Range("A1").CurrentRegion
 Range("A1").CurrentRegion.Columns(3) : 3번째 열을 지정

 표범위 : Ctrl + A
 Range("A1", Cells(Rows.count, "A").End(xlUp)) - A1부터 A행의 마지막 데이터가 있는 위치 -  .End(xlUp) - Ctrl + 위방향키

For Each문에서 입력된 데이터를 가져올 수 있음


Offset : 지정된 수만큼 이동
 ex)
    Dim nowWhere as Range
    nowWhere = Cells(Rows.Count, "A").End(xlUp). Offset(1, 0)
    with nowWhere
        .offset(0, 0).Value = 값1
       .offset(0, 1).Value = 값2
       .offset(0, 2).Value = 값3
    End with 

결과)
A     B     C
값1  값2  값3
값1  값2  값3
값1  값2  값3
 최종값에서 아래로 해당값이 계속 추가 됨 (가장 많이 사용되는 스크립트)
 
Resize : 지정된 수만큼 선택영역 확장


[복사]
 Range("B1:B10").Copy Range("B12")
 B12셀에 B1:B10을 복사해서 붙여넣어라


[찾기] - Ctrl + F
G열의 값이 '단종'인 것을 찾아서 F열의 값을 0으로 바꿔주는 예제

Sub 단종처리()
    Dim G열 As Range
    Dim 찾은셀 As Range
    Dim 첫번째셀주소 As String
    
    // G열이 비어있기 때문에 값이 다 들어있는 F열의 갯수를 가져옴
    Set G열 = Range("G2", Cells(Rows.Count, "F").End(xlUp).Offset(,1))
    // 값이 단종인 것을 찾음
    Set 찾은셀 = G열.Find(What:="단종")

    // 단종인 값이 없을 경우
    If Not 찾은셀 Is Nothing Then        
        첫번째셀주소 = 찾은셀.Address
        Do            
            찾은셀.Offset(0, -1).Value = 0
            Set 찾은셀 = G열.FindNext(찾은셀)
        // 첫번째 셀주소이면, 다시 처음으로 온 것이기 때문에 끝냄
        Loop Until 찾은셀 Is Nothing Or 찾은셀.Address = 첫번째셀주소
    End If
End Sub

[예제]


반응형