목록vba (68)
rand(life)
오늘의 질문글은 엑셀에서 두열의 셀값을 비교하여두개의 셀값이 같으면하나의 값을 삭제하는 매크로이다. 이정도는 쉽지... 하면서 내가 만든 코드는 다음과 같다Sub del_dup() Dim rng As Range, r As Range Set rng = Range("B1", Cells(Rows.Count, "B").End(3)) For Each r In rng If r = r(, 2) Then r(, 2).ClearContents End If Next End Sub 답변을 달려고 했더니, 큰형님의 답변이 이미 달려있다.Sub Macro() Dim rng As Range Application.ScreenUpdating = False On Error Resume Next For Each rng In Column..
지난 번에 배웠던 것을 써먹은 사례이다. 위와 같이 A1:D1의 숫자 배열과 같은 배열을 아래 5행에서 찾아서, 그 바로 아래 행에 색깔을 칠하는 매크로이다. 포인트는 파란색 칠한 부분이다. Option Explicit Sub match_serial() Dim v As String Dim a As Range Dim wf As WorksheetFunction Set wf = WorksheetFunction v = Join(wf.Transpose(wf.Transpose(Range("a1:d1")))) For Each a In [a5:L5] If Join(wf.Transpose(wf.Transpose(a.Resize(, 4)))) = v Then a.Offset(1).Resize(, 4).Interior.Co..
CreateObject("Scripting.FileSystemObject") 를 이용하는 방법이다. (파란색 글씨가 핵심 부분이다) 출처: https://stackoverflow.com/ Option Explicit Public Arr() As String Public Counter As Long Sub macro() Dim myArr strPath = "d:\data\" myArr = GetSubFolders(strPath)Counter = 0 End Sub Function GetSubFolders(RootPath As String) Dim fso As Object Dim fld As Object Dim sf As Object Dim myArr Set fso = CreateObject("Scriptin..
엑셀파일이 열릴 때 자동으로 특정 매크로를 실행하고 싶다면, workbook_Open 이벤트를 사용한다. 그러려면 일반적으로 매크로를 작성할때처럼 VB편집기 - 삽입 - 모듈로 해서는 안된다. 일단 Alt-F11 해서 VB편집기를 열고, 좌측에 있는 프로젝트탐색기(Ctrl-R)에서 '현재통합문서'를 더블클릭한다 그러면 아래와 같은 창이 뜨는데, 거기서 역삼각형 두개를 각각 클릭하여, Workbook과 Open을 선택하면 된다 이제 그림에 있는 화살표가 가리키는 부분에 작업할 내용의 매크로를 넣으면 된다.workbook 이벤트는 다음과 같은 것들이 있다. (출처: msdn.microsoft.com) ActivateEvent 통합 문서를 활성화할 때 발생 합니다. AddinInstall 통합 문서는 추가 기..
같은 제목으로 여러번 포스트를 올린적이 있습니다.2010/06/20 - [컴퓨터/엑셀] - [엑셀, VBA] 같은 조건의 문자열 찾아 합치기2011/06/30 - [컴퓨터/엑셀] - [엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 22015/10/30 - [컴퓨터/엑셀] - [엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 32017/03/18 - [컴퓨터/엑셀] - [vba] 같은 조건의 문자열 찾아 합치기 (매크로버전)2017/04/03 - [컴퓨터/엑셀] - [엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 4모두 다 VBA(매크로)를 사용한 것이었습니다. (사용자 정의함수도 결국은 VBA를 이용한 것이므로) 그런데, 엑셀 2016버전에서 새로 나온 함수를 사용하면 VBA없이도 가능하게..
now 현재의 날짜와 시간 (ex: 2017-07-16 오후 3:17:23)date 현재의 날짜만 (ex: 2017-07-16) time 현재의 시간만 (ex: 오후 3:17:59 )weekday(날짜, 옵션) 요일 옵션: 주의 첫요일 설정한다. 상수: 1 일요일, 2 월요일 3, 화요일... 결과값: 1~7의 숫자로 나옴예를 들어, weekday(date, vbmonday) 라고하면 오늘 날짜가 무슨 요일인지를 월요일을 1로 해서 숫자로 알려준다. 이 글을 쓰는 날은 일요일ㅇ이므로, 7이 나온다.만약, weekday(date, vbsunday)라고 했다면 1이 나온다. DatePart (옵션, 날짜/시간): 날짜.시간에서 필요한 부분 추출 옵션: yyyy 년도, q 분기, m 달, y 년 중 몇번째 날..
중복없이 값을 배열에 넣기 위해 그동안 컬렉션을 사용했었는데, 많이 불편했다. 그런데 이번에 Scripting.Dictionary를 사용하는 방법을 알게 되었다. 원문은 여기 그리고 여기번역문은 여기이다. 상당히 편리하다. 원문의 설명에 따르면 Scripting.Dictionary를 사용하기 위해서는 VB편집기에서 설정을 해주어야한다고 한다. VB편집기 상단 - 도구 - 참조에서Microsoft Scripting Runtime을 체크하면 된다그런데 엑셀2016 기준으로 위의 체크를 하지 않아도 작동한다. 왜 그런지는 좀 더 알아봐야 할 듯 해당 기능을 이용한 매크로 예제이다. exists메서드가 유용하게 사용된 경우. 기본적인 몇가지 코드. 위의 링크에서는 복사가 안되어서...
cmd 명령의 결과를 텍스트파일로 받기아래는 ping의 결과 Option Explicit Sub checkping() Dim cmd As String Dim res, goWSH, aRet Dim s As String, e As String Set goWSH = CreateObject("WScript.Shell") cmd = "ping -n 1 " & [a1] Set aRet = goWSH.exec(cmd) res = CStr(aRet.stdout.readall()) s = InStr(res, "(") e = InStr(res, "),")[b1] = Mid(res, s + 1, e - s - 1)End Sub