-1

我有两张桌子。

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

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

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

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

表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        
4

3 回答 3

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 来输入。

于 2013-05-31T10:27:00.370 回答
0

假设最长的前缀是 6 位数,您可以在表 1 中的电话号码列旁边添加 6 列 (B:G)(我假设这是 A 列)。在 B 列中,您将使用 显示前 6 个字符=LEFT(A2,6),在下一列中,您将显示 5 个字符等。

然后添加另外 6 列 (H:M) ,每列执行 a=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))下一列,您就完成了。

您也可以使用较少列但更复杂的公式的上述方法,但我不推荐它。

于 2012-12-18T20:16:34.017 回答
0

假设电话号码在 A 列中,现在在 B 列中,您需要提取前缀。像这样的东西:

=LEFT(A1, 4)

但是,您的 Canada_USA_Fixed 和 Antigua 手机一样会产生问题。我会让你自己解决这个问题。从 IF 语句开始。

现在您已经提取了前缀,您可以轻松地使用它VLOOKUP()来获取国家/地区。

于 2012-12-18T14:10:50.360 回答