반응형

엑셀VBA 50

[엑셀vba] 패스워드가 걸린 엑셀파일 한꺼번에 암호변경하기 or 해제하기

저번에는 일괄적으로 암호걸어보기를 했는데 이번에는 패스워드가 걸린 엑셀 파일들을 한꺼번에 해제하거나 암호를 변경해도록 하자. 중요한점은 엑셀 파일의 암호를 알고 있어야한다는 것이다! 1. 동작 순서 1) 패스워드변경.xlsm의 셀 A2에 폴더 경로를 입력. 경로 마지막에 '\' 없어도됨 ex. c:\test 2) 파일불러오기 버튼을 클릭하면 셀 A2 경로의 파일들을 시트에 출력. (확장자는 xlsx, xls, xlsm 등) 3) 목록을 불러오면 현재 비밀번호와 변경할 비밀번호를 입력하고 비밀번호 변경을 클릭 4) 암호 변경 성공 여부에 따라 E열에 결과를 나타냄 2. 시연 폴더 경로는 'C:\패스워드연습'으로 설정하고, 안의 내용물은 위 그림과 같이 다양하게 준비했다. 엑셀 파일은 이름처럼 비밀번호를 4..

[엑셀vba] 정수인지 소수(0.24, 0.1)인지 구분해보자

간단한 방법으로 이 데이터가 소수인지 정수인지 구분해보도록 하자. 구글링을 잘못했는지 엑셀vba 소수를 검색하면 1,2,3,5,7,9,... 과 같은 1과 자기 자신 외에는 약수를 가지지 않는 수에 대해서만 나와있다. 내가 원한건 이게 아닌데... 엑셀vba에서 0.24, 0,123, 23.4234 이런 소수들을 구분하는 방법이 있는지 궁금해서 찾아봤지만, 해답은 찾을 수 없었다. 하지만 수학적 접근으로 비교적 쉽게 해결하였다. 소수 구분 식: x - 정수형 변환(x) = 소수점 아래 숫자 예시. x 값이 123.24 라고 할 때 정수부분인 123을 x값에서 빼게 되면 0.24만 남게된다. 이 결과를 보면 나머지가 존재하기 때문에 소수라고 얘기 할 수 있다. x = 4 일때 식: 4 - 정수형 변환(4)..

[엑셀vba] 재무제표 받아오기

작년 6월부터 소액(20만원)으로 주식투자를 시작하여 11월에 본격적으로 투자금을 넣기 시작했다. 투자 방식은 장기적으로 꾸준히 특정 종목을 매수하는 것이다. 특정 종목 3가지를 선택하고 소량으로 매수하고 후에 종목 공부를 하기 시작했다. 주식의 기본이 재무제표 보는 법이라 하는데 그걸 공부하기 위해 VBA로 재무제표 불러오는 코드를 작성했다.(?) 그냥 인터넷으로 봐도 되는데 굳이...?라고 생각할 수도 있지만, 그냥 한번 만들어봤다. 그리고 어떻게 동작하는지 정리해봤다. 1. 동작 순서 엑셀 시트에서 '종목 찾기' 버튼을 눌러 폼을 띄운다. 폼에서는 종목을 검색할 수 있으며 목록에서 선택된 종목의 재무제표를 엑셀 시트에 불러온다.(웹 크롤링, 5초 정도 소요됨 ) 웹 크롤링이 완료되면 자동으로 Acc..

프로그램/완료 2021.01.12

[엑셀vba] 코드 여러 줄로 작성하기 & IF문 한 줄로 끝내기

