반응형

Range 28

셀 값이 바뀔 때 처리(Worksheet_Change)

구글 스프레드시트에서 값이 수정될 때 처리하는 것은 아래 글에 살표봤는데,https://lsw3210.tistory.com/572 이번에는 엑셀 VBA로 하는 방법을 살펴보겠습니다. 1. 문제A2셀에 '남산동'을 입력해서 C열에 남산동이 들어있는 법정동을 나열한 후D2셀에서 '부산광역시 금정구 남산동'을 선택한 경우 A2셀의 값을 '청계동'으로 바꾸면 C열의 값은 바뀌지만 D2셀의 값은 그대로 남아 있습니다. 구글 스프레드시트에서처럼 'A2셀 값이 바뀌면 D2셀의 값을 지우는 것'을 구현해 보겠습니다. 2. 해법(1) VB Editor 실행개발도구 탭에서 Visual Basic을 클릭해서 VB Editor를 엽니다. (2) 이벤트 선택 콤보 상자 열기오른쪽 '코드 창'을 보니 윗 부분에 '(일반)'과 '..

EXCEL - VBA 2024.08.29

주소를 PNU로 변환하기(1) - VBA

1. 법정동 코드 가져오기 PNU 코드는 법정동 10자리 + 특지 구분 1자리 + 본번 4자리 + 부번 4자리 = 19자리로 되어 있습니다. 법정동 코드는 https://www.code.go.kr/ 사이트에서코드 검색을 누르고, 코드명에 '법정동'이라고 입력하고 검색을 하면텍스트 파일로 받을 수 있으면 이것을 엑셀 파일로 바꾸면 됩니다.자세한 것은 https://lsw3210.tistory.com/517 을 참고 바랍니다. 텍스트 파일을 연 후 Ctrl + A키를 눌러 전체를 선택한 후 복사해서 시트2에 붙여 넣고 시트명을 '법정동코드'로 바꾸면 아래와 같습니다.  2. 법정동에 대한 법정동 코드 검색하기 매크로로 만들기 위해 개발도구 - Visual Basic을 누른 후코드 창에 Sub pnu라고 입력..

EXCEL - VBA 2024.08.16

왜 범위 지정 오류?

1. 문제 G2셀의 구분에 해당하는 값을 B열에서 찾아서 해당하는 A열에서 C열의 값을 i열부터 K열에 표시하려고 하는 것입니다. 가. Sheet1에서 '같은시트에복사' 매크로 실행 위 파일을 연 후 개발 도구 - 매크로를 누르고, 매크로 이름 목록에서 '같은시트에복사' 매크로를 클릭하고, 오른쪽 위 실행 버튼을 누르면 G2셀에 선택된 값과 동일한 구분에 해당하는 데이터만 i열부터 K열에 잘 복사됩니다. 나. Sheet1에서 '다른시트에복사' 매크로 실행 이번에는 Sheet1 시트가 선택된 상태에서 개발 도구 - 매크로를 누른 다음 '다른시트에복사' 매크로를 실행하고 Sheet2를 클릭해 보면 G2셀에 해당하는 값들이 잘 표시됩니다. 다. Sheet2에서 '다른시트에복사' 매크로 실행 그런데, Sheet..

EXCEL - VBA 2024.08.06

VBA 에서 .Value가 필요한 경우

1. 문제  아래와 같이 지출 내역이 있을 때구분이 몇 가지 있는지 추출하려면 아래와 같이 데이터 탭의 '중복된 항목 제거'를 하는 것이 간결하지만VBA에서 Dictionary를 이용해 중복된 것은 하나만 추출하는 것을 해보겠습니다.  '중복된 항목 제거'를 하려면먼저 구분을 다른 범위에 복사해서 붙여넣고 데이터 탭을 선택한 후 '데이터 도구 그룹'의 '중복된 항목 제거' 명령을 누르고, 중복된 항목 제거 기준이 '구분'으로 되어 있으므로,확인 버튼을 누르면 됩니다. 그러면 "중복 값 3개가 발견되어 제거되었다"고 합니다.   2. 성공 - Range 다음에 .Value를 붙인 경우VBA에서 중복값을 제거할 때는 여러 가지 방법이 있을 수 있지만Dictionary를 이용하는 것이 제일 편합니다. 개발도구..

EXCEL - VBA 2024.08.02

엑셀과 VBA의 Offset 함수가 다르다. (2)

