목록vba (68)
rand(life)
이동 옵션 (F5 키 - 옵션)은 여러모로 쓸 모가 많은 기능이다. 그런데 가끔씩, "마지막 데이터 셀"이 의도대로 기능하지 않을 때가 있다. 우리 생각에는 이 기능이 "현재 데이터 중에서 맨 마지막행,열에 있는 셀"을 보여준다고 생각하는데실제로 해보면 "지금까지 이 시트에서 기록되었던 셀 중에서 맨 마지막행.열에 있는 셀"을 보여주는 것이다. 즉, 한번이라도 값이 기록된 적이 있었던 셀 전체 중에서 맨 끝셀을 보여준다. 예를 들어, A1셀에 데이터가 있는 상태에서 A1048576 셀 (A열의 맨 마지막 행이다)에 데이터를 기록했다가 삭제하면이동 옵션에서 마지막 데이터 셀을 선택하고 확인하면 일반인의 생각에는 A1셀로 이동해야겠지만 실제로는 A1048576 셀로 이동한다. 물론, 이 현상은 파일을 저장하..
엑셀파일을 열지 않은 상태로 해당 파일안에 있는 시트이름을 가져오는 코드이다.출처는 여기이다. 제대로 동작하기 위해서, 선행해야할 작업이 있다. VB편집기에서 도구 - 참조를 실행 Microsoft ActiveX Dara Objects 2.x Library Microsoft ADO Ext. 2.x for DDL and Security위 두 항목을 체크하고 확인한다. Sub GetSheetNames() '도구 - 참조에서 아래 두 개 체크 해야함 'Microsoft ActiveX Dara Objects 2.x Library 'Microsoft ADO Ext. 2.x for DDL and Security Dim cn As ADODB.Connection Dim cat As ADOX.Catalog Dim t A..
사용자 정의 폼은 아직 익숙하지 않다원래는 "어떤 시트에 있는 그림 중 랜덤으로 다른 시트에 불러오고 싶다"는 지식인 질문이 있어서 거기에 대한 답을 하려고했다.그림 자체만 불러오는 것은 쉽다 Set ws = Sheets("sheet2") For Each pic In ws.Pictures ReDim Preserve arr(1, i) arr(0, i) = pic.Name arr(1, i) = pic.TopLeftCell.Address i = i + 1 Next pic 이런 식으로 Sheet2에 있는 그림의 이름을 배열로 받은 다음, 배열의 인수를 랜덤으로 돌려서그 인수를 가진 배열에서 그림의 이름을 받아와서 시트에 불러오면 된다. (복사 - 붙여넣기) 그런데, 조건이 하나 있었던 것이 "이미지 틀"에 불러..
가나다 순이 아니라 사용자가 지정한 순서대로 정렬하는 매크로이다다른 책에서는 아래와 같이 나와있었는데 엑셀2016 환경에서 적용해보니 잘 안된다. 확인해볼 필요가 있다. .sortfields.add key:=range("a2"), customorder:="lee,park,kim" .apply 다음은 Stack Overflow에서 가져온 코드이다. Dim vCustom_Sort As Variant Dim lc As Long vCustom_Sort = Split("Body,Chassis,Theta,PC Forklift,5S", ",")Application.AddCustomList ListArray:=vCustom_Sort With ActiveSheet .Sort.SortFields.Clear lc = .Ce..
텍스트파일의 내용을 한 줄씩 읽어, 문자열을 탭을 기준으로 분리하여 배열변수에 넣기 위한 코드이다. Dim str As String Dim arr() Dim ifn As Long ifn = FreeFile Open fname For Input As #ifn Do Until EOF(ifn) Line Input #ifn, str arr = Split(str, vbTab) Loop 여기서 Freefile이라는 함수를 사용해서 ifn에 숫자를 할당하는데, 왜 이런 작업을 해야하는가는 질문에 대한 대답이다. 답변1 쉬운 예를 들어 보죠. 철수, 영희가 있는데 좌석번호를 항상 철수에게는 1번, 영희에게는 2번을 준다고 하면 좌석이 비어있는 경우에는 아무런 문제가 발생하지 않습니다. 하지만, 다른 누군가가 1번 좌석..
지식인에서 엑셀 카테고리에는 잘 올라오지 않는 질문이 하나 올라왔는데, 엑셀보다는 수학과 더 관련이 있는 것 같다. 바로 "어떤 점이 닫힌 다각형의 내부에 있는가?" 를 알게 해 주는 방법을 묻는 질문이었다. 관련한 로직은 수학 관련 블로그에 많이 있지만, 그림 하나로 대체하려 한다. 자세한 설명은 링크 참조. 위 그림에서 A와 B 두 개의 점이 있는데, A는 다각형의 외부, B는 다각형의 내부에 있다. 그것을 알 수 있는 방법은, 해당 점에서 오른쪽으로 (X축이 커지는 방향) 수평선을 그어서, 다각형의 선분과 교차하는 지점의 수를 세어보는 것이다. 교차점의 갯수가 홀수이면 다각형의 내부에 있는 것이고, 짝수이면 외부에 있는 것이다. 눈으로 보면 어린아이도 알 수 있는 것이지만, 이것을 알고리즘으로 구현..
지정된 셀 범위를 png, jpg 등 그림 파일로 저장하는 매크로이다지식인 질문글에 대한 답변이다. Option Explicit Sub Macro() Dim rng As Range Dim T As String T = "d:\" & "배정표_" & Format(Date, "yymmdd") Set rng = Range("A1:AI42") rng.CopyPicture xlScreen, xlPicture With ActiveSheet.ChartObjects.Add(0, 0, rng.Width, rng.Height) .ShapeRange.Line.Visible = msoFalse .Select .Chart.Paste .Chart.Export T & ".png", "PNG" .Delete End With MsgBo..
지식인 질문에 대한 답. 다른 분의 답이지만 연구를 위해 가져왔다. 이런 구조에서, A와B열에서 가장 많이 나온 문자, 또는 두번째로 많이 나온 문자를 찾는 문제이다. VBA로 해야한다.코드 전체는 첨부화일을 참고하면 된다. 코드 중에서 오늘 살펴볼 부분은 아래 부분이다. v = Intersect(ws.UsedRange, 범위).Value For r = 1 To UBound(v, 1) For c = 1 To UBound(v, 2) d(v(r, c)) = d(v(r, c)) + 1 Next Next그 중에서도 파란색으로 표시한 부분이 제일 어려웠다. 여기서 d는 지난 포스트에서 설명한 Scripting.Dictionary이다. 오랜 시간동안 F8키를 누르면서 살펴보았는데, 결론은 다음과 같다. 위의 그림 ..