가끔 하나의 함수가 길어지는 경우가 발생한다. 너무 길어지면 가로 스크롤이 생기고 가독성이 떨어지게 된다. _(언더바)를 이용해서 코드를 여러 줄로 작성해보자. 1. 테스트 1 2 3 4 5 6 Sub 연습() Debug.Print ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row '1번 Debug.Print ActiveSheet.Cells(Rows.Count, "A"). _ End(xlUp).Row '2번 End Sub Colored by Color Scripter cs A열의 마지막 데이터를 찾아주는 함수로 테스트하였다. 1번의 경우 한 줄로 작성했고, 2번은 두 줄로 만들어봤다. 실행결과야 둘 다 똑같은 1의 값을 출력했다. 함수를 두 줄로 작성하려면 _(언더바..

[엑셀vba] 숨겨진 시트들 한꺼번에 숨기기 취소하기

숨겨진 엑셀 시트가 한 두개면 그냥 내가 숨기기 취소해서 보이면 간단하다. 하지만 그 수가 10개가 넘어간다면 일일히 숨기기 취소하기엔 힘들지 않을까? 그래서 한방에 숨겨져 있는 모든 시트를 세상에 드러나도록 해봤다. 1. 코드 Option Explicit Sub 숨기기일괄취소() Application.ScreenUpdating = False Dim i As Integer For i = 1 To ActiveWorkbook.Sheets.Count If Sheets(i).Visible = False Then: Sheets(i).Visible = True Next i End Sub 엑셀에서 Alt+ F11키를 눌러 VBA 편집기를 열고 프로젝트 창에서 모듈하나를 추가해주고 코드를 복붙하면 끄읕. 크게 어려운 ..

[엑셀vba] 편집기 도킹 기능 해제하기

엑셀vba 편집기를 이용하다보면 도킹 기능이 상당히 불편하게 느껴질 때가 있다. 처음엔 그러려니하며 썼지만 이젠 못참겠다. 그래서 도킹을 없애봤다. 1. 도킹 기능이란? 엑셀vba 편집기에는 프로젝트, 속성, 조사식, 직접 실행 창, 코드, 지역 창 등 상당히 여러가지 보기 옵션을 선택 할 수 있다. 이 옵션 창들을 vba편집기 테두리 부분에 끌어서 옮기다 보면 갑자기 툭하고 붙는 경우가 있다. 이 기능은 vba에서 지원해주는건데 그렇게 필요한거 같진 않다.. (나의 개인적인 생각) 2. 도킹 해제하기 vba편집기의 '도구 > 옵션 > 도킹 탭'에서 쉽게 해제 할 수 있다. 체크 해제 후 확인을 눌러주면 vba 편집기에 들러붙지 않게 된다.

[엑셀vba] 시트의 마지막 데이터 위치를 알아내보자

시트의 마지막 데이터(행 또는 열)가 몇번째 셀에 있는지 알고싶다. 쉽게 알아내보자. 1. 테스트 환경 구축 위 그림에서 셀 (10,"A"), (7,"C"), (4,"E"), (2,"H") 네 곳에 '마지막'이라는 글자를 입력하였다. 이 글자들을 활용해 위치를 찾아내보자. 2. vba 코드 123456789Sub 마지막_위치_알아내기() Dim LastRow As Integer Dim LastCol As Integer LastRow = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row LastCol = Sheets(1).Cells(2, Columns.Count).End(xlToLeft).Column End SubColored by Color Scriptercs 육안으로 ..

[엑셀vba] 엑셀 파일 암호 걸기(파일별로 다른 암호 설정)

엑셀 파일에 자동으로 암호를 걸어보도록 하자 1. 매크로 동작 순서 ① 파일 목록 불러오기 클릭하여 폴더 선택 ※ xls, xlsx, xlsm 이외의 파일은 불러오지 않음 ② C열에 적용할 패스워드를 입력한다. ③ 암호 설정하기 클릭하면 자동으로 암호넣고 저장 완료 ④ 이미 암호가 걸려있는 파일은 적용되지 않고 실패 로그를 남김 2. 매크로 실행 영상

[엑셀vba] 엑셀 파일 선택하여 암호 설정하기

원하는 엑셀 파일을 선택하여 암호를 걸어보도록 하자. 1. 매크로 동작 순서 ① 설정할 암호 입력 ※ 암호 조건: 최소 4자리 이상, 위 아래 암호 입력 값이 동일 해야함 ② 암호 조건이 맞으면 OK 버튼 활성화 ③ 파일 선택창 열림 ④ 원하는 경로로 들어가 파일 선택 (여러개 선택 가능) ⑤ 선택된 파일들 암호 걸고 저장됨. (백그라운드로 진행됨) ⑥ 종료되면 파일을 확인한다. ⑦ - 끝 - 2. 매크로 실행 영상 오우 잘되는군...

[엑셀vba] 기출문제 프로그램 만들기 1

올해 정보보안기사 시험만 두 번 봤다. .... 불합격 하였다.. 과락없는게 신기할 뿐 하지만 다행히(?)도 보험으로 들어놓은 산업기사 필기는 합격하였다. 내가 왜 15회, 16회에서 필기 탈락했는지 분석해봤더니 공부를 너무 안한다. 내가봐도 너무 안했다.. 심각할정도로 운으로 합격하려는 마음이 컸나보다.. 그래서 공부만 하면 재미도 없고 지루하기만 해서 기출문제 프로그램을 만들면서 공부해보려고 한다. 어느 정도 틀은 잡았고 문제만 계속 집어 넣기만 하면된다. 문제 집어넣고 프로그램 잘 실행되는지 확인하는 과정에서 공부가 될꺼라는 나만의 생각ㅋㅋㅋ 이거라도 하면 좀 낫지 않을까??ㅋㅋ 있어보이게 업데이트 내역이니 버전이니 이런것도 넣어보고 해설 온/오프 기능도 넣고, 분야 선택해서 풀어볼 수 있게 만들었..

[엑셀vba] 엑셀 파일 별로 패스워드 다르게 적용하고 저장하기

기본 기능에 충실한 vba코드를 작성해봤다. 제곧내 엑셀 파일마다 다른 암호를 설정하고 싶을 때 요롷고롬 하면 쉽게 할 수 있었다. 1. 코드 Option Explicit Sub 파일별로다른암호걸기() Dim lastFile As Integer Dim i As Integer Dim Excel_ap As Excel.Application Application.DisplayAlerts = False lastFile = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row Set Excel_ap = CreateObject("excel.application") Excel_ap.Visible = False Excel_ap.Application.DisplayAlerts = False F..

[엑셀vba] vba코드 실컷 만들었더니 사라진다면?

엑셀 매크로와 vba를 처음 접했을 때 부딪히는 문제였다. 매크로 기록하고 '나중에 또 써먹어야지 히히' 라는 생각하며 파일 저장을 했다. 분명 나는 파일 저장을 했다. 근데 다음에 파일을 열어보면 ??? 매크로 어디감??? ㅜㅜㅜ 매크로 기록하고 저장할 때 경고창이 나타남에도 잘 읽어보지 않고 닫거나 '저장 안 함'을 눌러버려서 매크로 코드가 많이 실종됬었다.. xlsm 이나 xls 확장자로 저장하면 이런 불상사가 생기지 않을 것이다. 요약. .xlsx 기본 확장자에는 vba코드가 포함되지 않는다. .xlsm vba코드를 포함한 파일 .xls 97 - 2003 통합 문서 파일인데 vba코드가 포함됨 .xlam 엑셀 추가기능 파일, vba 코드 포함

[엑셀vba] 폼으로 달력만들기

엑셀vba의 사용자 정의 폼을 이용해서 달력을 만들어보았다. 약간의 노가다가 필요하였다. 1. 폼 구성 커맨드버튼 2개와 레이블 48개, 프레임 1개를 이용해서 폼을 구성하였다. - 레이블 사용처 1) 년도 표시 2개: 숫자, 년 2) 월 표시 2개: 숫자, 월 3) 달력 요일 7개: sun, mon, tue,wen... 4) 달력 일 35개: 1일 부터 마지막 일 5) 선택 날짜 표시 2개 2. 코드 달력코드는 모듈 3개와 폼 1개로 이뤄져있다. -모듈 사용처 1) 달력에 날짜 표시 (1,2,3,4,....,31) 2) 글자의 볼드 해제 3) 달력 날짜 표시 삭제 -폼에 사용된 코드 1) 왼쪽 화살표 버튼: 이전 달로 이동 2) 오른쪽 화살표 버튼: 다음 달로 이동 3) 폼 열렸을 때 초기화 4) 날짜..

