목록문자열 (15)
rand(life)
이전에 쓴 글에 어느 분이 답글을 주셨습니다.혹시 저 과목들을 몇개 단위로끊어서 쓸수 있을까요? 예를 들면 5개 과목을 쓰면 줄을 바꾸거나 셀을 아래로 삽입하여 작성하는 게 가능할까요? 그래서 만들어보았습니다.Function ConcatText(ByVal 범위 As Range, 구분 As String) As String Dim strTemp() As StringDim rng As RangeDim a As StringDim cr As IntegerDim k As IntegerDim i As Integer For Each rng In 범위 If rng = 구분 Then ReDim Preserve strTemp(i) If rng.Offset(0, 2).Value > 2 Then strTemp(i) = rng...
지난번에 몇번 올라왔던 사용자 정의함수의 매크로 버전이다. 어떤 분이 엑셀이 느려진다고 해서 만들어보았다.속도 자체는 크게 다르지 않은 것 같다. 아무래도 전체 셀을 순환해야하니까....그래도 사용자정의함수였을 때는 셀에 다른 입력을 하거나하면 새로 계산을 하느라 버벅였는데지금은 결과값이 수식이 아니라 텍스트로 입력이 되기 때문에, 새로 계산을 하지 않는다.그 점은 더 나아진 것 같다.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..
이런 식으로 과일에 대한 가격이 매겨져 있습니다. 이제 다른 곳에 견적서를 작성한다고 하면, 품명에 "사과" "배' 등으로 기록하면 그 품목에 대한 가격을 구하는 것은 VLOOKUP함수로 쉽게 할 수 있습니다. 하지만, 지금처럼 해당 품명이 들어있긴하지만 다른 문자들과 섞여 들어가 있어 VLOOKUP함수를 그대로 적용할수는 없는 상황이 있습니다. 이런때, 다른 문자들이 섞여 있긴 하지만 해당 품목을 문자속에서 찾아서 해당 품목의 가격을 알고 싶다면 어떻게 할까요? 큰형님이 멋진 답을 주셨습니다. =LOOKUP(1,1/FIND($E$2:$E$7,A2),$F$2:$F$7) 수식 해석 함수 LOOKUP(1 1을 다음 배열에서 찾는다 1/ 뒤의 배열에 있는 숫자각각으로 1을 나눈다 lookup함수의 두번째인수,..
위의 표에서, C열에 "하분류"에 단어들이 들어가 있다. 하분류를 넣으면 상분류, 중분류까지 나오게 하고 싶다 이런 식으로 정리가 되어있다면 INDEX, match함수로 간단하게 될 것이다. 하분류가 A열에 가 있다면 VLOOKUP함수로 더욱 간단하게 된다. 하지만 지금 형태를 그대로 두고서 수식을 만들면 위와 같다말로 설명하면 다음과 같다(FIND($E2,$C$2:$C$7)): E2에 있는 단어 "호박"이란 단어가 C2:C7의 배열에서 어느 셀에 위치하는지 찾아서ISERROR : 배열에 결과값이 숫자인지 오류인지 확인 (숫자가 결과값이라면 해당 단어가 존재한다는 의미)NOT ~~ *1 : 결과값이 오류이면 0을, 숫자이면 1을 부여SUMPRODUCT : 위의 0과1의 배열에 행번호를 곱한다 (해당 단어..
[엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 1 [엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 2 같은 내용입니다만, 댓글로 좀 더 좋은 수식을 알려주신 분이 있습니다. 네이버 지식인에서 활약하시는 "큰형님"이라는 닉을 쓰시는 분이 만드신 사용자함수입니다. 써보니 확실히 좋습니다. 혼자 머리 싸매고 고민하느니 잘 하는 사람한테 물어보는게 최고 좋다는! Function ConcatText(범위1, 조건, 범위2) As String Dim strTemp() As String Dim rng As Range Dim i As Integer, n As Integer n = 범위2.Column - 범위1.Column For Each rng In 범위1 If rng = 조건 Then ReDim Pres..
지난 번에 쓴 글에서, 같은 조건의 문자열을 찾아 합치는 사용자정의 함수를 만드는 방법을 연구해 보았습니다. 제가 직접 만든 VBA코드가 아니고, 다른 분이 만드신 것을 올리고, 거기에 대한 설명을 제가 붙인 글이었습니다. 여기에 어떤 분이 질문을 하셨습니다. 그 내용을 요약하면, 신청 과목의 이름뿐만 아니라, 신청과목의 학점까지 조건을 주어서 표시할 수 있는가, 예를 든다면 신청과목중 3학점 이상되는 과목만 나열하도록 할 수 있는가 하는 내용이었습니다. 위의 그림에서 보듯이, 왼쪽의 표에는 신청과목과 학점이 표시되어있습니다. 여기서 학생별로 신청한 과목 중 3학점 이상만을 뽑아내어, 오른쪽 표에 보는 것처럼 신청과목을 나열하고 싶다는 것입니다. 결론을 이야기하면, 가능합니다. 그것도 아주 간단히 할 수..
다음 그림과 같은 작업을 하고 싶을 때가 있습니다. 왼쪽처럼 학생들의 신청과목을 한 열에 한 과목씩 일렬로 받아둔 것을 오른쪽 그림처럼 한 학생의 모든 신청과목을 한 줄에 입력하는 작업입니다. VLOOKUP함수를 써서 10101을 찾아 한 칸 오른쪽에 있는 값을 불러오면, 맨 위에 있는 값만 가져오기 때문에 "영어"만 출력됩니다. 앞으로 엑셀에서 VLOOKUP함수가 두 번째, 세번째 일치하는 값도 찾을 수 있도록 옵션을 제공한다면 간단히 해결되겠지만, 그 전에는 이런 작업을 하려면 VBA를 사용해야할 듯 합니다. 다음은 ConcatText라는 사용자정의 함수를 만드는 VBA입니다. Alt + F11 하셔서 삽입-모듈에서 다음을 붙여넣으세요. Function ConcatText(ByVal 범위 As Ran..
지난 번에는 REPLACE함수를 사용해서, 특정위치에 있는 문자열을 다른 문자열로 바꾸었습니다. 오늘 다루게 될 SUBSTITUTE함수는 특정한 문자열을 찾아, 다른 문자열로 바꾸는 함수입니다. 구문 SUBSTITUTE(text,old_text,new_text,instance_num) text 문자를 대체할 텍스트가 포함된 셀의 참조 또는 텍스트입니다. old_text 바꿀 텍스트입니다. new_text old_text를 대신할 텍스트입니다. instance_num text에서 몇 번째에 있는 old_text를 new_text로 바꿀 것인지를 지정하는 수입니다. instance_num을 지정하면 해당하는 위치에 있는 old_text만 바뀝니다. 그렇지 않으면 모든 old_text가 new_text로 바뀝..