목록컴퓨터/엑셀 (226)
rand(life)
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 통합 문서는 추가 기..
A열과 같이 같은 문자열이 반복되어 나오고 있을때, 가장 많이 나오는 문자열이 무엇인지, 또는 두 번째로 많이 나오는 문자열이 무엇인지를 알 수 있는 함수입니다.=INDEX(A1:A6,MATCH(LARGE(FREQUENCY(MATCH(A1:A6,A1:A6,0),MATCH(A1:A6,A1:A6,0)),C1),FREQUENCY(MATCH(A1:A6,A1:A6,0),MATCH(A1:A6,A1:A6,0)),0))배열함수이므로, Ctrl-Shift-Enter해야합니다. 길어서 복잡해보이지만, FREQUENCY(MATCH(A1:A6,A1:A6,0),MATCH(A1:A6,A1:A6,0)) 이 부분이 반복되어서 그런것입니다. 이 부분이 하는 역할은, A열의 각 문자열이 나오는 횟수를 배열로 만드는 것입니다. MATCH..
같은 제목으로 여러번 포스트를 올린적이 있습니다.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메서드가 유용하게 사용된 경우. 기본적인 몇가지 코드. 위의 링크에서는 복사가 안되어서...
year grade 2014 A 2015 B 2016 D 2017 A 위와 같은 표를 위의 그림처럼 차트로 표현하고 싶을때가 있다. 그런데 엑셀에서 Y축은 숫자만 가능하지, 저렇게 문자로는 가능하지 않다. 그래서 굳이 저렇게 표현하려면 약간의 편법을 써야한다.외국의 한 사이트에서 가져온 방법이다. (역시 덕중에 제일은 양덕이라고, 엑셀의 기상천외한 답들은 대부분 양넘들이다) year Number grade 2014 10 A 2015 20 B 2016 40 D 2017 10 A 우선, 위와 같이 문자에 대응하는 숫자를 넣는다. 차트를 만들었을때 문자등급 사이의 간격을 생각하여 적당한 숫자로 넣는다. 수작업으로 넣어도 되고, 데이터가 많다면 따로 테이블을 만들어 VLOOKUP을 사용해서 수식으로 넣을 수도 ..
위 그림 A:C열의 데이터에서 E1의 조건에 해당하는 값을 F:H에 불러오는 수식이다. =IFERROR(INDEX($B$2:$B$9,1/LARGE(INDEX((ISNUMBER(FIND($E$2,$C$2:$C$9)))/ROW($C$2:$C$9),),ROW(C4))-1),"") 이 수식에 대한 설명은 어느 분이 해놓으신 수식 설명으로 대신한다. 완전히 똑같은 수식은 아니지만, 대략적인 원리는 같다. 설명이 깔끔하고 이해하기 쉽게 되어있다.