索引/匹配/VLOOKUP 帮助

时间:2021-05-12 08:55:55

标签: excel excel-formula

下表是我正在处理的 XLSX 中的前 29 行,主要用于计算导出呼叫数据的成本。

下表中的数据是来自 PowerShell 脚本的填充结果,该脚本将来自 CSV 的费率数据(用于计算通话费用)与来自另一个 CSV 中客户每日通话统计数据的通话数据相结合。

费率数据:

F 列 [目的地] 包含每个已知的国家/地区代码。 E 列 [Rate] 包含 F 列中每个 Country Code 的 Rate 值,用于计算最后的通话成本。

呼叫导出数据: C 列 [Callee Number] 包含被呼叫的原始电话号码(Callee)。 H 列 [被叫国家代码] 取 C 列中号码的前几位数字,用于下一步。

坦率地说,我坚持的必需目标:

第 I 列是我正在处理的内容。

我需要一个公式来有效地在 H 列中查找拨打的国家/地区代码,并在 F 列中查找与其最相似(不需要精确)的国家/地区代码。一旦找到,我需要它返回同一行的值,在列 E [Rate] 中。

然后应使用 C / H 列中数字的正确比率填充 I 列。

我尝试过的公式:

=INDEX($A$2:$K$100000,VLOOKUP(H2,$F$2:$F$100000,5,TRUE))

=INDEX($G$2:$G$100000,MATCH(H2,$F$2:$F$100000,0))

我不太擅长 Excel,但我确信使用 100000 来选择整列是不好的做法。

感谢您的帮助:)

<头>
开始时间 客户 被叫号码 国家 目的地 持续时间(分钟) 被叫国家代码 通话费率 通话费用
2020-09-01T07:25:30.5190000Z 姓名 1 +44*** 阿富汗 1.415 93 0 44
2020-09-01T08:05:52.6250000Z 名称 2 +442476****** 阿富汗 1.415 9320 0.383333333 442
2020-09-01T08:33:49.6530000Z 名称 3 +441509***** 阿富汗 1.415 9321 0.7 441
2020-09-01T08:35:18.5300000Z 名称 4 +441509***** 阿富汗 1.415 9322 0.766666667 441
2020-09-01T08:43:45.3300000Z 姓名 5 +447976****** 阿富汗 1.415 9323 1.85 447
2020-09-01T08:47:29.9630000Z 姓名 6 +442476****** 阿富汗 1.415 9324 2.533333333 442
2020-09-01T08:57:43.2680000Z 名称7 +447875****** 阿富汗 1.415 9325 3.633333333 447
2020-09-01T09:04:42.8230000Z 姓名8 +441212****** 阿富汗 1.415 9326 4.916666667 441
2020-09-01T09:15:32.7220000Z 名称9 +441923****** 阿富汗 1.415 9327 1.9 441
2020-09-01T09:30:36.4750000Z 姓名 10 +441923****** 阿富汗 1.415 9328 5.8 441
2020-09-01T09:58:12.8380000Z 名称11 +442476****** 阿富汗 1.415 9370 0.516666667 442
2020-09-01T10:03:04.1270000Z 名称12 +442476****** 阿富汗 1.415 9375 13.51666667 442
2020-09-01T10:27:49.6090000Z 名称13 +442476****** 阿富汗 1.415 9377 2.716666667 442
2020-09-01T11:04:21.7850000Z 名称14 +442476****** 阿富汗 1.415 9378 1.6 442
2020-09-01T11:13:31.9810000Z 名称15 +442070****** 阿富汗 1.415 9379 9.816666667 442
2020-09-01T11:46:53.4730000Z 名称16 +442476****** 奥兰群岛 247 0.283333333 442
2020-09-01T11:47:14.9110000Z 名称17 +442476****** 阿尔巴尼亚 0.537 355 0.866666667 442
2020-09-01T12:30:38.4380000Z 名称18 +442476****** 阿尔巴尼亚 0.537 3554 0.25 442
2020-09-01T12:30:59.5190000Z 名称19 +442476****** 阿尔巴尼亚 0.537 35567 0.283333333 442
2020-09-01T12:31:34.3300000Z 姓名 20 +442476****** 阿尔巴尼亚 0.537 35568 0.283333333 442
2020-09-01T12:35:20.8430000Z 名称21 +442476****** 阿尔巴尼亚 0.537 35569 0.3 442
2020-09-01T12:37:36.5550000Z Name22 +442476****** 阿尔及利亚 0.537 213 1.366666667 442
2020-09-01T12:42:07.9660000Z Name23 +447723****** 阿尔及利亚 0.537 21321 1.466666667 447
2020-09-01T13:13:37.7610000Z Name24 +441926****** 阿尔及利亚 0.537 21355 3.283333333 441
2020-09-01T13:44:57.3190000Z 名称25 +442476****** 阿尔及利亚 0.537 21356 0.15 442
2020-09-01T13:46:39.2640000Z Name26 +442476****** 阿尔及利亚 0.537 21366 0.15 442
2020-09-01T13:58:14.1340000Z Name27 +442476****** 阿尔及利亚 0.537 21369 6.2 442
2020-09-01T13:58:30.5560000Z Name28 +442476****** 阿尔及利亚 0.537 21377 0.583333333 442

2 个答案:

答案 0 :(得分:0)

将表格复制到工作台并找出以下代码:

=IF(LEFT($C1;4)=$H1;INDEX($A$1:$I$28;ROW($H1);5);"")

此代码检查电话号码的前 4 位数字是否等于 H 列中的数字。如果为真,则获取 H 的行号并从 E 中获取值。如果为假,则不写入任何内容。

我不知道您是否打错了问题,但我发现 H 列和 F 列之间没有相似之处。

<块引用>

我需要一个公式来有效地在 H 列中查找拨打的国家/地区代码,并在 F 列中查找与其最相似(不需要精确)的国家/地区代码。

所以我编写了 C 列和 H 列的代码。

但是此代码有 1 个缺点:您需要在 H 列中准确输入前 4 位数字。这意味着你必须像这样形成 H:+442; +447 等

随意更改列和行的范围和名称以匹配您的 Excel 表格。

提示:如果您想选择整列,您必须在公式中写入A:A;B:B 等。或者只需单击列的名称,它就会自动插入。与行相同。

答案 1 :(得分:0)

一些改进 Excel 的建议: 为了与 Excel 配合使用,我建议您使用具有所需子计算的帮助列,因为没有人能理解冗长的公式。更好的是:使用小的查找表作为参考。 您需要两个子列:1 个用于国家/地区代码(从电话号码中提取)和 1 个用于费率。
所以我建议添加一个带有“国家代码”“国家名称”“费率”的表格。它将是一个小表格,您可以从那里查找数据。

请注意以下事项:

  1. 电话号码是一个字符串。这不是一个数字。查看“被叫号码”中的单元格。它们的格式是数字吗?文本?确保它们的格式为 TEXT 很重要。一旦它们是,你就可以开始正确地操纵它们。 defining the cell as Text in Excel
  2. 你是对的,正如前面提到的,如果你想搜索一整列,只需写 F:F 并且不要使用开始行 - 如果没有真正的结束行。这也是使用小型查找表的一个很好的理由:Excel 需要查找较少的数据才能找到所需的信息。
  3. 测试您的结果,以确保 VLOOKUP 或 INDEX/MATCH(或 XLOOKUP,块上的新公式)符合预期:)