라벨이 find인 게시물 표시

[VBA] 검색되는 단어, 검색되지 않는 단어 찾기

이미지
지식인에서 들어온 질문. 리스트상의 단어가 데이터상의 단어를 포함한 긴 단어에 있을 경우 해당하는 모든 중복되는 데이터에 대해 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 를 누른 것과 같은 기능을 한다.  c = Worksheets(1).Range("a1:a500").Find(2, lookin:=xlValues) 위는 a1:a500에서 2라는 값을 찾아서 셀을 반환한다. 즉, 여기서  C 는 Range 변수로 정의되어야한다. 그런데 두번째 문제가 좀 어려웠다.  List에 있는 각 단어를 가지고 Name에 있는 셀을 다 찾은 다음, Name에 있는 단어를 하나씩 이용해서 List를 뒤져야하나? 그러면 시간이 오래 걸릴 것 같아서 기각이다. 마침내 방법을 생각해 냈는데, 배열변수를 이용하는 것이다! 배열변수의 크기를 Name의 단어 갯수만큼 설정하고 Find 및 Findnext를 이용해서 List에 있는 단어를 계속 찾고,, 찾을 때마다 해당 셀의 위치(행번호)를 배열변수의 위치에다 매칭시킨다 예를 들어, Name에 100개의 단어가 A1셀부터 A100셀까지 들어있으면   arr라는 배열변수를 arr(1)부터 arr(100)까지 설정한다. (초기값은 0이다) 이제 List에 있는 첫번째 단어를 Name에서 찾으니, A3, A15에서 발견

LOOKUP함수. 문자중 일부를 문자열에서 찾는 방법

이미지
이런 식으로 과일에 대한 가격이 매겨져 있습니다. 이제 다른 곳에 견적서를 작성한다고 하면, 품명에 "사과" "배' 등으로 기록하면 그 품목에 대한 가격을 구하는 것은 VLOOKUP함수로 쉽게 할 수 있다.  하지만, 지금처럼 해당 품명이 들어있긴하지만 다른 문자들과 섞여 들어가 있어 VLOOKUP함수를 그대로 적용할수는 없는 상황이 있습니다.  이런때, 다른 문자들이 섞여 있긴 하지만 해당 품목을 문자속에서 찾아서 해당 품목의 가격을 알고 싶다면 어떻게 할까요? 큰형님 이 멋진 답을 주셨습니다. =LOOKUP(1,1/FIND($E$2:$E$7,A2),$F$2:$F$7) 수식   해석 함수   LOOKUP(1 1을 다음 배열에서 찾는다  1/  뒤의 배열에 있는 숫자각각으로 1을 나눈다 lookup함수의 두번째인수, 1을 찾을 배열  FIND($E$2:$E$7,A2) A2안에 사과~수박의 문자배열중 있는 글자가 있는지 찾는다  lookup함수의 두번째인수, 1을 찾을 배열  $F$2:$F$7   위에서 찾은 배열의 문자가 해당 배열에서 차지하는 위치와 같은 위치에 있는 문자를 F2:F7 배열에서 찾는다   lookup함수의 세번째 인수, 1이 위치한 곳과 같은 위치를 찾을 곳  여기서 find함수의 쓰임에 주목할 필요가 있습니다. FIND(find_text, within_text, [start_num]) 즉, find(찾을문자,찾을장소,[시작위치])로 써야하는 함수입니다. 그런데 여기서는 find(범위,문자)로 썼습니다. 보통의 사용법과는 반대입니다. FIND($E$2:$E$7,A2) 을 말로 풀이하면 "E2:E7 안에 있는 문자들 중 A2셀의 문자와 같은게 있으면 그 위치가 어딘지 각자 배열로 표시해봐"가 될것입니다 FIND($E$2:$E$7,A2)을 수식계산에서 돌려보면 

여러 셀에 여러 문자열이 섞여있는 환경에서 특정 문자열의 위치 찾기

이미지
위의 표에서, C열에 "하분류"에 단어들이 들어가 있습니다. 하분류를 넣으면 상분류, 중분류까지 나오게 하고 싶습니다 이런 식으로 정리가 되어있다면 INDEX, match함수로 간단하게 됩니다. 하분류가 A열에 가 있다면 VLOOKUP함 로 더욱 간단하게. 하지만 지금 형태를 그대로 두고서 수식을 만들면 위와 같습니다 이 수식을 말로 설명하면 다음과 같습니다 (FIND($E2,$C$2:$C$7)):  E2에 있는 단어 "호박"이란 단어가 C2:C7의 배열에서 어느 셀에 위치하는지 찾아서 ISERROR :  배열에 결과값이 숫자인지 오류인지 확인 (숫자가 결과값이라면 해당 단어가 존재한다는 의미) NOT ~~ *1 :  결과값이 오류이면 0을, 숫자이면 1을 부여 SUMPRODUCT :  위의 0과1의 배열에 행번호를 곱한다 (해당 단어"호박"이 위치한 행번호가 나온다) -1 :  결과값 위치와 실제행번호가 다르기때문에 조정 출처: 네이버지식인

1일1함수 (24) FIND함수 : 한 셀에서 특정 문자의 위치 찾기

이미지
오늘은 FIND함수입니다. 찾으려는 문자가 어디에 있는지 그 위치를 반환합니다.   FIND ( find_text , within_text ,start_num) find_text   찾을 텍스트입니다. within_text   찾으려는 텍스트를 포함하는 문자열입니다. start_num   검색을 시작하는 문자를 지정합니다. within_text에서 첫 문자의 문자 번호는 1입니다. start_num을 생략하면 1로 간주됩니다. 주의 FIND는 대/소문자를 구분하며, 와일드카드 문자를 사용할 수 없습니다 . 대/소문자를 구분하지 않고 검색하거나 와일드카드 문자를 사용하려면 SEARC를 사용해야 합니다. find_text가 ""(빈 텍스트)이면 FIND는 검색 문자열의 첫 문자를 찾습니다. 즉 start_num번째 또는 첫 번째 문자를 찾습니다. find_text는 와일드카드 문자를 포함할 수 없습니다. find_text가 within_text에 없으면 #VALUE! 오류 값이 반환됩니다. start_num이 0보다 크지 않으면 #VALUE! 오류 값이 반환됩니다. start_num이 within_text의 길이보다 길면 #VALUE! 오류 값이 반환됩니다. start_num 을 사용하여 지정된 문자 수만큼 건너뛸 수 있습니다. 예를 들어 FIND의 경우 텍스트 문자열 "AYF0093.YoungMensApparel"에서 텍스트 문자열의 설명 부분에 있는 첫 번째 "Y"의 번호를 찾으려면 텍스트의 일련 번호 부분은 검색하지 않도록 start_num을 8로 설정합니다. FIND는 8번째 문자부터 시작하여 이후의 문자에서 find_text를 찾아 번호 9를 반환합니다. FIND는 start_num이 1보다 큰 경우 건너뛴 문자 수도 계산하여 항상 within_start의 시작 부분부터 센 문자 번호를 반환합니다.     전에 배웠