반응형

EXCEL - VBA 103

UDF에서 자기 셀 참조 시

일반적으로 UDF(User Defined Function, 사용자 정의 함수)는 다른 셀 주소를 참조해서 계산을 하며, 아래는 제곱값을 구하는 함수의 코드입니다. Function square(rngA As Range) square = rngA.Value * rngA.Value End Function 그러나, 자기 자신의 셀을 참조해야 할 수도 있습니다. 이때 사용하는 것이 Application.Caller 속성(Property)입니다. Application.Caller 대충 감을 잡으면 응용 프로그램이 호출하는 곳 또는 어디서 호출되었는지 정도가 될 것입니다. 따라서, 자기 자신 셀을 가리킵니다. 위의 경우에 항상 왼쪽 두 번째 셀의 값을 참고한다고 하면 범위를 이용하지 않고 아래와 같이 Applicat..

EXCEL - VBA 2024.01.05

메모에 표시되는 사용자 명 표시하지 않기

1. 새 메모와 새 노트 엑셀이 버전 업되면서 '새 메모'와 '새 노트'로 분리되었습니다. '새 메모'는 채팅 기능이고, '새 노트'가 과거의 메모 기능입니다. 이때 새 노트를 누르면 이름과 :(콜론) 표시가 나오고 그 아래 메모를 입력합니다. 2. 사용자 명 삭제 및 편집 파일 - 옵션 - 일반 탭에서 중간에 내려가면 사용자명이 보입니다. 사용자 명을 수정하려면 내용을 수정하면 되는데, 사용자 명을 삭제하려면 내용을 지우고 확인 버튼을 누른 다음 옵션에서 확인해 보면 이름이 그대로 있으므로 스페이스 바를 한 번 밀어서 공백을 삽입해야 합니다. 그리고, 다른 셀에서 새 노트를 누르면 사용자명은 없는데 :(콜론)은 여전히 표시되고 있는 문제점이 있습니다. 3. VBA로 사용자 정의 함수 만들기 일반적인 엑..

EXCEL - VBA 2024.01.02

While 문 - VB와 VBA의 차이점

VBA는 엑셀 등 오피스 앱을 위한 VB이지만(Visual Basic for Application), VB가 모두 적용되는 것은 아닙니다. 1. VB와 VBA의 While문 차이점가. VB의 While문구글에서 vba while로 검색을 하면 VB에 대한 도움말만 나오고, 들어가 보면 While 반복문의 구문은 아래와 같습니다.While condition [ statements ] [ Continue While ] [ statements ] [ Exit While ] [ statements ] End While Continue While 문도 있고, Exit While로 중간에 빠질 수 있습니다. condition은 조건이고, statements는 실행문입니다. Exit While 다음의 statemen..

EXCEL - VBA 2023.12.17

VBA에서 SumProduct 사용하기

1. SumProduct 함수 SumProduct 함수는 Product, 다시 말해 곱한 값을 더해서 반환해 주는 함수입니다. 가. Product와 Sum함수를 이용하는 경우 아래와 같이 숫자1과 숫자2를 곱한 다음 합계를 낸다고 할 때 Product와 Sum 함수만 알고 있다면 먼저 줄별로 Product, 예를 들어 =product(a2:b2)를 한 후 C7셀에서 Sum을 하면 됩니다. 나. SumProduct 함수를 사용하는 경우 (1) 구문 =SUMPRODUCT(array1, [array2], [array3], ...) 배열로 되어 있는데 범위라고 생각하면 간단합니다. (2) 사용 예 배열을 세로로 해서 A열을 배열1, B열을 배열2로 지정하면 됩니다. 따라서, 위와 같이 곱한 것의 합을 구하려면 ..

EXCEL - VBA 2023.11.30

자료 형태가 다른 것 VLookup으로 검색하기

좌우 데이터가 좀 달라야 하는데 동일하게 만들었습니다. 다른 점은 형식이 왼쪽은 주계좌 및 서브계좌에 -이 있고, 오른쪽의 날짜가 날짜 형식이 아니라 문자로 되어 있어 변환이 필요한 상황입니다. 데이터 건수가 17951로 매우 큽니다. 1. 서브계좌 구하기 이와 같은 경우에 사용하는 함수가 VLookup입니다. 주계좌의 형식이 다르기 때문에 형식을 통일해야 하는데, 오른쪽 검색 범위는 바꿀 수 없으니 왼쪽 것을 Substitute 함수를 이용해 바꾸면 =substitute(a4,"-","")이 됩니다. 다시 말해 하이픈(-)을 공백으로 바꾸는 것입니다. 이제 Vlookup 함수와 결합하면 =vlookup(substitute(a4,"-",""),$a$4:$i$17951,2,0)이 됩니다. 그런데, 이상하게..

