반응형

컴퓨터 공부/엑셀 & VBA 48

[엑셀] countif 활용

엑셀 함수 countif, countifs 활용해보쟝 - countif 특정 하나의 조건에 맞는 값이 몇 개 인지 찾는 함수 - 사용방법 =countif(범위, 조건) 예시1) G1 ~ G11 범위에서 1의 값이 몇 개인가? 예시2) G1 ~ G11 범위에서 5 이상의 값은 몇 개인가? 조건에 쌍따옴표를 이용해 범위를 지정해주면 된다. =countif(범위,"=>5") =countif(범위,">5") 예시3) G1 ~ G11 범위와 A3의 숫자를 참조하여 9 이상의 값을 찾아보자. 문자열 합치는 문자 '&'를 이용하면 된다. =countif(범위,">="&A3) =countif(범위,">"&A3) - countifs 여러 조건을 만족하는 값이 몇 개 인지 찾는 함수 - 사용방법 =countif(범위1, ..

[엑셀vba] 크롬으로 웹 제어 해보자.(6/15 IE 지원 종료)

안타깝게도 22년 6월 15일부터 IE 실행하면 엣지로 열린다고 한다. 엑셀vba로 웹 컨트롤 할 땐 보통 IE를 이용했지만 이제 못할 듯...흐흑 목차 셀레니움 환경 구축(필수) 셀레니움 기본 사용법 크롬 업데이트 중지(선택) 1. 셀레니움 환경 구축 1.1 셀레니움 설치 https://github.com/florentbr/SeleniumBasic/releases Releases · florentbr/SeleniumBasic A Selenium based browser automation framework for VB.Net, VBA and VBScript - florentbr/SeleniumBasic github.com 셀레니움 베이직 다운로드하고 실행 설치를 하다보면 다음 내용을 볼 수 있다. 무슨..

[엑셀vba] 엑셀 열릴 때 경고 팝업 띄우기(feat.msgbox)

엑셀이 열리면 경고 창이 나타나게 만들어보자! 1. 코드 엑셀vba 편집기 > 프로젝트 창 > Microsoft Excel 개체 > 현재_통합_문서 더블 클릭 또는 우클릭 후 코드 보기 코드창 나타나면 workbook 선택 workbook을 선택하면 자동으로 Open 속성으로 선택된다. msgbox 함수를 이용해 코드를 작성한다. 편집창을 닫고 다른이름으로 저장을 누른다. 저장 할 때 .xlsm 확장자로 해야 코드가 사라지지 않는다.

[엑셀꿀팁] 셀 내용 빠르고 쉽게 수정하기.

셀에 열심히 데이터를 입력하고 엔터를 쳤는데 오탈자가 보인다? 그럴땐 보통 마우스로 셀 더블클릭하여 활성화시킨다음 수정하게 된다. 뭔가 좀 불편하다ㅡㅡ 마우스대신 키보드로 간편하게 하는 방법을 알아보자. '나는 도박사입니다'라고 적어야되는데 돟박사라고 오타를 내버렸다. 마우스를 쓰지않고 셀 입력창을 활성화 시켜서 오탈자를 고쳤다. 설명 길게할 것도 없고, 그냥 수정할 셀로 이동하여 F2를 누르면 입력 커서가 활성화된다. 아주 쉽다. 끄읕

[엑셀꿀팁] 병합된 셀 해제 후 빈칸 쉽게 채우기

엑셀에 작성된 목록을 내가 원하는대로 정렬하고 싶은데 가끔 셀 크기가 다르다며 정렬이 되지 않는 경우가 발생한다. 목록에 병합된 셀이 있으면 나타나기 때문에 셀 병합을 풀어줘야 정렬이 가능하다. 하지만 해제만 한다고 끝이 나는건 또 아니다. 해제하고 나면 병합된 셀 일부는 빈칸으로 남아있게 되어 제대로된 정렬을 하기 힘들다. 그래서 지금 배울 꿀팁으로 쉽게 빈칸을 채워보자. 가볍게 박사들의 it장비를 목록화하고 셀 병합도 해놨다. 이제 셀 병합해제 후 보유 장비를 기준으로 오름차순 정렬을 해보자. 병합 해제를 해버리니 저렇게 빈칸들이 생겼다. 이 상태에서 정렬을 하게 되면 리스트가 엉망진창이 되버리니까 빈칸들을 알맞은 데이터로 한방에 채워보자. 이동옵션이라는 기능으로 빈칸은 바로 위의 데이터로 채울 수 ..

[엑셀꿀팁] 셀 목록 쉽게 작성하기(feat.셀 가로 이동)

일상생활을 하다보면 종이에 작성된 목록을 보고 엑셀에 옮겨적는 경우가 있다. 다음과 같은 경우는 순번, 이름, 생일 ,나이, 성별을 적기위해 준비해놓은 상황이다. 보통 엔터를 치거나 오른쪽 방향키를 이용하여 이동하면서 셀에 데이터를 입력 할 것이다. 하지만 '탭' 버튼을 알게된 순간 이것만 누르게 될 것이다. 1. 엔터 키를 이용한 입력 엔터를 사용하면 이렇게 답답한 상황이 연출된다.. 2. 방향키를 이용한 입력 엔터로 하는것보다 편해보이지만 손가락이 뭔가 불편하다. 방향키가 멀어서 그런지 자주 사용하지 않게된다. 그리고 '탭'키를 이용한것과 아주 극명하게 차이나는 부분도 있기에 방향키가 더 별로인것도 있다. 3. 탭키를 이용한 입력(Tab, Caps Lock 위에 있는 키) 이거보시게 방향키랑 뭐가 다..

[엑셀vba] with를 이용해서 편하게 코딩하자

with를 이용하면 보다 짧은 코드를 작성할 수 있다. 어떻게 쓰는지 알아보자. 사용법 Sub with_Test() With Range("A1") .Font.Color = RGB(255, 0, 0) End With End Sub With 함수는 변수, 개체 등을 생략 할 수 있게 만들어준다. 위 예시 코드를 보면 With 옆에 생략할 개체를 넣어줌으로써 With 와 End With 사이에서는 해당 개체를 적지않고 .(온점)만 찍어도 개체의 속성을 사용 할 수 있게 된다. ※ 범위, 셀, 시트 등의 개체가 아니라 변수를 넣어도 됨 ※ vba가 그렇듯 마지막엔 End with 필수! 이중 With Sub with_Test() With Sheets(1) With .Range("A1") .Font.Color =..

[엑셀vba] 파일이름 변경하기 (Name AS)

엑셀vba를 이용해 파일이름을 변경해보자. 변경할 때 쓰는 함수는 Name As 아주 간단하다. 사용법: Name 원본파일 As 변경될파일이름 ex) Name "C:\test\A.txt" As "C:\test\AA.txt" Name As 특징 파일 이름 변경 가능 파일 이동 시킬 수 있음 대소문자 구분하지 않음( a.txt = A.txt , aaaA.txt = Aaaa.txt 같은 파일로 취급) 확장자 변환 가능하지만 데이터 손실됨. 존재하지 않는 파일이면 오류 발생(53 런타임 오류, 파일을 찾을 수 없음) 존재하지 않는 폴더로 이동할 경우 오류 발생(53 런타임 오류, 파일을 찾을 수 없음) Name As 테스트 Sub 파일이름변경하기() Name "C:\test\A.txt" As "C:\test2\..

