match 함수의 -1 인수의 의미 (셀병합상태에서 수식)

이미지
역시  네이버 지식인 에서 누군가가 올려주신 해답에서 연구해볼만한 것입니다. 이렇게 데이타가 있을 때 이런 식으로 합계를 내야합니다. 문제는 G,H,I열이 셀병합이 되어있다는 점입니다. 셀병합이 안되어있다면 SUMIFS함수로 간단하게 해결됩니다만.... 여기서 어떤 분이 답을 달았습니다. 이렇게하면 셀병합을 해제하지 않아도 답을 구할 수 있습니다. =SUMIFS(D:D,A:A,INDEX($G$3:G13,MATCH("",$G$3:G13,-1)),B:B,INDEX($H$3:H13,MATCH("",$H$3:H13,-1))) 이 수식의 핵심은  INDEX($G$3:G13,MATCH("",$G$3:G13,-1)) 이 부분입니다. 일단 INDEX함수는 주어진 범위안에서 두번째 인수값 만큼의 위치에 있는 값을 보여줍니다. 그리고 두번째 인수는 MATCH함수가 반환하는 값인데, 해당 행의 G열에 있는 셀값(여기서는 G13)이 빈칸이면 그 위쪽에서 빈칸이 아닌 셀(여기서는 G12)에 있는 텍스트를 가져오는 역할을 합니다. 셀병합을 하면 제일 첫셀(여기서는 G3과 G12)에만 데이타가 들어있고, 나머지 병합된 부분에는 아무 데이터도 들어있지 않습니다. 그래서 엑셀에서 수식을 단순하게 만드려면 셀병합은 가급적 피하는 것이 좋습니다 . 아무튼, 여기서  INDEX($G$3:G13,MATCH("",$G$3:G13,-1)) 이 수식은 G3:G13의 범위 안에서  MATCH("",$G$3:G13,-1)) 의 값만큼의 위치에 있는 값을 구합니다. 그리고 MATCH("",$G$3:G13,-1) 이 수식이 핵심중의 핵심인데요, 그 중에서 -1이라는 마지막 인수입니다. match_type  동작   1 또는 생략 :   MATCH

중복된 텍스트 제외하고 고유 텍스트 개수 세기

이미지
네이버 지식인 에서 알게 된 좋은 수식을 소개합니다. 이런 식으로 A1:D2 범위 내에 사람 이름이 중복된 것 포함해서 여러개 있습니다. 이때  중복된 이름은 제외하고 모두 몇 명의 이름이 있는지  알고 싶을 때 쓰는 수식입니다. 수식은 위와 같습니다.  일단, 이 수식의 기본적인 구조는,  각 사람의 이름이 나올 때마다 그 자리에 전체 범위에서 그 사람의 이름이 나오는 횟수를 분모로, 1을 분자로 한 값을 배정하여, 나중에 그 모든 숫자를 합하는 것입니다. 간단한 예를 들어서, 다음과 같이 이름이 6개가 배열되어 있다고 합시다. 홍길동,장길산,홍길동,홍길동,홍길동,장길산 그럼 이름 대신에 그 자리에 다음 숫자를 배당합니다. 0.25, 0.5, 0.25, 0.25, 0.25, 0.5 홍길동은 총 4번 나오니 1/4해서 0.25를 홍길동이 나오는 자리마다 배정합니다. 장길산은 총 2번 나오니 1/2해서 0.5를 장길산이 나오는 자리마다 배정합니다. 이제 모든 숫자를 더하면 0.25+ 0.5+ 0.25+ 0.25+ 0.25+ 0.5 = 2  그래서 중복된 이름을 제외하고 모두 2명의 이름이 있다는 결과가 나옵니다. 이제 수식을 살펴보겠습니다. =SUMPRODUCT((A1:D2<>"")/(1-(A1:D2<>"")+COUNTIF(A1:D2,A1:D2))) (엑셀에서 수식-수식분석-수식계산을 하시면 단계별로 수식이 어떻게 계산되는지 볼 수 있으므로 수식을 이해하는데 도움이 됩니다.  밑줄이 쳐진 부분은 이번 단계에서 계산이 될 예정이라는 것을 의미하고 이탤릭으로 표시된 부분은 바로 이전 단계에서 계산이 된 결과라는 것을 보여줍니다) 이 부분은 A1:D2 범위에서 공백이 아닌, 즉 이름이 있는 셀을 골라내는 것입니다. 그래서 이름이 들어있으면 TRUE, 공백이면 FALSE

INDEX 함수에서 몰랐던 기능

