使用 Excel 将复杂的数据单元格位置简化为行

使用 Excel 将复杂的数据单元格位置简化为行

我从 Web 数据库下载了一个数据集,该数据集具有可变格式。目标是将所有数据放入行中,以便对其进行排序并可能将其转换为 CSV-KMZ(KML) 文件。取消合并单元格后,数据格式如下

我发现的强力解决方案包括使用='cell number'在右侧单元格中(像这样。),然后删除所有空单元格,将所有数据合并到同一行(例如这里)。从这里,我只需选择并向下拖动即可将该单元格数组复制到下部单元格中。当遇到包含多个站点的责任方条目时,就会出现问题,就像第一张图片中那样,因为它们会抛出间距,这需要大量的复制和粘贴才能解决这些问题。

因为这个数据集有 10,000 多行,而且可能还会有更多这样的数据集,所以我希望这里的一些优秀人才能想出另一种解决方案。感谢所有思考这个问题的人!

答案1

图示的数据布局示例是您成功的关键。它是特征鲜明数据。这意味着数据遵循既定模式,而不是到处都是。这意味着你可以编写简单、直接的公式来收集数据的每一部分。

当我在点击之前阅读引言时,我以为我会看到到处都是数据。例如,{City} 可能位于单元格 D3、E3 或 F3 中,其他数据也同样位于各个位置,或者可能与 {State} 组合在一起,并且每条记录都不同:有些记录没有组合在一起,有些记录与 E3 中的 {City} 连续六个,然后 F3 中有几个,诸如此类。

你根本没有遭受任何此类缺陷!

您唯一的困难在于站点信息可能包含多个站点,而不是每个记录只有一个站点。但这是一个小问题,可以通过以下两件事解决:

1) 判断每条记录可能有多少个站点。您一定已经考虑过这个问题了,因为您计划将结果布局到每条 RP 的一行中,因此请使用它。2) 使用 IF() 函数测试特定数据,它将告诉您是否要提取站点信息或开始新记录。

第二个问题似乎有点不对,因为你要在两个地方而不是一个地方做出决定。

一旦做出决定,输出行中的单元格就可以使用更简单的公式来测试决定单元格的内容,并沿着该行进行波动。

你会怎么做?首先,我假设已添加加粗项目以便清晰显示,不需要提取。(如果需要,请以同样的方式进行。)我还计划一个简单的输出,其中将包含一行数据,然后是一系列“空”行,然后是另一行数据,依此类推。最后的想法是复制和粘贴|特殊|值,然后对末尾的一大堆“空”行进行排序和删除。人们可以做得更花哨,但这在晚上 11:30 是不可能实现的……