프로그램/완료 2020.11.19

[엑셀vba] batch 파일을 만들어서 실행시키자!

텍스트 파일 쓰기와 같은 방법으로 배치(batch) 파일을 만들어보자 배치 파일은 cmd 명령어를 이용한 프로그래밍이라 할 수 있다. 간단히 ping 보내는 파일을 만들어보겠다. 1. 파일 생성 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Option Explicit Sub Create_Batch_File() Dim FILE_Path As String FILE_Path = "C:\Users\S-PC-01\Desktop\test\ping.bat" Open FILE_Path For Output As #1 Print #1, "ping -t 8.8.8.8" Close #1 End Sub Colored by Color Scripter cs 1) FILE_Path 변수에 파일확장자를 포함한 경로..

[엑셀vba] debug.print 사용하기

vba 사용중 코드의 결과가 어떻게 나오는지 궁금할 때 사용하면 유용하다. 암산으로도 가능한 코드를 작성하고 실행해본다. 결과는 어디서 확인???? 직적 실행 창에서 할 수 있다. 'ctrl + g'를 누르거나 '메뉴>편집>직접 실행 창'으로 열 수 있다. 확인 해보면 4라는 숫자가 적혀있음을 볼 수 있다. 정말 쉽군 그리고 직접 실행창은 아무거나 입력할 수 있다. 굳이 쓸일은 별로 없겠지만 ...

