목록컴퓨터/엑셀 (226)
rand(life)
성명 주민번호 김1 111111-1111111 김2 111111-1111112 김3 111111-1111113 김4 111111-1111114 김5 111111-1111115 김6 111111-1111116 이런식의 구조로 된 표에서 사람이름을 주면 주민번호를 찾는 방법은 vlookup을 쓰면 간단히 해결된다. 하지만, 데이터가 좌우로 넓게 퍼져있다면? 성명 주민번호 성명 주민번호 성명 주민번호 김1 111111-1111111 이1 222222-2222222 박1 333333-3333333 김2 111111-1111112 이2 222222-2222223 박2 333333-3333334 김3 111111-1111113 이3 222222-2222224 박3 333333-3333335 김4 111111-111..
sumif 함수는 여러 시트에 걸쳐서 적용할 수는 없다는 내용의 글을 이전에 작성한 적이 있습니다.그런 종류의 질문이 올라오면 VBA를 이용하던지 데이터- 통합 기능을 이용하라는 답변을 달았습니다.그런데, 우연히 이런 답변을 발견했습니다. 역시 큰 형님의 작품입니다. 비슷한 예제를 만들어 첨부하였습니다. 해당 예제에서 수식 계산 기능을 이용해, 이 수식이 어떤 식으로 작동하는지 보려고 합니다. =SUMPRODUCT(SUMIF(INDIRECT(ROW(INDIRECT("1:3"))&"월분!$C$5:$C$12"),C4,INDIRECT(ROW(INDIRECT("1:3"))&"월분!$D$5:$D$12"))) 일단, 수식을 전체적으로 보면맨 바깥에 sumproduct함수가 감싸고 있고그 안에 sumif함수가 있습니..
지식인 질문 중 큰형님 답변 F:H 범위와 같이 주어진 표를 이용해노란색 셀에 들어갈 수식을 찾는 문제이다. 처음에는 If 구문을 세 번 쓰고그 안에서 match 함수를 이용해 찾는다고 생각을 했다. 오른쪽으료 표가 더 길어지만 VBA를 이용하고...... 그런데 큰형님의 답은=MAX(INDEX(($F$2:$H$6=B2)*$F$1:$H$1,)) 아주 간결하다.이 수식이 어떻게 동작하는지 알려면 엑셀에서 범위의 곱셈이 어떻게 동작하는지 알아야한다.엑셀의 범위는 수학에서 배우는 행렬과 유사하게 생겼지만 연산은 약간 다르다 일단 수학에서 말하는 행렬의 연산을 위키백과에서 알아보면 다음과 같다. 행렬 {\displaystyle A={\begin{bmatrix}a\\b\end{bmatrix}}}와 {\displa..
지식인 질문에 대한 답이다. 내가 한 답은 아니지만, 발상이 놀라와서 가져온다. 1부터 n까지의 숫자 합을 구하는 식은n∑ k 이렇게 표현이 된다 k=1 이것을 엑셀에서 수식으로 표현하는 방법이다. 정답은 =SUMPRODUCT(ROW(OFFSET(A1,,,A1,))) offset 함수의 성질을 이용했다.offset함수의 설명을 반복한다. offset 함수의 구문은 다음과 같다. OFFSET(reference, rows, cols, [height], [width])이 중, 뒤에 height와 width를 이용한 방법이다. 평소에 이 옵션을 빈칸으로 주면 offset함수는 reference위치에서 rows만큼 아래로, cols만큼 오른쪽으로 간 위치의 셀값을 보여준다. 하지만 height와 width를 표시..
지식인 답변에서 가져온 것이다 이런 데이터가 있을 때 중복된 숫자는 한 번으로 치고중복없이 아래와 같이 숫자를 나열하는 방법이다 수식은 다음과 같다. {=IFERROR(SMALL(IF($B$4:$E$6>F4,$B$4:$E$6),1),"")} 배열수식이므로 마지막에 Ctrl-Shift-Enter해야한다 대략 수식의 구조를 설명하면, $B$4:$E$6 는 A부분의 데이터이다. 중복된 값을 포함해 여러 숫자가 있는 범위이다F4는 비어있는 셀이다. 여기서 오른쪽이나 아래쪽으로 끌어채우기를 하면, 이전에 나온 값보다 더 큰 값의 범위를 지정해줄 수 있다. IF($B$4:$E$6>F4,$B$4:$E$6)$B$4:$E$6 중에서 F4(현재는 0)보다 크다면 해당 셀값을, 아니라면 False값을 배정한다. (IF 조건..
엑셀파일을 열지 않은 상태로 해당 파일안에 있는 시트이름을 가져오는 코드이다.출처는 여기이다. 제대로 동작하기 위해서, 선행해야할 작업이 있다. 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..