目的地,通过电话号码查找前缀 - Excel

时间:2012-12-18 11:58:32

标签: excel excel-vba excel-2007 vba

我有两张桌子。

  • 表一包含:电话号码列表

  • 表二包含:前缀和目的地列表

我想查找电话号码的前缀和目的地。

给出下面的行数据表和结果表

表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        

3 个答案:

答案 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键输入。