rand(life)

[엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 2 본문

컴퓨터/엑셀

[엑셀Q&A,VBA] 같은 조건의 문자열 찾아 합치기 2

flogsta 2011. 6. 30. 18:43

지난 번에 쓴 글에서, 같은 조건의 문자열을 찾아 합치는 사용자정의 함수를 만드는 방법을 연구해 보았습니다.

제가 직접 만든 VBA코드가 아니고, 다른 분이 만드신 것을 올리고, 거기에 대한 설명을 제가 붙인 글이었습니다.

여기에 어떤 분이 질문을 하셨습니다.

그 내용을 요약하면,

신청 과목의 이름뿐만 아니라, 신청과목의 학점까지 조건을 주어서 표시할 수 있는가, 예를 든다면 신청과목중 3학점 이상되는 과목만 나열하도록 할 수 있는가 하는 내용이었습니다.


 


위의 그림에서 보듯이, 왼쪽의 표에는 신청과목과 학점이 표시되어있습니다. 여기서 학생별로 신청한 과목 중 3학점 이상만을 뽑아내어, 오른쪽 표에 보는 것처럼 신청과목을 나열하고 싶다는 것입니다.

 

결론을 이야기하면, 가능합니다. 그것도 아주 간단히 할 수 있습니다.

기존의 코드에서 다음 밑줄친 부분만 추가하시면 됩니다.


 

Function ConcatText(ByVal 범위 As Range, 구분 As String) As String

Dim strTemp() As String

Dim rng As Range

Dim 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.Next.Value

           i = i + 1

     End If

   End If

Next rng

ConcatText = Join(strTemp, " / ")

End Function


 

추가한 줄의 의미는 다음과 같습니다.

If rng.Offset(0, 2).Value > 2 Then

사용자 정의함수의 첫번째 인수로 받아들인 rng라는 범위의 오른쪽으로 두 칸 이동한 곳에 있는 셀 값이 2보다 크면 그 다음 작업을 수행하고, 2와 같거나 2보다 작다면 IF 구문을 빠져나와서 rng구문의 다음 값으로 넘어간다. 


If 구문이 하나 더 추가되었으므로 if구문을 닫기 위해 End if도 추가되었습니다.


참고로, 제가 VBA의 전문가는 아니기에, VBA에 대해서는 저 보다는 네이버 지식인이나 오피스튜터에 질문을 올리시면 위 질문에 답해주신 ks_1862님과 같은 분들이 좋은 답변을 많이 달아주실 겁니다.