2013-12-25 1 views
1

У меня есть столбец, полный адреса из состояния. В другой колонке у меня есть все районы штата. Я хочу извлечь район из адреса. Я пробовал разные формулы, но не работал.Поиск определенного текста, который хранится в cloumn из ячейки с таким количеством данных

Для например:

Адрес Column

S.V.N. Road, Варангал, Андхра-Прадеш

Vuyyur, Distt., Кришна, Андхра-Прадеш

Nagarjunasagar, Vijayapuri South ,, Distt., Guntur

Paritala (PO), Kanchikacherla (MD), Кришна (ДТ)

Tekkali, Шрикакулам Distt. ,, Прадеш т.д.

Районы колонки

Варангал

Кришна

Guntur

Шрикакулы и т.д.

Я хочу формулу или VBA кода, который ищет округа из колонны районов внутри колонны адреса и извлечение района. Обратите внимание: Районы не находятся в определенном месте в ячейке адреса.

+1

Отредактируйте ваш запрос, чтобы конкретно показать, что вы пытались, и что вы получили за результаты; а также конкретно, какими будут ваши желаемые результаты. –

ответ

1

попробовать это:

=IFERROR(INDEX(D$2:D$5,MATCH(1,IF(ISERROR(SEARCH(D$2:D$5,A2)),0,1),0),1),"District not in list") 

Поступил в формулу массива, нажав CTRL + SHIFT + ENTER.
Введите это место рядом с вашим первым адресом.(ниже B2 и адрес находится на A2)
Измените его в соответствии с вашими потребностями.
Я предположил, что ваши данные выглядят так.

sample image

Как вы можете видеть, я поставил район Список на D2:D5 так в формуле, изменить его, где ваш список.
Если совпадение не найдено, оно вернет District not in list, как видно из B6.
Я считаю, что у каждого адреса есть уникальный Disrtict?
Если когда-либо адрес содержит два (2) района, он вернет первый найденный Район по адресу.

Как работает эта формула?

=SEARCH(D$2:D$5,A2) 

Этот поиск каждое слово найдено в D2:D5 (ваших округов) в адрес в A2.
В результате получается массив значений ошибок и чисел.
Учитывая A2, он возвращает {#Value!, #Value!, 14, #Value!}.

Для обработки ошибок мы добавляем ISERROR в сочетании с IF.

=IF(ISERROR(SEARCH(D$2:D$5,A2),0,1) 

Это заменяет #VALUE! с 0 и значением без ошибок с 1.
Теперь он возвращает {0, 0, 1, 0}.

Теперь вы хотите вернуть район соответствующего адреса.
Для этого мы будем использовать INDEX и MATCH сочетание.
Сначала мы используем MATCH, чтобы узнать номер строки нашего округа.
У нас уже есть этот массив {0, 0, 1, 0}, мы должны соответствовать 1.

=MATCH(1,IF(ISERROR(SEARCH(D$2:D$5,A2),0,1),0) 

упрощенный:

=MATCH(1,{0, 0, 1, 0}, 0) 

И дает 3.

И наконец, мы используем INDEX для возврата District соответствующего адреса.

=INDEX(D$2:D$5,MATCH(1,IF(ISERROR(SEARCH(D$2:D$5,A2)),0,1),0),1) 

упрощенный:

=INDEX(D$2:D$5,3,1) 

Последний аргумент, который [column] можно опустить, так как у вас есть только 1.
Или вы можете указать его в качестве 1.

Это дает Warangal.
Обратите внимание, что мы добавили IFERROR для обработки несуществующего района.
Надеюсь, вам это поможет.

0

Я думаю, что вы будете нуждаться в пользовательскую функцию, которая

  • Читает в адресной ячейке
  • Loops через разделенных запятыми адресов по разделам, чтобы получить подстроку
  • выполняет поиск подстроки из диапазона, содержащего список всех возможных районов
  • Если найдено, он вернет район в ваш округ Район, в противном случае он будет продолжать цикл до тех пор, пока вы не дойдете до конца содержимого адреса

Ввод: S.V.N. Road, Варангал, Андхра-Прадеш Поиск «СВН-роуд» в районах не найден, продолжает Уточняющих «Варангал» в районах Found, введите в столбце Районов, конец функция

Если возможно, было бы полезно иметь адрес был отформатирован регулярно, поэтому район всегда появлялся после запятой Nth, поэтому вы могли бы просто выбрать подстроку Nth + 1 для района.

0
Take the value of A Column and B column. 

Dim storACellVal As Variant 
Sub Test() 
lngLastCell = Application.CountA(Columns(1)) 
for i= 1 to lngLastCell 
Acellno = "A" & i 
Bcellno = "B" & i 
'It will store the datas of column A into aColVal 
aColVal = Sheets("Sheet1").Range(Acellno).Value 
'It will store the datas of column B into bColVal 
bColVal = Sheets("Sheet1").Range(Bcellno).Value 

storACellVal=split(aColVal,",") 
for j=0 to UBound(storACellVal) 
    if trim(storACellVal(j)=trim(bColVal) then 
     msgbox "True" 
    End if 
next j 
Next i 
End Sub 

I hope this might help you. I apologies, if I did anything wrong. 
+0

Это функция Excel ** = IF (ISERROR (FIND (B1, A1,1)) = FALSE, TRUE) **. Скопируйте и вставьте его в ячейку, отличную от A и B. Надеюсь, я даю вам правильное предложение. – Brain