【问题标题】:Formula to determine USPS Postal Zone based on ZIP code根据邮政编码确定 USPS 邮政区的公式
【发布时间】:2014-01-21 22:44:08
【问题描述】:

我希望通过 USPS 邮政区更轻松地分拣数百个信封。困难在于必须根据原始邮政编码:91352,为美国 8 个区域中的每一个区域手动排序。

http://postcalc.usps.gov/ZoneCharts/

我有一个包含 ZIP 列的联系人电子表格。我已经根据“913”为所有 USPS ZoneCharts 站点设置了一个单独的表格,并将四个部分合并为一个(总共两列)。然后我使用 LEFT 和 RIGHT 函数获取第一列的前三个和后三个数字,并将它们放入各自的列(现在总共三列):

ZIP_BEG ZIP_END 区域 005 098 8 100 212 8 214 268 8 270 342 8 344 344 8 346 347 8 349 349 8 350 352 7 354 359 7 360 361 8 362 362 7 363 364 8 365 366 7 ...等

我是否可以使用联系人表中的 VLOOKUP 函数来搜索每个 ZIP(使用 LEFT 函数仅使用每个 ZIP 值的前三个数字),然后检查该值是否既大于 ZIP_BEG 值又小于比 ZIP_END 值?

无论它匹配什么行,它都会返回 Zone 值。我将其作为第一张表中 ZIP 列之后的列。

【问题讨论】:

  • 听起来你已经明白了。你有什么问题?
  • 哦,我知道吗?伟大的!除了我不知道如何在 VLOOKUP 中应用大于/小于逻辑(并基于两列检查)。当我试图写公式时,我的大脑爆炸了。你知道我可以如何或去哪里更好地理解如何为这类问题编写公式吗?谢谢!
  • 我想说我不明白你的描述是什么问题。 ;-)
  • 在单独的表格上构建所有邮政编码的列表(例如通过单击拖动)并用于查找可能更容易。这样你就可以节省逻辑。
  • 我知道你在那里做了什么。谢谢,@simbabque!

标签: excel excel-formula excel-2007 vlookup zipcode


【解决方案1】:

拆分每个可能的邮政编码似乎可行,但可能“过大”(尽管可能有助于检测错误)。我假设不在上述范围内的代码是 (a) 无效但 (b) 不需要以任何方式标记,因此例如 099 在实践中永远不会出现(除非表已更新) 或者可以“安全地”被视为098

这是为了可以只考虑每个波段的一个值(在区域更改之前),方便您的 ZIP_BEG 值,以及 不精确的 VLOOKUPVLOOKUP 的语法是:

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

其中第四个参数 (range_lookup) 是可选的。忘记它或错误地将其设置为 TRUE(或1)已经造成了很大的悲痛,但在这里可能非常适合。

引用:

如果为 TRUE 或省略,则返回精确或近似匹配。如果未找到完全匹配,则返回小于 lookup_value 的下一个最大值。 table_array 第一列的值必须按升序排列;否则,VLOOKUP 可能不会给出正确的值。

(它是进行二分查找,所以需要知道哪个方向多哪个少)。你的值应该已经按要求的顺序排列,所以一个公式如:

=VLOOKUP(A2,ZIPUP,2)  

在同一个工作簿中的某个地方应该足够了,其中要查找的值(目标 Zip 的前三位)假定在 A2 中,ZIPUP 是工作簿范围的名称ZIP_BEG在一列中,Zone 在紧邻该列的匹配行中。

鉴于最初的假设,不需要整个 ZIP-BEG 列表(108 个“范围”),因为仅使用限制,74 就足够了(并且应该更快)。

如果不以这种方式聚合波段,请注意格式化为 0055 不同,并且这种区别与 =VLOOKUP 有关。您已使用 =LEFT 和 =RIGHT 提取列表,这些文本函数返回字符串,但在这里我更喜欢自己的数字格式。 (我用 Text to Columns 拆分范围。)

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2017-10-25
    相关资源
    最近更新 更多