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
+ ENTER
input数组公式。
在你的第一个地址旁边input(在B2
下面,地址在A2
)
改变它以适应您的需要。
我假设你的数据看起来像这样。
正如你所看到的,我把D2:D5
的地区列表放在公式中,把它改成你的列表所在的地方。
如果发现不匹配,则返回District not in list
如B6
。
我相信每一个地址都有一个独特的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}
。
现在,您要返回相应地址的区域。
要做到这一点,我们将使用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
返回相应地址的区域。
=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.