나. VBA의 Offset 함수   (1) 떨어진 셀 지정 VBA를 실행하기 위해서는먼저 개발도구 탭이 활성화되어 있어야 합니다. ※ 파일 - 옵션을 누른 후 Excel 옵션 창의 리본 사용자 지정에서 오른쪽 아래의 개발 도구 탭 왼쪽에 체크 (가) 코드 작성떨어진 셀을 지정하기 위해서는① 개발도구 - Visual Basic을 눌러 Visual Basic Editor를 연 다음삽입 메뉴에서 모듈을 눌러 모듈을 추가하고, ② 오른쪽 에디터 창에  sub offset1이라고 입력하고 엔터키를 누릅니다.그러면 아래와 같이 괄호가 추가되고, 한 줄 다음에 End Sub로 마무리됩니다. ③ 이제 코드를 작성하고,Sub offset1() Range("a1") = Range("c9").Offset(3, 1)En..

EXCEL - VBA 2024.06.25

병합된 셀의 홈(A1) 셀 알아내기(2) - 홈 셀 알아내기

1편을 여기서 확인하세요. 나. '홈 셀'(1) 홈 셀의 의미홈 셀을 병합된 셀 기준으로 보면 A1셀, 다시 말해 1행 1열이 됩니다. 따라서, Range("A1")이라고 해도 되고, Cells(1,1)이라고 해도 됩니다. (2) 함수 만들기 반복된 동작은 Sub 프로시저로 처리하는데,처리한 후 값을 반환받는 함수를 만들려면 Function 프로시저를 사용해야 합니다.  ① 위 파일을 연 다음개발 도구 - Visual Basic을 누릅니다. 그리고, 맨 아래에 Function이라고 쓰고, 함수명을 입력하는데,GetHomeCell이라고 하겠습니다.그리고 셀 주소를 인수로 받아야 하므로 인수명을 rng로 하고 형식을 Range로 지정합니다.그러면 아래와 같이 됩니다.Function GetHomeCell(rn..

EXCEL - VBA 2024.05.30

조건부 서식을 인쇄할 때 제거하는 방법

1. 문제아래와 같이 셀을 클릭했을 때 수평과 수직으로 표시가 되는데, 인쇄할 때 제외하는 방법을 알아보고자 합니다.  먼저 범위 외 셀을 클릭하면 조건부 서식이 적용되지 않으므로 범위 외 셀을 클릭하고 인쇄하는 방법이 있습니다.그것이 아니라 자동으로 조건부 서식이 제거되고 인쇄되는 것을 구현하려고 합니다.두 가지가 있는데 하나씩 다뤄보겠습니다. 2. 해법 1가. 실행 방법'조건부 서식을 지우기' 매크로와 '조건부 서식 원래대로' 매크로를 만든 다음 인쇄 버튼 클릭 시 '조건부 서식을 지우기'에 인쇄 부분이 있으므로 두 개를 연달아서 실행하면 됩니다. 나. 코드코드는 아래와 같습니다.Option ExplicitDim sht As WorksheetSub 조건부서식지우기() Dim PrintAr..

EXCEL - VBA 2024.04.27

VBA로 ColorIndex에 대한 색 표시하기

VBA는 Visual Basic for Application의 약자로, 엑셀, 워드, 파워포인트 등 응용프로그램을 위한 비주얼 베이직이란 의미로, 비주얼 베이직을 이용해서 응용프로그램을 쉽고, 빠르게 사용하는 것입니다. 개발 도구 탭에서 Visual Basic을 누르고, 비주얼 베이직 에디터에서 삽입 - 모듈을 눌러 Module1을 삽입을 누르면 아래와 같이 왼쪽 통합 문서에 Module1이 추가되고, 오른쪽에는 빈 코드 창이 열립니다. 이때 코드 창에 아래 코드를 복사해서 붙여 넣고, Sub 색표시() Dim i As Integer For i = 1 To 128 Range("a" & i) = i Range("b" & i).Interior.ColorIndex = i Next End Sub F5키 또는 세..

EXCEL - VBA 2024.04.12

한글이 아닌 엑셀로 하는 메일 머지(3)

문제는 여기를 참고 바랍니다. 3. 해법 2 : 이름뿐만 아니라 나머지 내용까지 매크로로 처리하는 방법 가. 논리이번에는 셀 값을 Vlookup함수가 아니라 다른 시트의 셀 주소로 연결하는 방법과 같은 연번에서 이름이 반복될 경우 고지서에 한꺼번에 인쇄하는 매크로를 만들어 보겠습니다. (1) 셀 값을 다른 시트의 셀 주소로 연결하기 예를 들어 고지서 시트의 회사명(성명)인 D6셀에는 명단 시트의 E열의 값이 입력되어야 합니다. 이 때는 연결키가 없어도 됩니다.그리고, 토지 소재지인 시군, 읍면, 리동은 명단 시트의 G, H, i 열과 연결되면 됩니다. (2) 같은 연번에서 이름이 반복될 경우 인쇄하기 "같은 연번"이란 병합된 셀로서 처리 줄과 윗 줄의 A1셀이 동일한 경우이고, "이름이 반복된다"는 것은..

EXCEL - VBA 2024.03.29

좌표를 이용해 엑셀에 도면 표시하기(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
반응형