【问题标题】:INDEX / MATCH / VLOOKUP Assistance索引 / 匹配 / VLOOKUP 协助
【发布时间】:2021-05-12 08:55:55
【问题描述】:

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

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

费率数据:

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

调用导出数据: C 列 [Callee Number] 包含被呼叫的原始电话号码(Callee)。 H 列 [Callee Country Code] 将 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 来选择整个列是不好的做法。

感谢您的帮助:)

Start time Customer Callee Number Country Rate Destination Duration (Minutes) Callee Country Code Rate for call Cost of call
2020-09-01T07:25:30.5190000Z Name1 +44*** AFGHANISTAN 1.415 93 0 44
2020-09-01T08:05:52.6250000Z Name2 +442476****** AFGHANISTAN 1.415 9320 0.383333333 442
2020-09-01T08:33:49.6530000Z Name3 +441509****** AFGHANISTAN 1.415 9321 0.7 441
2020-09-01T08:35:18.5300000Z Name4 +441509****** AFGHANISTAN 1.415 9322 0.766666667 441
2020-09-01T08:43:45.3300000Z Name5 +447976****** AFGHANISTAN 1.415 9323 1.85 447
2020-09-01T08:47:29.9630000Z Name6 +442476****** AFGHANISTAN 1.415 9324 2.533333333 442
2020-09-01T08:57:43.2680000Z Name7 +447875****** AFGHANISTAN 1.415 9325 3.633333333 447
2020-09-01T09:04:42.8230000Z Name8 +441212****** AFGHANISTAN 1.415 9326 4.916666667 441
2020-09-01T09:15:32.7220000Z Name9 +441923****** AFGHANISTAN 1.415 9327 1.9 441
2020-09-01T09:30:36.4750000Z Name10 +441923****** AFGHANISTAN 1.415 9328 5.8 441
2020-09-01T09:58:12.8380000Z Name11 +442476****** AFGHANISTAN 1.415 9370 0.516666667 442
2020-09-01T10:03:04.1270000Z Name12 +442476****** AFGHANISTAN 1.415 9375 13.51666667 442
2020-09-01T10:27:49.6090000Z Name13 +442476****** AFGHANISTAN 1.415 9377 2.716666667 442
2020-09-01T11:04:21.7850000Z Name14 +442476****** AFGHANISTAN 1.415 9378 1.6 442
2020-09-01T11:13:31.9810000Z Name15 +442070****** AFGHANISTAN 1.415 9379 9.816666667 442
2020-09-01T11:46:53.4730000Z Name16 +442476****** ALAND ISLANDS 247 0.283333333 442
2020-09-01T11:47:14.9110000Z Name17 +442476****** ALBANIA 0.537 355 0.866666667 442
2020-09-01T12:30:38.4380000Z Name18 +442476****** ALBANIA 0.537 3554 0.25 442
2020-09-01T12:30:59.5190000Z Name19 +442476****** ALBANIA 0.537 35567 0.283333333 442
2020-09-01T12:31:34.3300000Z Name20 +442476****** ALBANIA 0.537 35568 0.283333333 442
2020-09-01T12:35:20.8430000Z Name21 +442476****** ALBANIA 0.537 35569 0.3 442
2020-09-01T12:37:36.5550000Z Name22 +442476****** ALGERIA 0.537 213 1.366666667 442
2020-09-01T12:42:07.9660000Z Name23 +447723****** ALGERIA 0.537 21321 1.466666667 447
2020-09-01T13:13:37.7610000Z Name24 +441926****** ALGERIA 0.537 21355 3.283333333 441
2020-09-01T13:44:57.3190000Z Name25 +442476****** ALGERIA 0.537 21356 0.15 442
2020-09-01T13:46:39.2640000Z Name26 +442476****** ALGERIA 0.537 21366 0.15 442
2020-09-01T13:58:14.1340000Z Name27 +442476****** ALGERIA 0.537 21369 6.2 442
2020-09-01T13:58:30.5560000Z Name28 +442476****** ALGERIA 0.537 21377 0.583333333 442

【问题讨论】:

  • 起初我想制作一个唯一的被叫国家代码列表并索引它们的速率以将它们从小到大排序并查找最新匹配,因此无论位数多少都会匹配,但我注意到所有被叫国家代码在每个国家重复,因此不是唯一的。您能否更好地描述您根据哪些条件尝试检索的值?

标签: excel excel-formula


【解决方案1】:

将表格复制到一个workbbok并找出以下代码:

=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 等写入公式。或者只需单击列的名称,它就会自动插入。与行相同。

【讨论】:

    【解决方案2】:

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

    请注意以下几点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      相关资源
      最近更新 更多