EXCEL - VBA 2023.11.20

좌표를 이용해 엑셀에 도면 표시하기(3)

(라) For ~ Next 반복문 실행 For i = 2 To 21 BottomRow = 작은값행(Sheets(3).Cells(i, 2).Value, eastRange) topRow = 작은값행(Sheets(3).Cells(i, 3).Value, eastRange) RightCol = 작은값열(Sheets(3).Cells(i, 4).Value, northRange) + 1 LeftCol = 작은값열(Sheets(3).Cells(i, 5).Value, northRange) - 1 Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Cells(topRow, LeftCol).Left, Cells(topRow, LeftCol).Top, _ Cells(topRow..

EXCEL - VBA 2023.11.16

좌표를 이용해 엑셀에 도면 위치 표시하기(2)

3. 여러 개의 좌표를 도면에 일괄 표시하기 이번에는 엑셀에 아래와 같이 가상의 좌표를 표시하고, (참고 사항) - 도면의 위치는 1000단위로 간격을 두었으며, 숫자는 #, 표시형식을 사용해서 천단위 위만 표시되도록 했습니다. 예를 들어 첫번째 N의 좌표는 723,000입니다. - 도면의 좌표는 왼쪽에서 오른쪽, 위쪽에서 아래로 내림차순으로 표시되어 있습니다. 그 안에 아래의 좌표에 해당하는 도면의 위치를 표시해보겠습니다. 가. 작성 방법 ① 왼쪽과, 위쪽, 너비와 높이가 필요한데, 좌표가 정확히 구간과 일치하는 것이 아니므로 좌표보다 큰 값의 위치에 표시하도록 하겠습니다. ② 도면 색은 ColorScheme를 사용하는데, 1은 흰색이므로 제외하고 일련번호를 이용해 표시하겠습니다. 나. 코드 Dim i..

EXCEL - VBA 2023.11.15

좌표를 이용해 엑셀에 도면 위치 표시하기(1)

위와 같이 도면별 위, 경도(통상적인 위, 경도와 다르지만 그렇게 표시합니다)가 있을 때 도면에 표시하는 방법을 알아보고자 합니다. 1. 셀의 위치 알아내기 먼저 위치와 관련한 셀의 속성을 알아야 합니다. 셀은 왼쪽 위를 기준으로 열 너비와 행 높이를 가지고 있습니다. 가. 셀의 왼쪽, 위 구하기 ① 셀의 왼쪽 위치 구하기 개발도구 - Visual Basic을 실행하고, 삽입 - 모듈 메뉴를 누르면 모듈과 Module1이 추가됩니다. 오른쪽 편집기 창에 sub cellinfo라고 입력하고 엔터 키를 누릅니다. 그리고, 왼쪽 위치는 셀 주소를 쓴 후 .left라고 하면 됩니다. 다시 말해 range("a1").left 인데 화면에서 확인해야 하므로 debug.print를 앞에 추가하면 됩니다. debug...

EXCEL - VBA 2023.11.13

매크로 - 범위가 아닌 배열로 처리하기

이 글에서는 범위로 처리했는데, 배열로 처리하는 것을 다뤄보겠습니다. 1. 코드 작성 및 실행먼저 개발 도구 - Visual Basic을 누르고, 삽입 - 모듈을 클릭해서 모듈을 추가합니다. 그리고, 코드 창에 아래 내용을 복사해서 붙여 넣습니다.Sub 배열로곱하기() Dim rng As Range, c As Range Dim val Dim i As Long Range("e1") = Now() Set rng = Range(Range("a1"), Range("a1").End(xlDown)) val = rng For i = 1 To UBound(val) val(i, 1) = val(i, 1) * 2 Next Range("b1:b" & UBound(val)) = val Range("e2") = Now() En..

EXCEL - VBA 2023.09.04

매크로 - 범위로 처리하기

그동안은 매크로 작성 시 범위로 처리하는 것만 알고 있었는데, 최근에 유튜브를 보니 셀마다 처리하는 것이 아니라 배열에서 처리한 후 한꺼번에 범위에 일괄로 데이터를 입력하는 것이 훨씬 빠르다는 내용을 보고 충격을 받아 정리하고자 합니다. 먼저 범위로 처리하는 방법을 알아보겠습니다. A열에 2를 곱한 값을 B열에 넣는다고 할 때 범위로 처리하는 것은 아래와 같습니다. 1. 코드 작성 및 실행 먼저 개발 도구 - Visual Basic을 누르고, 삽입 - 모듈을 클릭해서 모듈을 추가합니다. 그리고, 코드 창에 아래 내용을 복사해서 붙여 넣습니다. Option Explicit Sub 곱하기() Dim rng As Range, c As Range Set rng = Range(Range("a1"), Range("..

EXCEL - VBA 2023.09.03
반응형