목록엑셀 (213)
rand(life)
지난번에 몇번 올라왔던 사용자 정의함수의 매크로 버전이다. 어떤 분이 엑셀이 느려진다고 해서 만들어보았다.속도 자체는 크게 다르지 않은 것 같다. 아무래도 전체 셀을 순환해야하니까....그래도 사용자정의함수였을 때는 셀에 다른 입력을 하거나하면 새로 계산을 하느라 버벅였는데지금은 결과값이 수식이 아니라 텍스트로 입력이 되기 때문에, 새로 계산을 하지 않는다.그 점은 더 나아진 것 같다.Option ExplicitSub CText()Dim strTemp() As StringDim rng1 As RangeDim rng2 As RangeDim rng3 As RangeDim r1 As RangeDim rr1 As RangeDim i As Integer, n As Integer, k As Integer Set r..
엑셀에서 A1,A3,A5,A7 . . . 이런식으로A9999까지 선택하고 싶은데요 일일이 선택하지 않고 한꺼번에 선택하는 방법은 없나요?참고사이트: http://www.iexceller.com/MyXls/VBA_Beginner/VBA_Beginner8.asp 역시 지식인에서 나온 질문이다. 시트를 여러장 선택하는 코드는 지난번 답변한 적이 있기 때문에, 그때 코드를 뒤져봤다 Worksheets(i).Select (False) '시트를 앞시트에 더하여 선택 바로 이 부분이다. 셀 선택하는 것도 이렇게 가능할 거라 생각해서,cells(i, 1).select (false)이렇게 짰다. 그런데 오류가 난다. 인수의 개수나 속성 지정이 잘못 되었습니다찾아보니, 셀을 여러개 선택하는 방법은 VBA함수인 Union을..
지식인에서 들어온 질문.리스트상의 단어가 데이터상의 단어를 포함한 긴 단어에 있을 경우 해당하는 모든 중복되는 데이터에 대해 Listed 밑에 리스상의 단어로 하나만 표기하면 됩니다. 가령 APPLE 이 리스트 단어이면 DATA상에 APPLE_1/APPPL_2가 있으면 그냥 APPLE 만 표기하도록 매크로를 작성해주세요.List에 없는 단어 중 Name에 있으면 Non-listed에 표시해주세요여기서는 안보이지만, Apple, Melon, Strawberry, Pear 등으로 이루어진 List목록이 따로 있다Potato는 List목록에는 없는데 Name에는 있기때문에 Non-listed에 표시된다. 사실 앞의 문제는 해결이 쉽다. .Find 메서드를 이용하면 된다.시트에서 Ctrl-F 를 누른 것과 같은..
'지식인에서 엑셀 관련 질문에 답변을 해주다가 VBA공부를 시작했다. 다음은 어느 분이 '연도-월'의 이름을 가진 시트가 많이 있는 파일에서, 연도별로 시트를 저장하고, 올해 1월과 작년 12월, 그리고 연도가 아닌 글자로 시트명이 된 시트들을 따로 모아 저장해달라는 의뢰(?)에 대한 연구 결과이다파일로 다운로드Option Explicit '변수를 선언해야 사용할 수 있다는 옵션Sub MergeWBs() '매크로 이름Dim i As Integer '순환문 작업에 필요한 변수Dim shtnum As Integer '시트의 총갯수를 저장하기위한 변수Dim sh As Worksheet '선택한 시트를 복사할 때 시트 각각에 배당하는 변수Dim shs As Sheets '선택한 시트 전체에 배당하는 변수Dim ..
왼쪽에 "가"가 있는 숫자의 합을 내려면 A열과 B열만 놓고서는 SUMIF 함수를 쓰는 생각은 쉽게 할 수 있다SUMIF(A:A,"가",B:B)하지만 위의 그림처럼 여러 열에 걸쳐있다면?SUMIF함수를 여러번 더할 것인가?하지만 이럴 때 위의 그림처럼 영역을 지정하면 여러 열에 걸쳐서도 SUMIF함수를 쓸 수 있다게다가 가운데에 비어있는 열이 몇개 들어가도 상관없이 적용된다단, 지금처럼 참조열과 합계열 사이에 비어있는 열이 들어가는 식으로 불규칙적인 부분이 있으면 합계에서 제외된다.즉, =SUMIF(A1:N7,P2,C1:N7)이런 식으로 수식이 되어있다면 참조열인 A열과 합계열인 C열이 2개 간격이므로 그 이후에도 참조열과 합계열이 2개 간격인 규칙으로 N열까지 합계를 낼 수 있다.
B열의 숫자처럼 보이는 것은 vlookup함수로 땡겨온것이라 엑셀에서는 문자 취급한다.B열 합계를 내려면 SUM함수로는 안되고 value함수를 써서 C열에 숫자로 바꾼 다음C열의 합계를 내면 된다.하지만 C열 추가하지 말고 B열에서 바로 수식을 써서 합계를 내고 싶다면?중간에 있는 "휴무"라는 텍스트가 SUM함수에서는 오류를 반환하기 때문에, 이 부분을 어떻게 0으로 인식하도록 만들어주는가가 관건이다. 나도 수식을 만들어보았지만 너무 길었는데, 네이버 지식인에서 언제나 믿고 보는 큰형님이 다음과 같은 답을 제시했다. {=SUM(IFERROR(B2:B9*1,0))}이 얼마나 간결하고 우아한가!계산단계는 다음과 같다. (참고로, 배열함수이다)
이런 식으로 과일에 대한 가격이 매겨져 있습니다. 이제 다른 곳에 견적서를 작성한다고 하면, 품명에 "사과" "배' 등으로 기록하면 그 품목에 대한 가격을 구하는 것은 VLOOKUP함수로 쉽게 할 수 있습니다. 하지만, 지금처럼 해당 품명이 들어있긴하지만 다른 문자들과 섞여 들어가 있어 VLOOKUP함수를 그대로 적용할수는 없는 상황이 있습니다. 이런때, 다른 문자들이 섞여 있긴 하지만 해당 품목을 문자속에서 찾아서 해당 품목의 가격을 알고 싶다면 어떻게 할까요? 큰형님이 멋진 답을 주셨습니다. =LOOKUP(1,1/FIND($E$2:$E$7,A2),$F$2:$F$7) 수식 해석 함수 LOOKUP(1 1을 다음 배열에서 찾는다 1/ 뒤의 배열에 있는 숫자각각으로 1을 나눈다 lookup함수의 두번째인수,..
이렇게 단어시험 문제를 낸다고 합시다. 시험범위는 B1~D1이고총 시험문항수는 D4우리말 뜻쓰기 유형 문항수는 C3영어철자쓰기 유형 문항수는 C4무작위로 저 조건에 맞게 단어를 추출하려면 어떻게 해야할까요?대개 이런 유형의 문제들은 배열함수가 답입니다. 편의상 4번 문항의 수식을 예로 들겠습니다.B13에 들어가는 수식은 위와 같습니다. 배열수식이므로 마지막에 Ctrl-Shift-Enter입니다수식의 각 부분의 해석은 다음과 같습니다. 수식해석기능(함수)=IF($A13 OFFSET 위치 이동 함수(IF($A13한국어 문항수보다 문항번호가 작을 때, list시트의 C열(영어) 첫행 선택. 아니면 D열(한국어) 첫행 선택offset함수의 인수. 이 위치에서 특정 거리만큼 이동함.MOD 나머지의 크기에 따라 문..