엑셀로 풀어가는 세상 (116)
엑셀 VBA #06 / 셀 범위 선택하기_1 [VBA]
반응형

엑셀 VBA #06 / 셀 범위 선택하기_1 [VBA]

1. 기본
Range("A1:D10").Select    또는
Range("A1",Cells(Rows.Count,"D").End(xlup)).Select

VBA 셀 범위 선택


2. 응용
D열의 마지막 셀의 값이 없을 때, 위 1의 방법을 적용하면 아래 그림처럼 나온다.

즉 10행의 데이타가 누락된 셀 범위가 설정된다.

 

이를 해결할 수 있는 방법은 아래 코드를 활용하는 것이다.

2.1) Offset 적용

Range("A1",Cells(Rows.Count,"C").End(xlup).Offset(,1)).Select


2.2)  A열의 행 수를 활용
Dim c As Long
c=Range("A1").End(xlDown).Row
Range("A1:D"&c).Select

2.3) CurrentRegion 적용

Range("A1").CurrentRegion.Select

2.4) UsedRange 적용

worksheets(1).UsedRange.Select

주의할 것은 UsedRange적용시 worksheets가 반드시 들어가야 한다!!!!!!

그리고 장점은 비연속적 데이타 테이블에도 사용할 수 있다는 것이다(아래 그림 참고).

 

cf, Worksheets(1) vs Sheets(1)의 차이점

Sheets가 더 큰 개념.
Worksheets는 일반적인 데이터가 입력되어 있는 시트를 의미!
Sheets는 일반적 시트에 차트 시트(차트가 시트 전체에 full로 그려진 시트)와 같이 특별한 시트까지 포함

 

 

3. 핵심정리

  3.1. 연속범위_1
      Range("A1").CurrentRegion

  3.2. 연속범위_2
      Range("A1",Cells(Rows.Count,"D").End(xlup))
      Range("A1",Cells(Rows.Count,"C").End(xlup).Offset(,1))

 

 

vba#06.xlsm
0.02MB

 

 

 

https://www.youtube.com/watch?v=qEDUKVAid-Y&t=355s

반응형
  Comments,     Trackbacks
엑셀 VBA #05 / 셀 하나 선택하기_4 [VBA]-Offset
반응형

엑셀 VBA #05 / 셀 하나 선택하기_4 [VBA]

1. 목적

OffSet속성 활용하여 셀 하나 선택하기
- 구조 : 기준셀. Offset(행,열)
- 의미 : 기준셀에서부터 주어진 행렬 만큼 이동하기

2. 사용례
- Range("A1").Offset(1,1).Select

   A1셀을 기준으로 1행 1열 만큼 이동하기


- Range("B5").Offset(0,2).Select 또는
   Range("B5").Offset(,2).Select    '0은 생략가능함


- Range("B5").Offset(2,0).Select 또는
   Range("B5").Offset(2).Select    ',0은 생략가능함

3. 응용

특정열(ex,C열)의 마지막 데이타값 있는 셀의 아래 셀 선택하기
1단계 : 마지막 테이타값 있는 셀 찾기
=> Cells(Rows.Count,"C").end(xlup)
2단계 : 그 셀의 아래 셀
=> Offset(1,0) 혹은 Offset(1)


- Cells(Rows.Count,"C").end(xlup).Offset(1,0).select 또는
    Cells(Rows.Count,"C").end(3).Offset(1).select 또는

    Cells(Rows.Count,"C").end(3)(2).select

 

4. 코딩연습

 

'코딩 방법1

Sub offset연습2()

Dim c As Range

For Each c In Range("C1:C10")
      If c >= 116 Then
            Cells(Rows.Count, "f").End(3)(2) = c
      End If
Next
End Sub

위 코드에서 Range("C1:C10")을 변수로 설정하여 다음과 같이 코딩할 수 있다.

Sub offset연습231229()

Dim rngD As Range
Dim c As Range

Set rngD = Range("c1", Cells(Rows.Count, "c").End(xlUp))

For Each c In rngD
      If c >= 116 Then
            Cells(Rows.Count, "f").End(3)(2) = c
      End If
Next

End Sub

 

결과값

5. 핵심정리

데이터를 누적해서 쌓을 때
Cells(Rows.Count,"a").End(Xlup).Offset(1)
= Cells(Rows.Count,"a").End(3)Offset(2)

vba#05.xlsm
0.02MB

 

 

 

엑셀 VBA #07 / 셀 범위 선택하기_2 [VBA] -Resize & Offset


https://www.youtube.com/watch?v=vWWwHWvrzTE&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=5

 

 

반응형
  Comments,     Trackbacks
엑셀 VBA #04 / 셀 하나 선택하기_3[VBA] - Entire속성 이용
반응형

엑셀 VBA #04 / 셀 하나 선택하기_3[VBA]

1. 전체행 or 전체열 선택하기
Columns(2).Select   또는
Columns("B").Select

Rows(4).Select

2. 특정셀이 포함된 전체행 or 전체열 선택하기
Range("A1").EntireColumn.Select
Range("C4").EntireColumn.Select
Range("B6").EntireRow.select

3. 특정구간(ex,표-A1:D10)이 포함된 전체행 or 전체열 선택하기
Dim rng As Range
Set rng = Range("A1:D10")      'rng는 개체변수이므로 반드시 Set문으로 처리
rng.EntireRow.Select


