분류 전체보기 (1370)
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
vba - resize1
반응형

형식(문법) : 기준개체.Resize(행,열)

 

ex)

   기준개체.Resize(2,3)

 

 

   기준개체.Resize(,3).Select
= 기준개체.Resize(기준개체의 행 갯수 전체,3).Select

 


[Sample Code]

Sub Resize_test()

    Dim rngT As Range
    Set rngT = Range("A1").CurrentRegion

    rngT.Resize(2, 3).Select

End Sub


rngT.Resize(2, 3).Select


rngT.Resize(, 3).Select


rngT.Resize(rngT.Rows.Count, 3).Select


rngT.Resize(, 3).Select  = rngT.Resize(rngT.Rows.Count, 3).Select

반응형
  Comments,     Trackbacks
vba - Scripting.Dictionary
반응형

 

1번 코딩방식 : Late Binding

 

   Dim Dict As Object
   Set Dict = CreateOject("Scripting.Dictionary")

 

위 문장을 아래의 한 문장으로 줄일 수 있다.

 

2번 코딩방식 : Early Binding

   Dim Dict  As New Scripting.Dictionary

https://raymond.tistory.com/2323

 

 

 

반응형
  Comments,     Trackbacks
엑셀 - 두 가지 조건 만족하는 셀의 개수 계산
반응형

엑셀함수에서 두 가지 조건을 만족하는 셀의 개수를 계산할 때, Countif함수를 사용한다.

그런데 조건되는 특정열의 서식이 숫자와 텍스트가 혼용된 경우에는어떻게 할까 고민했다.

Countblank함수는 조건을 둘 수 없었다.

나의 주무기! 인터넷 검색!!!!!!!! 드디어 찾았다.

포인트는 "<>"&"" 이네!

 

출처 : https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020101&docId=438972818


VBA적용시 코드

 

 

Sub test()

Dim i As Integer

  For i = 1 To 5
      Range("G" & 1 + i) = WorksheetFunction.CountIfs([$A$2:$A$11], Range("E" & 1 + i), [$C$2:$C$11], "<>" & "")
 Next

End Sub

 

 

반응형

'엑셀로 풀어가는 세상' 카테고리의 다른 글

vba - intersect, event프로시져  (0) 2023.09.01
vba - resize2  (0) 2023.08.31
vba - resize1  (0) 2023.08.31
vba - Scripting.Dictionary  (0) 2023.08.30
vba - 고유목록 추출(New Collection,Add)  (0) 2023.08.22
vba - Array(배열)1  (0) 2023.08.22
VBA - 중복값 제거(New Collection)  (0) 2023.08.21
엑셀 - 시트이름을 셀에 불러오기  (0) 2022.09.21
  Comments,     Trackbacks
vba - 고유목록 추출(New Collection,Add)
반응형

고유목록 추출

A열의 목록에서 '고유목록'을 추출하여,
B열에 있는 값들 중 '고유목록'에 해당하는 값들의 합계를 구해서 넣는 것으로
SUMIF함수를 이용하여 값을 구할 수 있다.

고유목록은 New Collection객체를 이용하여 추출할 수 있어서 For Each ~ Next문으로 Add매서드를 이용하여 구할 수 있다.
(New Collection객체는 중복된 항목을 제거하고 고유의 항목만 가지게 하는 객체로서
고유한 목록을 추가해 주는 Add매서드를 반드시 이용하여 작업해야 함)

New Collection객체의 변수 sj에 Add매서드를 이용하여, 공백제거된 문자화된 고유의 목록만 저장
sj.Add Trim(r),CStr(Trim(r))

'-----코드 시작
Dim sj As New Collection
Dim r As Range
Dim k As Long

On Error Resume Next   '중복된 값이 있으면 에러를 발생시킴으로 에러가 나면 그냥 넘어가라
For Each r in Range("A2:A21")
sj.Add Trim(r),CStr(Trim(r))    '고유항목만 뽑아서 공백을 제거하고, 텍스트화
Next
On Error Goto
'-----코드 끝



sj에 저장된 고유의 목록을 k변수의 순서에 따라 For문에 넣어 반복하고, 목록과 값이 들어갈 셀에 넣어주면 됨
(합계를 구하는 함수는 sumif을 이용하여 구해서 넣어줌)


