search具有这么多数据的单元格中存储的特定文本

我有一个充满地址的列。 在另一列我有国家的所有地区。 我想从地址中提取区域。 我尝试了不同的公式,但没有工作。

例如:

地址栏

SVN路,Warangal,安得拉邦

Vuyyur,Distt。,Krishna,Andhra Pradesh

Nagarjunasagar,Vijayapuri South ,, Distt。,Guntur

Paritala(PO),Kanchikacherla(MD),Krishna(DT)

Tekkali,Srikakulam Distt。,Andhra Pradesh等

区专栏

瓦朗加尔

克里希纳

贡土尔

Srikakulam等

我想要一个地址栏里面的区域列search区的公式或者VBA代码和提取区。 请注意地区不在地址单元中的特定位置。

尝试这个:

=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 + ENTERinput数组公式。
在你的第一个地址旁边input(在B2下面,地址在A2
改变它以适应您的需要。
我假设你的数据看起来像这样。

示例图像

正如你所看到的,我把D2:D5的地区列表放在公式中,把它改成你的列表所在的地方。
如果发现不匹配,则返回District not in listB6
我相信每一个地址都有一个独特的District?
如果地址包含两(2)个地区,它将返回地址中find的第一个地区。

公式如何工作?

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

这将searchA2中的D2:D5 (您所在的区域)中的每个单词。
结果是一个错误值和数字的数组。
考虑到A2它返回{#Value!, #Value!, 14, #Value!}

为了处理这些错误,我们添加了与IF结合的ISERROR

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

这将取代#VALUE! 0和非错误值1
现在它返回{0, 0, 1, 0}

现在,您要返回相应地址的区域。
要做到这一点,我们将使用INDEXMATCH组合。
首先我们用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返回相应地址的区域。

 =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) 

因为你只有1,所以[column]的最后一个参数是可以省略的。
或者你可以指定它为1

这给了Warangal
请注意,我们添加了IFERROR来处理不存在的区域。
希望这可以帮助你一点。

我想你会需要一个自定义的function

  • 读取地址单元格
  • 循环通过逗号分隔的地址部分来获取子string
  • 查询包含所有可能区域列表的范围中的子string
  • 如果发现它会将分区返回到您的分区列,否则将继续循环直到您到达地址内容的末尾

input:SVN Road,Warangal,Andhra Pradesh在地区查找“SVN Road”未find,继续在区域查找“Warangal”find,进入区域栏,结束function

如果可能的话,定期格式化地址会很有帮助,所以在第N个逗号后总会出现区域,所以你可以简单地为区域select第N + 1个子string。

 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.