4. 특정구간(ex,표-A1:??)이 포함된 전체행 or 전체열 선택하기
Dim rng As Range
Dim rn As Long
Set rng = Range("A1"D10")      'rng는 개체변수이므로 반드시 Set문으로 처리

rn = rng.EntireRow.Select

5. 핵심정리

특정범위의 행의 수 카운트
변수 = rng.Rows.Count


https://www.youtube.com/watch?v=nANTxEjUdUQ&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=4

반응형
  Comments,     Trackbacks
엑셀 VBA #03 / 셀 하나 선택하기_2[VBA] - End속성 이용
반응형

엑셀 VBA #03 / 셀 하나 선택하기_2[VBA]

1. 특정열의 마지막 셀 (중간 빈 셀O) 선택하기
Cells(rows.count,"A").End(xlup).Select

2.특정행의 마지막 셀(중간 빈 셀O) 선택하기
Cells(4,Columns.Count).End(xlToLeft).Select

cf,

1. 특정열의 마지막 셀 (중간 빈 셀O) 번호 찾기

Cells(4, Columns.Count).End(xlToLeft).Column

 

특정영역(rng)의 열 갯수 찾기 

rng.Columns.Count

 

 

2.특정행의 마지막 셀(중간 빈 셀O) 번호 찾기

Cells(Rows.Count, "A").End(xlUp).Row

 특정영역(rng)의 행의 갯수 찾기

rng.Rows.Count 

 

 

 

엑셀 VBA #07 / 셀 범위 선택하기_2 [VBA] -Resize & Offset(마지막 열번호 찾기)

 

https://www.youtube.com/watch?v=P9j8CfA93LM&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=3



반응형
  Comments,     Trackbacks
엑셀 VBA #02 / 셀 하나 선택하기_1[VBA]
반응형

엑셀 VBA #02 / 셀 하나 선택하기_1[VBA]

1. A1셀 선택하기
Range("A1").Select   또는
Cells(1,1).Select

2. AZ1셀 선택하기
Range("AZ1").Select   또는
Cells(1,52).Select    또는
Cells(1,"AZ").Select

3. 변수를 이용하여 A7셀 선택하기
Dim cn As Long
cn=7

Range("A" & cn).Select 또는
Cells(cn,"A").Select

4. 기타
Cells로 셀 선택시 자동구성원목록이 제공되지 않는다.
이를 땐 Cells를 객체변수로 받으면 된다.
객체변수는 Set문으로 받아야 한다.
Dim c As Range
Set c = Cells(7, "A")

c.Select

 

5. 핵심정리

1).특정열의 열번호 알아내기
  Ctrl + G(직접 실행창)--> '?Range("az1").Column'


2). Cells를 직관적으로 쓰기
  Cells(1,"az")

 

https://www.youtube.com/watch?v=j14X81XfdOU&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=2

 

 

 

반응형
  Comments,     Trackbacks
vba - 셀 범위 선택
반응형

원본 자료

방법1 : Range("A1:D10").Select

방법2 : Range("A1).CurrentRegion.Select

방법3 : Range("A1", Cells(Rows.Count, "D").End(xlUp)).Select

방법1 & 2의 결과 동일

 

 

 

만약 D10셀이 빈셀이라면... 위 방법1,2,3은 제대로 작동될까.....

방법1,2는 이상무, 그러나 방법3는 엉뚱한 결과가 나온다. 아래 그림처럼.

 

 

그래서 해결방법은.........?????

아래의 4번 혹은 5번을 적용하면 된다.

 

방법4 : Range("A1", Cells(Rows.Count, "C").End(xlUp).Offset(, 1)).Select

방법5 : Dim c As Long
           c = Range("A1").End(xlDown).Rows
           Range("A1:D" & c).Select

 

 

반응형
  Comments,     Trackbacks
vba - intersect, event프로시져
반응형

A2:D11범위에 숫자만 입력할 수 있도록 하며, 만약 문자 입력된 경우에는 메세지박스로 안내하는 기능.

 

VBA창에서 해당 시트(test시트)를 더블클릭

 

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("A:D")) Is Nothing Then
    If Target.Row > 1 And Target.Row < 12 Then
        If VBA.IsNumeric(Target) Then
        Else
            MsgBox "숫자로 입력하세요"
            Target = ""
            Target.Select
        End If
    End If
End If

End Sub

 

 

엑셀 VBA #14 / 셀 범위 선택하기_9 [VBA] - Intersect 실무예제

 

출처 : 엑셀디자인 유튜버

연관강좌 : 엑셀 VBA #86 / 이벤트프로시저+EnableEvents 활용하기 [VBA]

                 엑셀 VBA #85 / 이벤트 프로시저와 find 메서드 활용하기 [VBA]

반응형
  Comments,     Trackbacks
vba - resize2
반응형

[Sample Code]

 

Sub Resize_test()

    Dim rngT As Range
    Dim cn As Long
    
    Set rngT = Range("A1").CurrentRegion
   
    cn = Cells(1, Columns.Count).End(xlToLeft).Column
    rngT.Offset(1).Resize(rngT.Rows.Count - 1, cn).Select

End Sub


해석1.

   cn = Cells(1, Columns.Count).End(xlToLeft).Column

1행의 마지막 데이타 셀까지의 열 개수 계산

 

해석2.

    rngT.Offset(1).Resize(rngT.Rows.Count - 1, cn).Select

머릿글 행을 제외한 데이타 데이블 전체 선택


용도

행 또는 열방향으로 데이타가 추가되더라도 테이블 전체를 유동적으로 선택할 수 있음

반응형
  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
TODAY TOTAL