'----코드 시작
For k = 1 to sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Application.Sumif(Range("A2:A21"),sj(k),Range("B2:B21")
Next
'-----코드 끝





Range("A2:A21")와 Range("B2:B21")을 변수처리하여 문장을 조금 더 간단하게 만들어 주어도 될 것 같네요

'----코드 시작-
Dim tk As Range, kr As Range
Set tk = Range("A2:A21")
Set kr = Range("B2:B21")

For k = 1 To sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Applcation.Sumif(tk,sj(k),kr)
Next
'-----코드 끝



https://blog.naver.com/romyok12/222930690848



반응형
  Comments,     Trackbacks
vba - Array(배열)1
반응형

Array(배열)1

[개념]
1개의 변수에 여러 개의 값을 저장하여 활용할 수 있는 자료 구조
Array미적용시
5개 과목(국어,영어,수학,과학,체육)이 있는데, 과목명을 변수에 담아봅시다.
과목이 모두 5개이고 과목명이 문자이니까...
5개의 문자변수를 정의해야 하겠죠
 Dim Subject1 As String
 Dim Subject2 As String
 ....
 ....
 Dim Subject5 As String
 Subject1 = "국어"
 ....
 ....
 Subject5 = "체육"

Array적용시
 Dim Subject(1 to 5) As String
 Subject(1) = "국어"
 ....
 ....
 Subject(5) = "체육"

[Array변수를 정의하는 방법]
방식1 : 
Dim 배열변수(배열크기) As 변수타입
Dim MayArray(5) As String


방식2 :
Dim 배열변수(시작번호 to 끝번호) As 변수타입
Dim MyArray(1 to 5) As String


[Array변수에 값을 저장하는 방법]
방식1(Dim MayArray(5) As String)로 한 경우 :
MyArray(0) = "국어"    '처음 시작번호는 0,  1이 아님!!!!
....
MyArray(4) = "체육"

방식2(Dim MyArray(1 to 5) As String)로 한 경우 :
MyArray(1) = "국어"     '처음 시작번호는 내가 지정한 1!!!
....
MyArray(5) = "체육"


[Array변수에 저장된 값을 불러오는 방법]
Option Explicit 
Sub 배열값 불러오기()
  Dim MyArray(5) As String
         MyArray(0) = "국어"
         MyArray(1) = "영어"
         MyArray(2) = "수학"
         MyArray(3) = "과학"
         MyArray(4) = "체육"
         MsgBox MyArray(1)     '영어가 출력됨
End Sub

 

https://blog.naver.com/mydarlingharbour/223007267848

반응형
  Comments,     Trackbacks
너, 너무 잘 하려고 애쓰지 마라
반응형

<너, 너무 잘 하려고 애쓰지 마라>

너, 너무 잘 하려고 애쓰지 마라
오늘 일은 오늘의 일로 충분했다
조금쯤 모자라거나 비뚤어진 구석이 있다면
내일 다시 하거나 내일 다시 고쳐서 하면 된다

조그만 성공도 성공이다
그만큼에서 그치거나 만족하라는 말이 아니고
작은 성공을 슬퍼하거나
그것을 빌미 삼아 스스로를 나무라거나
힘들게 하지 말라는 말이다

나는 오늘도 많은 일들과 만났고
견딜 수 없는 일들까지 견뎠다
나름대로 최선을 다한 셈이다
그렇다면 나 자신을 오히려 칭찬해주고
보듬어 껴안아줄 일이다

오늘을 믿고 기대한 것처럼
내일도 믿고 기대해라
오늘의 일은 오늘의 일로 충분했다

너, 너무도 잘 하려고 애쓰지 마라.


- 나태주 시인, '너 너무 잘 하려고 애쓰지 마라' -

반응형

'책으로 배워가는 세상' 카테고리의 다른 글

미국과 유럽의 복지제도 수준 차이의 근본원인  (0) 2022.12.24
새로운 도전을 하는 나의 자세  (0) 2022.02.15
2019년 내가 읽은 책  (1) 2020.01.20
내 가게로 퇴근합니다  (0) 2019.12.23
사피엔스  (0) 2019.03.25
갈매기의 꿈  (0) 2019.02.27
유시민의 공감필법  (0) 2017.08.13
라면을 끓이며  (0) 2017.08.11
  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