将相同的数据sorting到列中

编辑:感谢所有人的回应。 我会继续尝试编写规则,尽可能多地涵盖所有情况,并且手动提取或尝试更多的规则来覆盖其他所有内容。

我正在尝试将相同的“types”的数据sorting到相同的列。 本质上,我得到一个数据转储,其中一堆数据(年份,公司名称,人员名称,IO编号,采购订单编号,项目描述以及一系列注释)转储到一个列中,如下所示:

在这里输入图像说明

理想的最终结果将是sorting,以便相同列中的相同types的数据,即列A中的所有年份,列B中的所有IO,列C中的所有PO,列D中的所有人员姓名,列E中的所有公司名称,而剩下的东西则被转储到F栏的“注释”部分。

我已经编写了一个使用SUBSTITUTE函数的macros,以便通过该string并用逗号代替所有破折号和反斜线,然后根据逗号分隔符分隔,然后以纯文本forms重新粘贴文本。 除了偶尔出现的公司名称中的破折号或反斜线表明拥有该IO / PO的两个人或者没有任何分隔符(例如:2012)的所有数据input时,公司项目标题IO ##### PO ####人员姓名。

所以这就是我所要求的:1.有没有比现在更好的parsing数据的方法? 如何适应例如公司名称中的短划线或没有破折号或反斜杠的string,只有空格? 2.一旦我已经parsing了所有这些数据,并将其分隔为单独的列,如下所示: 在这里输入图像说明 我如何sorting,以便相同types的信息在同一列?

任何帮助将不胜感激。 请让我知道,如果有什么不清楚。

欢迎来到StackOverflow!

  1. 如果文本遵循明确的规则,如分隔符为"-""," ,则可以使用Split()函数获取一个标记数组。 如果文本不遵循任何规则,这是不可能的。 很可能你在中间,大部分文本都遵循规则。 对于其他文本,你需要按摩你的代码,并试图find新的规则,并检查他们…见下文。

  2. 创build一些函数IsYear()IsPO()IsCompany() ,如果内容被识别,返回True 。 函数可以像IsYear = Text Like "20##"简单, IsYear = Text Like "20##"或者可以包含很多testing。 然后你做一个函数,检查每一行的每个单元格,并根据需要进行sorting。

对不起,我不能给你任何东西超过一些通用的build议,但这是一个非常具有挑战性的问题非常开放的问题。

我希望这可以让你开始。

沿着@Werner的话说:“你不能做一个丝质的钱包……”显然,解决办法是依靠谁负责垃圾,以确保你的源数据更好的形状。 不过,我想你正在寻找一个解决方法。 从你的例子来看,一些'tiding'是可能的。 例如sorting在ColumnB和2012年在ColumnC交换该行的B和C的内容。 然后,对ColumnD进行sorting,并对D和E执行相同的操作。如果ColumnF包含Quote插入空白单元格并向右移动。 如果ColumnF为空,则将该行的内容与ColumnD交换。 将ColumnD移到最后。 在ColumnF中Quote之前select任何内容,如果为空,则将其移除到ColumnE,否则将其移到ColumnH。 结果应该如下所示:

SO18131636的例子

– 比我期待的更好,我猜想可以合理编程的限制。