목록컴퓨터/엑셀 (226)
rand(life)
지식인 질문에 대한 답이다. 위의 표에서 사람이름 옆에 있는 날짜가 아래 표에서 각 사람 이름 아래에 있는 날짜 목록에 없으면 "O", 있으면 "X"를 표시하는 방법이다. 처음에는 다음과 같이 했다. =IF(COUNTIF(OFFSET($H$1,0,MATCH(B2,$A$8:$C$8,0),100,1),A2),"X","O") offset 함수의 구문은 다음과 같다. OFFSET(reference, rows, cols, [height], [width])이 중, 뒤에 height와 width를 이용한 방법이다. 평소에 이 옵션을 빈칸으로 주면 offset함수는 reference위치에서 rows만큼 아래로, cols만큼 오른쪽으로 간 위치의 셀값을 보여준다. 하지만 height와 width를 표시한 offset함수..
위의 그림처럼 D2셀에 사진의 이름을 주면, 그 이름과 같은 이름의 사진을 D5셀에 나타나도록 하는 방법이다.별도의 시트에 위와 같이 사진 이름과 사진을 매칭시켜 정리해두어야한다. 그 다음, 사진 하나를 아무거나 복사한다. (Ctrl-C)이제 사진이 나타나야하는 셀을 선택하고 그림으로 붙여넣기를 한다. "붙여넣기"에서 역삼각형을 클릭하면 나타나는 메뉴에서 "그림"을 선택하면 된다. 이제 그림을 셀의 크기에 맞게 적당히 조정해준다. 수식 - 이름관리자로 가서 이름정의를 해준다.상황에 따라 다르겠지만, 첨부화일의 경우에는 "사진위치"는 =INDEX(사진범위,MATCH(Sheet2!$D$2,사진이름,0),1)"사진범위"는 =데이타!$C$2:$C$4"사진이름"은 =데이타!$B$2:$B$4 이렇게 설정되어있다.이..
텍스트파일의 내용을 한 줄씩 읽어, 문자열을 탭을 기준으로 분리하여 배열변수에 넣기 위한 코드이다. 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키를 누르면서 살펴보았는데, 결론은 다음과 같다. 위의 그림 ..
오늘의 질문글은 엑셀에서 두열의 셀값을 비교하여두개의 셀값이 같으면하나의 값을 삭제하는 매크로이다. 이정도는 쉽지... 하면서 내가 만든 코드는 다음과 같다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..