1

编辑:感谢大家的所有回复。我将继续尝试编写规则以涵盖尽可能多的情况,然后手动提取或尝试纠正更多规则以涵盖其他所有内容。

我正在尝试将相同“类型”的数据排序到相同的列中。本质上,我得到了一个数据转储,其中一堆数据(年份、公司名称、人名、IO 编号、PO 编号、项目描述和一堆评论)转储到一个列中,如下所示:

在此处输入图像描述

理想的最终结果是对相同列中的相同类型的数据进行排序,即 A 列中的所有年份,B 列中的所有 IO,C 列中的所有 PO,D 列中的所有人名,E 列中的所有公司名称,剩下的任何东西都被转储到 F 列的“评论”部分。

我编写了一个使用 SUBSTITUTE 函数的宏,以便它遍历此字符串并用逗号替换所有破折号和反斜杠,然后根据逗号分隔符进行分隔,然后将文本重新粘贴为纯文本。这工作得相当好,除了在偶尔的情况下,公司名称中有破折号或反斜杠表示两个人拥有该 IO/PO,或者输入所有数据时没有任何分隔符,例如:2012公司项目标题 IO ##### PO #### 人名。

所以这就是我要问的: 1. 有没有比我现在做的更好的方法来解析数据?如何适应例外情况,例如公司名称中的破折号或没有破折号或反斜杠,只有空格的字符串?2. 一旦我解析了所有这些数据并将其分成单独的列,如下所示: 在此处输入图像描述 我如何对其进行排序以使相同类型的信息在同一列中?

任何帮助将不胜感激。如果有任何不清楚的地方,请告诉我。

4

2 回答 2

1

正如@Werner 所说的“你不能做一个丝绸钱包......”显然,解决方案是依靠负责垃圾的人来确保您的源数据处于更好的状态。但是,我想您正在寻找解决方法。从你的例子中,一些“消息”是可能的。例如,对 ColumnB 进行排序,并且 2012 在 ColumnC 中的位置交换该行的 B 和 C 的内容。然后对 ColumnD 进行排序并对 D 和 E 执行相同的操作。如果 ColumnF 包含Quote插入一个空白单元格并向右移动。如果 ColumnF 为空白,则与 ColumnD 交换该行的内容。将 ColumnD 移动到末尾。在 ColumnF 中选择之前的任何内容Quote,如果它为空,则将其移至 ColumnE,否则移至 ColumnH。结果应该类似于:

SO18131636 示例

- 比我预期的要好,我猜测可以合理编程的限制。

于 2013-08-08T17:32:04.653 回答
1

欢迎来到 StackOverflow!

  1. 如果文本遵循明确的规则,例如分隔符 as"-"或者","您可以使用该Split()函数获取标记数组。如果文本不遵循任何规则,那是不可能的。您很可能处于中间,大多数文本都遵循规则。对于其他文本,您需要修改您的代码并尝试找到新规则并使用...检查它们,请参见下文。

  2. 创建一些函数IsYear(), IsPO(),如果内容被识别IsCompany(),则返回。True这些函数可以像许多测试一样简单,IsYear = Text Like "20##"也可以包含许多测试。然后你创建一个函数来检查每一行的每个单元格,并在需要时进行排序。

很抱歉,我只能给你一些一般性的建议,但对于一个非常具有挑战性的问题来说,这是一个非常开放的问题。

我希望这能让你开始。

于 2013-08-08T17:25:05.690 回答