[엑셀vba] 셀 데이터가 변경되면 옆 셀에 변경된 시간을 표시 해보자!

특정 셀의 데이터가 변경될 경우 언제 바꼈는지 시간을 기록하고 싶을 때가 있다. 간단한 vba 코딩으로 해결해보자! 1. VBA 코드(단일 셀) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Row > 1 Then Cells(Target.Row, "D") = time End If End Sub Target = 현재 데이터가 변경된 셀 정보 time = 현재 시간 정보 (시분초) now = 오늘 날짜 및 시간 (년월일 시분) 코드 해석: 타켓의 열이 1번(A열)이고 행이 1보다 크다면 타켓의 행번호와 D열에 현재 시간을 입력하라. 2. VBA 코드(범위) Private Sub Worksheet_Chang..

[엑셀vba] InputBOX 함수를 이용해 입력값을 받아보자!

프로그램 동작 중 사용자에게 입력값을 받아야 할 때가 있다. InputBox 함수를 이용해서 해결해 보자! InputBox 사용법 InputBox 함수 입력값 또는 버튼 선택에 따라 다른 코드 진행 입력값 검증 1. InputBox 사용법 Sub Inputbox_Test() InputBox "내용", "제목", "기본값" End Sub Msgbox 함수와 비슷한 인수들을 가지고 있다. InputBox Prompt, [Title], [default], [xpos], [ypos], [helpfile], [context] InputBox 함수의 내용에 해당하는 Prompt만 필수이며 나머지 인자는 선택사항이다. title: 제목 default: 시작했을 때 입력되있을 값 xpos: 가로 위치 (숫자로 입력) ..