이미지
"범위&범위"라고 주면 범위끼리 문자열을 합하여 배열을 만든다 예를 들어, 이런 형태의 데이터를  이렇게 정리하기 위해 수식을 J3셀에서는  =INDEX($B$3:$D$14,MATCH($H3&$I3,INDEX($A$3:$A$13&$A$4:$A$14,),0),COLUMNS($J3:J3)) M3셀에서는 =INDEX($B$3:$D$14,MATCH($H3&$I3,INDEX($A$3:$A$13&$A$4:$A$14,),0)+1,COLUMNS($M3:M3)) 이렇게 준다. 여기서 가운데 있는  MATCH($H3&$I3,INDEX($A$3:$A$13&$A$4:$A$14,),0) 이 수식의 의미는 다음과 같다 MATCH($H3&$I3  H3&I3의 값의 위치를 찾는데 H3&I3= 김태희서울   INDEX($A$3:$A$13&$A$4:$A$14,) A$3:$A$13와 $A$4:$A$14의 문자열을 합친 배열 중에서 찾고  김태희서울,장동건수원,유지태인천,아유미일본,유승호부산,유리서울  0  비슷한 글자가 아니라 정확히 일치하는 글자를 찾아라 이 중에서  INDEX($A$3:$A$13&$A$4:$A$14,) 여기를 잘 보면 맨 뒤에 콤마만 있고 그 뒤가 없다 바로 INDEX 함수의 설명 중 다음 사항에 해당한다. 주의 reference와 area_num으로 특정 범위가 선택된 후에는 row_num과 column_num이 특정 셀을 선택합니다. 즉, row_num 1은 범위의 첫째 행이고, column_num 1은 첫째 열의 방식으로 선택됩니다. INDEX 함수로 반환되는 참조는 row_num과 column_num이 교차되는 위치입니다. row_num이나 column_num을 0으로 설정하면 전체 열이나 행에 대한 참조가 각각 반환됩니다. 즉, INDEX함수는 주로 첫번째

한 폴더 안의 모든 파일에서 특정 시트 복사해오는 vba

네이버 지식인에서    큰형(ks_1862)님의 답변 중 참고하였습니다. D:\TEMP 라는 폴더 안에 있는 모든 XLSX 확장자를 가진 엑셀파일에서 "통계"라는 이름을 가진 시트를 복사해옵니다. Option Explicit Sub MergeWBs() Dim wbDst As Workbook Dim wbSrc As Workbook Dim wsSrc As Worksheet Dim MyPath As String Dim strFilename As String Application.DisplayAlerts = False Application.EnableEvents = False Application.ScreenUpdating = False MyPath = "D:\temp" Set wbDst = ThisWorkbook strFilename = Dir(MyPath & "\*.xlsx", vbNormal) If Len(strFilename) = 0 Then Exit Sub Do Until strFilename = "" Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename) Set wsSrc = wbSrc.Worksheets("통계") wsSrc.Copy after:=wbDst.Worksheets(wbDst.Worksheets.Count) wbSrc.Close False strFilename = Dir() Loop wbDst.Worksheets(1).Delete Application.DisplayAlerts = True Application.EnableEvents = True Application.ScreenUpdating = True End Sub 2017.2.16 몇가지 기능을 추가한 버전입니다 1. '통계&

couch potatoes의 유래

couch potato의 의미는 다 아실 것이고, 왜 하필이면 "감자"라고 했을까 궁금해서 찾아보았더니 다음과 같은 글이 있었습니다.  http://www.todayifoundout.com/index.php/2015/01/origin-trademarking-couch-potato/ 전문이 영어로 되어 있어서 한번 번역해 보았습니다. 혹시 능력자 분 수정의견 있으면 환영합니다. ----------------------------------------------------------------------------------------------  여러분이 어떤 사람을 게으르다고 부르고 싶다면 , 그렇게하는 유서깊은 방식은 그들을 'couch potato' 라고 부르는 것이다 . 그런데 왜 우리는 게으른 사람을 감자에 비유하고 왜 어떤 관련없는 사람이 그런 우스꽝스럽게 들리는 표현에 대해 상표권을 가졌는가 ? 대부분의 어원연구와는 달리 , 우리는 문제시 되는 그 표현이 처음으로 입밖으로 소리내어 말해진 정확한 날자는 물론 처음으로 대중의 소비를 위해 활자로 쓰여진 정확한 날자를 안다 . 후자에 관해서는 , 인쇄된 글자로 나타난 첫번째는 ' 행렬이 갈 길을 따라 견인되는 동안 텔레비전을 보면서 소파에 누워있을 couch potatoes' 라고 쓴 1979 년 LA Times 의 한 기사였다 . 전자에 관해서는 , 그 표현을 고안한 사람에 따르면 1976 년 7 월 15 일에 한 전화통화중에 그 표현을 처음으로 말했다 . 좀 더 구체적으로 말하자면 , 그 표현이 생겨나게 한 사람은 Tom Lacino 였다 . 그는 그 표현을 만들어 낼때 ' 친구에게 전화하고 있었습니다 . 그의 여자친구가 받