要提取主要信息,即“RP”数据(我将使用从 T2 开始的想法,并假设“Party ID”是“RP#”),您需要一些数据来修复,然后将查看的其他部分的位置与其关联起来。“RP#”看起来非常适合。因此单元格 T2 将具有:

= C1

现在使用 OFFSET() 查找所有其余的 RP 数据。但请记住,输出中的每一行都必须查看它是否应该收集数据。因此,您需要将其包装在 IF() 中以查看该行是否获取数据:

= IF( C1 = "", "", C1)

这将用一些 RP# 填充 T2。在 T3 到 T7 中,它将显示“”。转到 U2。输入以下公式:

= IF( C1="", "", OFFSET( C1, 0, 2 ) )

如果 C1 有 RP#,那么您将找到向下 0 行和向右 2 列单元格的值。如果没有,您将在 U2 中得到“”(并且您将在查找非站点数据的所有列中继续得到这样的结果)。

继续。只需根据需要改变两个值(行是第一个,列是第二个)即可定位相对于 C1 的每个部分。Thant 处理所有寻求的非站点数据。(有趣的是,要记住并且接下来要用到的是,您的偏移量可以是负值,因此您可以使用 OFFSET() 来向左和向上以及向右和向下查看。

对于单元格 AB2,输入 +4 行的偏移量(因此向下)和 -1 列(因此左边)。因此,简单的 IF() 测试,然后是偏移量。考虑到数据,似乎不可能没有每个 RP 的最小一个站点,但如果可能没有,请添加到 IF() 测试中:

= IF( OR( C1="", OFFSET( C1, 4, -1 ) = "" ), "", OFFSET( C1, 4, -1 ) )

向右移动收集站点数据,返回到简单的 IF() 测试,但使用 AB2 而不是 C1。(如果 C1 不是 RP#,则您有一个“空”的 AB2,因此“空”的 AB2 意味着 C1 也是“空”的,因此无需每次都进行测试。)收集该站点的所有数据,就像您对 RP 数据所做的那样。

现在问题的关键是:是否有第二个站点或新记录的开始?单元格,同一列,但距离此记录的 RP# 向下 7 行,要么是新的 RP#,要么是空白。可以像以前一样测试“空白”。假设 AK2 是第二个站点的数据应该开始的地方。只需测试该单元格是否为空白或不为空白。如果为空白,则有第二个站点,您可以像上面一样找到它的数据。使用:

= IF( OR( C1="", OFFSET( C1, 7, 0 ) = "" ), "", OFFSET( C1, 7, -1 ) )

如果存在站点编号,则获取站点编号,或者“”。与第一个站点的公式类型相同,只是更改了行偏移量(列偏移量相同)。如果根本没有站点信息,则对其进行修改以测试 AB2 中的“”,以便如果它为“空”,则“”结果将从此处向右波动。

对尽可能多的站点数据集执行此操作。也许再多加一两组,是吗?

现在,我们来看看站点数据存在的“另一半”:我们移至第 3 行和单元格 T3。将第 2 行的所有单元格复制到第 15 行。将出现一系列看似空白的行,C2、c3 等行直到到达 C8 才有 RP#。然后数据再次出现。

由于 T8 不会是“”,其右侧的行将填充数据。耶!

您可能会认为,实际站点集合右侧的站点单元格可能会出现奇怪或令人困惑的条目,因为它们会读取下一条、两条或四条记录的数据。但首先检查是否有任何原因,结果站点编号(担心是虚假的)为“”,然后向右波动,导致出现“”条目,而不是读取其他记录的数据。不用担心。

复制并粘贴您拥有的所有数据行,或您能处理的行数(记住,您不仅会让您的机器跟踪这 10,000 行中的所有公式,还会同时复制并粘贴它们的值)。假设这里没有任何问题,但如果有,您必须以 1,000 行或任何对您来说可能合适的行数进行管理。

完成所有计算后,复制输出单元格并将|特殊|值粘贴到...其他地方,例如第二张表。(此时,如果担心机器功率,请删除除第一对公式之外的所有公式行。)

在另一张表上,您可以对输出进行任何操作,而不会影响那些公式提取单元格或源数据。

一旦进入第二张工作表,您只需要再担心一件事:接下来您将对输出进行排序。有时需要原始数据顺序,而这不是 Excel 生成的排序顺序。如果是这种情况,请在左侧插入一列,并用连续的数字列表随意填充它。它必须是“常量”而不是公式,因此不会因为公式在排序后重新计算而发生任何变化……

好了,是时候删除所有“空”行,只留下一组紧密的数据行了。对数据进行排序(如果需要或想要,也对编号列进行排序)。像往常一样从低到高进行排序,这样“空”行就会出现在底部。找到第一个“空”行。有很多方法可以做到这一点……比如滚动……或者首先转到任何空行,并在其第一个(最左边)单元格中输入“zzzzzzzzzzzzz”,这样它将排序到数据的末尾,这将使其成为所有“空”行之前的第一行。到达第一行“空”的第一个单元格后,按 Ctrl-Shift-End 突出显示您需要取出的所有垃圾。使用 Delete 键清除内容。

现在您的数据行都已整合在一起,没有虚假的非空行来干扰您使用数据,您可以开始使用了。对其进行处理,或将其复制并粘贴到最终存放位置(可能是其他电子表格),然后开始工作!

顺便说一句,构建过程非常简单,一点也不耗时。一旦完成,只要数据不变,就永远完成了。你知道,网站会改变,软件会升级,全新的专栏也会改变一切,但随着你慢慢升级你的初始工作,有很多简单的方法可以解决这些问题。

一旦构建完成,数据在加载后立即被读取,然后您只需进行一次复制和粘贴、排序、删除(只需按一下键盘,一分钟,而不是几个小时),然后就大功告成了。我之所以提到这一点,是因为我曾经处于您的位置,并且像您在问题中提出的那样,用蛮力解决问题,我相信您可能会觉得很难相信,但是几个小时的艰苦跋涉,伴随着必须大量消除的错误、鼠标失误等,现在实际上只需要一分钟。享受不再从您身上偷走的生活吧!

相关内容