我有两张桌子。
表一包含:电话号码列表
表二包含:前缀和目的地列表
我想查找电话号码的前缀和目的地。
给出下面的行数据表和结果表
表01 (电话号码列表)
Phone Number
------------
12426454407
12865456546
12846546564
14415332165
14426546545
16496564654
16896546564
16413216564
表02 (前缀和目的地列表)
PREFIX |COUNTRY
-------+---------------------
1 |Canada_USA_Fixed
1242 |Bahamas
1246 |Barbados
1268 |Antigua
1284 |Tortola
1340 |Virgin Islands - US
1345 |Cayman Island
144153 |Bermuda-Mobile
1473 |Grenada
1649 |Turks and Caicos
1664 |Montserrat
表03 (结果)
Phone Number | PREFIX | COUNTRY
--------------+--------+-------------------
12426454407 | 1242 | Bahamas
12865456546 | 1 | Canada_USA_Fixed
12846546564 | 1284 | Tortola
14415332165 | 144153 | Bermuda-Mobile
14426546545 | 1 | Canada_USA_Fixed
16496564654 | 1649 | Turks and Caicos
16896546564 | 1 | Canada_USA_Fixed
16643216564 | 1664 | Montserrat
答案 0 :(得分:0)
假设电话号码在A列,现在在B列,您需要提取前缀。像这样:
=LEFT(A1, 4)
然而,您的Canada_USA_Fixed和安提瓜手机一样会产生问题。我会让你自己解决这个问题。从IF语句开始。
现在您已经提取了前缀,您可以轻松使用VLOOKUP()
来获取国家/地区。
答案 1 :(得分:0)
假设最长的前缀是6位数,你可以在表1的电话号码旁边添加6列(B:G)(我假设这是A列)。在B列中,您将使用=LEFT(A2,6)
显示前6个字符,在下一列中显示5个字符等。
然后添加另外6列(H:M),每列都执行=MATCH(B2,Table2!A:A,0)
以查看此前缀是否在前缀列表中。
现在,如果6个潜在前缀中的任何一个匹配,您将获得前缀的行号 - 否则您将收到#N / A错误。将以下公式放在N列中:{=INDEX(H2:M2,MATCH(FALSE,ISERROR(H2:M2),0))}
- 输入公式作为数组公式,即输入后不按Enter键,按Ctrl-Shift-Enter键 - 您将在周围看到这些{}
那么公式,所以不要手动输入!。
列N现在包含匹配前缀的行或#N / A(如果没有前缀匹配)。因此,请将=IF(ISNA(N2,'No matching prefix',INDEX(Table2!B:B,N2))
放在下一栏中,您就完成了。
您也可以使用更少的列但更复杂的公式进行上述方法,但我不推荐它。
答案 2 :(得分:0)
我也在进行最长的前缀匹配,就像谷歌出现的其他人一样,它也是国际电话号码前缀!
我的解决方案适用于我的200个前缀表(包括世界第1区,即美国/加拿大为1,巴哈马为1242等)。
首先你需要这个数组公式(我将在下面将其称为“X”,但你需要完全输出)
(LEFT(ValueToFind,LEN(PrefixArray))=PrefixArray)*LEN(PrefixArray)
这使用了将逻辑值与整数相乘的技巧,因此如果没有匹配则结果为零。你使用它找到一个单元格中的最大值(我称之为“MaxValue”)。
{=MAX(X)}
如果MaxValue大于零(因此找到某种匹配),则可以在前缀数组中找到最大值的位置。
{=MATCH(MaxValue,X,0)}
我不担心这里的重复 - 您可以单独在PrefixArray中检查它们。
新手注意事项:
PrefixArray应该是一个绝对引用,用大量的$或“命名范围”表示。
我假设您将ValueToFind,MaxValue和结果索引作为同一行中的单元格进入PrefixArray,因此对其列字母而不是其行号有$。这样可以轻松粘贴很多ValueToFind行。
数组公式用花括号表示,但输入的文字不带花括号,然后按Ctrl-Shift-Enter键输入。