[엑셀vba] 열려있는 인터넷 익스플로러를 컨트롤 해보자

이미 열려있는 익스플로러를 컨트롤하고 싶다. 그래서 구글링을 통해 배워봤다. 1. 준비 VB편집기에서 Microsoft Internet Controls를 참조 추가하면 준비 끝 2. 코드 1234567891011121314151617 Dim IE As SHDocVw.ShellWindows Dim wanna_IE As SHDocVw.InternetExplorer Set IE = New SHDocVw.ShellWindows For Each wanna_IE In IE If wanna_IE.LocationName = "Naver" Then MsgBox "네이벼 열려있음", vbInformation, "확인" Exit Sub End If Next wanna_IE End SubColored by Color Scri..

[엑셀vba] 셀에 엑셀 함수 입력해서 사용하기

엑셀 vba를 이용해 셀에 함수 수식을 넣어보자. 1. 예시 B3 ~ E3의 합을 A3 셀에 입력하는 vba 코드를 작성하고 실행하면 10이 입력된다. 하지만 C3 값이 변경된다면 A3도 변할까??? ㄴㄴ 변하지 않는다. A3에는 값이 들어갔기때문... 그래서 값대신 엑셀 함수 =SUM(range)를 입력해보자. 2. 사용법 Sub SUM() Cells(3, "A") = "=SUM(B3:E3)" End Sub ;; 그냥 문자열 입력하듯이 하면 끝 넘 쉽군.. 근데 범위가 변경되거나 변수를 사용해야 된다면??? Sub SUM() Dim x As Integer Dim y As Integer x = 3 y = 3 Cells(3, "A") = "=SUM(B" & x & ":E" & y & ")" End Sub ..

[엑셀vba] Module 이름을 바꿔보자

엑셀vba를 사용하다가 모듈을 추가했는데 그 수가 많을 때 module1, module2, .... . module14 이렇게 표현된다면 뭐가 뭔지 헷갈린다. 모듈을 우클릭하면 이름바꾸기 옵션이 보이지 않는다. 그러나 VBA의 속성 창으로 모듈의 이름을 변경할 수 있다. 보기 메뉴에서 속성 창을 클릭하면 속성창이 나타난다. (VBA 화면에서 F4 키를 눌러도 나타남) 속성 창에는 이름 항목만 존재하고 요걸 바꾸면 모듈의 이름이 변경된다. ※ 주의점: 모듈 이름과 프로시저 이름은 다르게 설정해야함. 같을 경우 런타임 '13오류를 발생시킨다

[엑셀vba] 사용자 정의 폼에서 키 입력 받고 이벤트 실행하기

사용자 정의 폼에서 키보드 입력을 받고 이벤트를 실행해보자! 1. 키 입력받는 코드 입력받은 키 값을 표시할 용도로 레이블 하나를 생성하고 키를 입력했을 때 폼 화면에 나타나도록 만들어봤다. 키 입력이 있을 때만 표시하고 입력이 없으면 표시되지 않는다. Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Dim Key As String Key = Chr(KeyAscii) Label1.Caption = Key End Sub 사용자 정의 폼에서 아무 키를 누르면 아스키코드의 10진수로 UserForm_KeyPress에 전달된다. ex) A = 65, a = 97 소문자 a를 입력하면 여기에 해당하는 아스키코드값인 97이 전달되고 ch..

반응형