Programming/VBA

공부한 내용을 정리합니다
Programming/VBA

VBA로 다른 시트의 내용 비교하기

한 파일 내 as Worksheets("Sheet1") 로 워크시트를 각각 선언하면 된다. 다른 파일 Dim bookA as Workbook 위와 같이 워크북 변수를 선언해 준 다음 set bookA = Workbooks("firstExcelFile.xlsx") 첫번째 엑셀 파일명을 확장자 포함하여 입력하면 된다. HTML 삽입 미리보기할 수 없는 소스 [VBA] 다른 시트의 내용과 비교하기 이번에 소개해드릴 부분은 시트간 데이터를 비교하는 방법입니다. VBA 로 뭔가를 하게되면서 가장 유용하게 많이 사용하는 것 중 하나죠. 예를 들면 Sheet1 에 어떤 데이터 리스트가 있고 Sheet2 에 diy-dev-design.tistory.com HTML 삽입 미리보기할 수 없는 소스

Programming/VBA

VBA / 메모에만 그림넣기

메모는 .Comment.Shape 으로 컨트롤할 수 있다. fileName = strPath & "\" & rngC.Value & ".jpg" 이런 식으로 strPath에 저장한 폴더 경로 + 셀값.jpg인 경로를 지정해줄 수 있다. HTML 삽입 미리보기할 수 없는 소스 (1359) 메모창에 그림 삽입하기 2 (엑셀 VBA 매크로) 선택한 영역의 파일 이름과 경로내의 그림 이름이 일치 시 각 셀의 메모에 그림을 삽입하는 기능. 기존 메... blog.naver.com (1358) 메모있는 셀에만 그림 삽입하기 (엑셀 VBA 매크로) 앞서 해본 "(1357) 메모창에 그림 삽입하기 1 (http://rosa0189.blog.me/60204696281)" 은 선택영역내의 기... blog.naver.com..

Programming/VBA

VBA로 필터링된 데이터만 지우기

이 코드로 개선한 후 이전의 필터되지 않은 값을 각각 숨겨진 행인지 확인하고 지우는 방식보다 속도가 비약적으로 개선되었습니다. 아무래도 한 행씩 지우는 게 아니라 화면을 한꺼번에 delete 하는 구조라서 그런 듯합니다. Sub 필터된_데이터만_지우기() Dim strToday As String Dim filteredRng As Range Application.DisplayAlerts = False strToday = Format(Now(), "yyyy-mm-dd") Range("F1").CurrentRegion.AutoFilter Field:6, Criteria1:="*" & CStr(strToday) & "*" Range("F1").CurrentRegion.Offset(1).SpecialCells(x..

Programming/VBA

VBA / criteria 변수에 저장된 문자열 다름 조건 걸기

오토필터 criteria는 변수에 저장된 문자열인 경우 그냥 '변수명' 으로는 반영이 되지 않는 문제가 있었습니다. 이 문제를 해결하려면 CStr(변수명)을 사용해야합니다. 그리고 왜인지 모르겠지만 정확히 일치(=)나 다름()은 작동하지 않아서 양쪽에 와일드카드(*)를 붙여주는 '포함' 방식으로 하니 문제가 없었습니다. (관련 링크) HTML 삽입 미리보기할 수 없는 소스 [엑셀 매크로 VBA] CInt, CBool, CStr을 이용하여 값 변환하기 엑셀의 워크시트에는 다양한 데이터형을 지원하기 위한 데이터 타입이 있습니다. 이러한 데이터 타입 사이에서 데이터를 변환하는 방법에 대해서 오늘은 알아보도록 하겠습니다. VBA의 대표적 guslabview.tistory.com HTML 삽입 미리보기할 수 없는..

Programming/VBA

VBA로 필터링 된 이외의 행(숨긴 행) 지우기

오늘 날짜인 행만 남기고 삭제하기 오토필터로 오늘 날짜(텍스트)만 필터링하고 나머지 숨긴 행은 지우는 방식입니다. Sub 오늘날짜만_남기기() Dim strToday As String strToday = Format(Now(), "yyyy-mm-dd") Range("F1").AutoFilter Field:=6, Criteria1:=strToday For i = Rows.Count To 1 Step -1 If Rows(i).EntireRow.Hidden = True Then Rows(i).EntireRow.Delete End If Next i End Sub 숨긴 행인지 확인하고 하나하나 지우는 방식이라 시간이 많이 걸려서 개선하게 되었습니다. 개선한 버전 링크는 이쪽. HTML 삽입 미리보기할 수 없는 소..

Programming/VBA

VBA로 다른 시트 값과 비교해서 일치하는 경우 셀 값 바꾸기

data 시트의 AE셀을 지금 시트의 G셀과 비교해서, 일치하는 경우에만 Q셀 값을 '최종완료'로 바꾸는 VBA Sub 확인완료_갱신() Dim rngList As Range Dim rngValue As Range Dim i As Integer With Worksheets("data").UsedRange Set rngList = .Offset(1).Resize(.Rows.Count-1) End With For i = 1 To WorksheetFunction.CountA(Range("A:A")) Set rngValue = rngList.Find(Range("G1").Offset(i, 0)) If Not rngValue Is Nothing Then Range("Q1").Offset(i, 0) = "최종완료"..

Programming/VBA

VBA로 갱신일 자동 기록하기

Q2부터 Q1353의 범위 안에 속하는 셀을 편집하는 경우, 해당하는 행의 T 셀에 yyyy-mm-dd 형식의 날짜를 입력한다. 별도의 모듈이 아니라 해당하는 시트 개체를 더블클릭해서 등록하면 된다. Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("Q2:Q1353"), Target) Is Nothing Then Range("T" & Target.Row).Value = Format(Now, "yyyy-mm-dd") End If End Sub HTML 삽입 미리보기할 수 없는 소스 엑셀 입력 시간 자동 기록 매크로(입력 / 수정 실시간 자동 감지 기록 Timestamp, VBA) 엑셀 매크로로 작성한 간단한 입력 / 수정..

Programming/VBA

VBA 시작하기

최근 엑셀 반복 작업을 하면서 자연스럽게 자동화의 필요성을 느껴 VBA에 대해 알아보게 되었다. VBA란 Visual Basic for Application의 약자로 Microsoft 사에서 제공하는 프로그래밍 언어. Excel, Powerpoint,Word, Outlook과 같은 Microsoft 응용 프로그램을 위한 언어. 엑셀 VBA는 Excel에서 사용자가 원하는 기능을 프로그래밍 언어를 통해 개발할 수 있는 도구이다. .xlsm VBA를 동작시키기 위해서는 .xlsm 확장자 파일로 생성해야 한다. 일반 파일일 경우 저장할 때 xlsm로 다른 이름으로 저장할 것을 알리는 팝업이 뜬다. 시작하는 방법 개발도구>Visual Basic 버튼 or 단축키 Alt+F11로 진입 가능하다. 모듈 모듈은 VB..