FIND와 ISNUMBER 로 원하는 결과 도출
FIND(찾는값, 찾는 값이 들어간 셀,시작위치) = 찾는 값이 들어간 셀의 시작점 위치를 반환
- FIND 함수는 대문자, 소문자를 구분하여 값을 찾습니다. 한글, 영문 구분없이 문자 하나를 1로 인식합니다.
- FINDB 함수는 대문자, 소문자를 구분하여 값을 찾는데, 영문 문자는 1, 한글 문자는 2로 인식합니다.
- 대문자, 소문자 구분없이 찾고자 한다면 SEARCH 함수를 이용하면 됩니다.
ISNUMBER(식) : 식이 숫자이면 참, 아니면 거짓을 반환합니다.
IF함수는 IF(조건식,참,거짓) 입니다.
조건식에 IF(ISNUMBER(식),참,거짓) 으로 표시하면 원하는 결과를 찾을 수 있습니다.
=IF(ISNUMBER(FIND("유도등",B2)),"피난시설",IF(ISNUMBER(FIND("소화기",B2)),"소화시설",IF(FIND("감지기",B2),"경보시설","")))
수식이 간단하네요.
그런데 만약 데이타가 엄청 많다면 이런 함수식 많이 써주면 속도문제, 용량문제가 발생할 수 있습니다.
이럴 경우에는 아래 VBA Code를 사용하면 좋습니다.
Option Explicit
Sub Search_Character()
Dim rngAll As Range '// 검사할 구간 변수
Dim rngTarget As Range '//대상 범위 지정변수
Dim rngC As Range
Dim oldTime As Single '// 걸린 시간 구하는 변수 지정
Application.ScreenUpdating = False '//화면 업데이트 일시 정지
'// 이걸 지정해주어야 매우 빠르게 처리함
oldTime = Timer '// 시간 변수 설정
Set rngAll = Range([B2], Cells(Rows.Count, "B").End(3))
'// 검사할 열이 B열인 경우, B2열 시작점, 끝점은 자동감지
Set rngTarget = Range([D2], Cells(Rows.Count, "D").End(3))
'// 결과를 보여줄 열 범위 지정
rngTarget.Clear '// 셀 초기화
For Each rngC In rngAll
If InStr(rngC.Value, "유도등") > 0 Then
rngC.Offset(0, 2).Value = "피난시설"
ElseIf InStr(rngC.Value, "소화기") > 0 Then
rngC.Offset(0, 2).Value = "소화시설"
ElseIf InStr(rngC.Value, "감지기") > 0 Then
rngC.Offset(0, 2).Value = "경보시설"
Else
rngC.Offset(0, 2).ClearContents
End If
Next rngC
Set rngAll = Nothing '// 변수 초기화
MsgBox "총 " & Format(Timer - oldTime, "#0.00") & " : 초 소요"
End Sub
예제 샘플 파일입니다.
'업무 능력 향상 > 엑셀함수배우기' 카테고리의 다른 글
[엑셀] 중복값 찾기(Countif 함수 활용) (0) | 2014.03.08 |
---|---|
[엑셀] 데이터베이스 함수 DSUM 알아보자 (0) | 2014.01.13 |
[엑셀] Subtotal 함수 (0) | 2014.01.11 |
[엑셀] IF 문은 대문자 소문자를 구별할까? (0) | 2013.12.24 |
[엑셀] sumproduct 함수 알아보자 (2) | 2013.12.18 |