[엑셀vba] Msgbox를 이용해서 메세지 팝업창을 띄워보자!(feat. 줄바꿈, 버튼 형식)

프로그램 동작 중 사용자에게 경고 알림 확인 등 메세지 팝업을 띄워서 알려야 하는 경우가 있다 그럴때 사용할 수 있는 함수는 msgbox ! Msgbox 사용법 Msgbox 버튼 선택에 따라 다른 코드 진행 Msgbox 내용 줄바꿈 1. Msgbox 사용법 Sub Msgbox_Test() MsgBox "내용", vbOKCancel, "제목" End Sub msgbox 함수는 Prompt, [buttons], [title], [helpfile], [context] 5가지 인수를 사용할 수 있다. 이 중에서 Prompt는 필수이며 메세지 내용을 나타낸다. 나머지는 선택사항 buttons = 버튼 형식 선택 title = 메시지박스 제목 helpfile = 도움말 파일[context 인수를 사용하면 필수 항목..

[엑셀vba] 사용자 정의 폼 - Label, TextBox 텍스트의 세로 정렬을 가운데로 해보자!

VBA 사용자 정의 폼에서는 가로 텍스트 정렬만 지원하고 있다. 텍스트가 들어가는 컨트롤의 속성에서 TextAlign 항목에서 왼쪽, 오른쪽, 중앙 정렬을 선택 할 수 있다. (웃긴건 버튼식 컨트롤들은 기본적으로 세로 정렬이 가운데로 되어있음 ㄷㄷ;;) 보시다시피 왼쪽, 중앙, 오른쪽만 가능하며 실제로 적용해보면 가로 정렬만 된다. 세로 정렬도 필요할 때가 있는데 약간의 꼼수를 이용해서 세로 정렬 구현이 가능하다. 세로 정렬을 구현하기 위해선 두 가지 컨트롤이 필요하다. Label 1개와 Label 또는 TextBox 아무거나 1개만 더 있으면 된다. 본문에서는 Label 2개를 이용해서 세로 정렬을 구현해보겠다. 1. Label1 라벨 하나를 생성하고 Caption 삭제, BackStyle과 Boder..

[엑셀vba] 함수나 프로시저에 선택적 인수를 받게 해보자.

전달자 또는 파라미터라 부르는 놈을 우리는 잘 알고 있으며 잘 사용하기도 한다. vba에서 대표적인(?) 파라미터를 들자면 msgbox 함수가 있다. 메세지 박스를 띄우는 함수인데 파라미터가 엄청 많다. 여기서 필수 항목은 맨 앞에 있는 Prompt이다. 메세지 내용을 담당하고 있어서 그런지 필수적으로 들어가야 할 내용인가보다. 그 뒤에 나오는 애들은 있든 없든 메세지 박스 실행에 전혀 영향을 주지 않는다. 그런 필수항목인 프롬프트를 설정하지 않으면 다음과 같은 오류를 볼 수 있을 것이다. 내가 만들 프로시저나 함수에는 저런 오류메세지가 안뜨도록 선택적 인수로 가득하게 해보자. 선택적 인수를 만들기 위해선 Optional을 붙여주자 Sub Test(X As Integer, Optional Y As Int..

[엑셀vba] 사용자 정의폼 KeyDown 이벤트 - KeyCode 파라미터

사용자 정의 폼을 사용하다보면 KeyDown 이벤트를 이용할 때가 있다. 특정 키를 눌렀을 때 작업을 수행 할 수 있도록 할 수 있는 이벤트이다. TextBox1을 생성하고 KeyDown 이벤트를 눌러보면 다음과 같이 나타난다. 1 2 3 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) End Sub Colored by Color Scripter cs KeyCode와 Shift 파라미터는 다음과 같은 의미를 가진다. KeyCode: 내가 누른 키의 번호 Shift: Shift키를 눌렀는지 확인 (0이면 안누름, 1이면 누름) 특이한 점 - 좌측 Ctrl를 누르면 Shift 값: 2, Ke..

[엑셀vba] AccessDB 테이블에 엑셀 파일로 한 번에 대량 데이터 입력하기

지금까지 엑셀vba를 이용해서 액세스 DB에 데이터를 저장하는 방식은 SQL 쿼리를 이용했었다. 데이터가 소량일 때는 큰 문제가 되지 않았는데, 수 백개 이상이 되면서 처리 속도가 상당히 느려지는 바람에 작업에 큰 무리가 있음을 알게되었다. 그래서 한 방에 뙇! 넣을 수 있는 방법이 없을까 구글링을 하면서 찾은 해결책을 기록하고자 한다. 1. 해결방안 액세스에서 엑셀파일을 불러오는 모듈을 만들고 엑셀vba에서 액세스의 모듈을 실행시킨다. ???: 않이;;; 그럴꺼면 그냥 첨부터 액세스vba로 만들면 되는거 아니냐;; 라고 생각할 수 있다. 근데 나 도박사 엑셀의 신이 될 남자기 때문에 엑셀을 사용한다. 2. 액세스vba 모듈 추가 액세스vba에 들어갈 소스는 구글링하다가 다음 블로그에서 찾아냈다. 그냥 ..

[엑셀vba] 파일을 삭제해보즈아!(kill)

vba를 이용해 파일을 삭제해보자!!!! USING: Kill "File Path" 사용법: Kill "삭제할 파일 경로" 이번에도 경로나 파일이름을 이상하게 만들고 오류 테스트를 해봤다. 어떤 오류가 나올지 충분히 예상 되는 부분? 그러나 오류가 filecopy 함수와는 다르게 나타나는 것을 볼 수 있다. 경로가 이상하거나 파일이름이 잘못되어도 동일하게 런타임 53 오류를 뱉어낸다. filecopy 함수는 경로가 다르면 런타임 76, 파일이름이 잘못되면 런타임 53 오류를 발생시켰다.

[엑셀vba] 파일을 복사해보자!(filecopy)

vba를 이용해서 파일을 복사해보자! Using: filecopy "Source File", "Destination File" 사용법: filecopy "원본 파일", "복사할 경로" 원본 파일 이름이나 복사될 경로가 잘못됐다면 어떻게 될까? 당연히 오류 나겠지? - 런타임 53 오류: 파일 이름이 잘못됐을 때 나타나는 오류 - 런타임 76 오류: 경로가 잘못됐을 때 나타나는 오류 이런 오류가 발생한다는 사실을 확인했고 다른 실험을 해봤다. 원본 파일의 경로와 파일이름을 이상하게 만들어서 실행하면 어떤 오류가 나타날까? 런타임 73 오류가 먼저나타나는 것을 알 수 있었다. 끝

[엑셀vba] 시트에 달력을 표시해보자.

단 코드 몇 줄이면 시트에 달력을 표시할 수 있다. 아주 쉽게 만들어보자. 우선, 달력을 표시할 셀을 이쁘게 꾸며보자. 실행 과정 코드(윤년 계산법) 1. 실행 과정 나의 경우 셀 C1에는 '년도', C2에는 '월' 입력 하기 위한 양식을 만들었다. 그리고 데이터 유효성 검사 기능으로 각 셀에는 입력값을 제한 하고 있다. - C1에는 1900 ~ 4000 까지 입력 가능 - C2에는 1 ~ 12 입력가능 정해진 범위가 아닌 값을 입력하면 오류가 출력되며 코드가 실행되지 않는다. 정확한 값을 넣으면 다음과 같이 정상적으로 작동하는 것을 볼 수 있다. 2021년 4월 달력을 출력해봤다. 실제 달력과 비교해본 결과 똑같았다. 년도나 월 값을 변경하면 달력도 자동으로 변경된다. 다음 그림을 보자. 윤년도 정확히..

[엑셀vba] 사용자 정의 폼을 써보자

엑셀vba에는 모듈 말고도 사용자 정의 폼을 만들어 쓸 수 있다. (word, ppt, access 등 다른 오피스 프로그램들도 마찬가지) 간단히 폼에 추가할 수 있는 컨트롤과 사용법에 대해 알아보자. 1. 폼 생성 Alt + F11을 눌러 VB 편집기를 열도록 하자. 그리고 프로젝트 창에서 마우스 우클릭하여 사용자 정의 폼을 추가한다. 만약 프로젝트 창이 안보인다면 Ctrl + R 을 누르거나 '메뉴 > 보기 > 프로젝트 탐새끼'를 누르자. 이렇게 아무것도 없는 폼이 생성되었다. 2. 폼 열기 폼을 만들었으면 열고 닫는법을 알아야 한다. 이제는 모듈을 하나 추가해서 코드 한 두줄만 작성하면 폼을 열 수 있다. 프로시저 이름을 정하고 폼 이름을 적고 온점을 누르면 다양한 속성들이 나타난다. 그 중에서 s..

반응형