我正在尝试将相同的“类型”数据排序到相同的列中。基本上,我得到一个数据转储,其中一堆数据(年份,公司名称,人名,IO号,PO号,项目描述和一堆注释)转储到一个列中,如下所示:
理想的最终结果是排序,以便相同列中的相同类型的数据,即A列中的所有年份,B列中的所有IO,C列中的所有PO,D列中的所有人名,所有公司名称在E列中,剩下的任何内容都被转储到F列的“评论”部分。
我编写了一个使用SUBSTITUTE函数的宏,以便它通过这个字符串并用逗号替换所有破折号和反斜杠,然后根据逗号分隔符分隔,然后将文本重新粘贴为纯文本。这种方法效果相当不错,除非偶尔出现公司名称中有短划线或反斜杠的情况,表示拥有该IO / PO的两个人或所有数据都输入时没有任何分隔符,例如:2012公司项目名称IO ##### PO ####人名。
所以这就是我要问的: 1.有没有比我现在更好的解析数据的方法?我如何适应例外情况,例如公司名称中的破折号或没有破折号或反斜杠的字符串,只有空格? 2.一旦我解析了所有这些数据并将其分成单独的列,如下所示: 如何对相同类型的信息进行排序?
非常感谢任何帮助。如果有任何不清楚的地方,请告诉我。
答案 0 :(得分:1)
欢迎使用StackOverflow!
如果文本遵循明确的规则,例如"-"
或","
的分隔符,则可以使用Split()
函数获取令牌数组。如果文本没有遵循任何规则,那是不可能的。很可能你在中间,大多数文本都遵循规则。对于其他文本,您需要按摩您的代码并尝试查找新规则并查看它们......见下文。
创建一些功能IsYear()
,IsPO()
,IsCompany()
,如果内容被识别,则返回True
。这些函数可以像IsYear = Text Like "20##"
一样简单,也可以包含许多测试。然后你创建一个函数来检查每一行的每个单元格,并在需要时进行排序。
对不起,我不能给你一些通用建议,但对于一个非常具有挑战性的问题,这是一个非常开放的问题。
我希望这能让你开始。
答案 1 :(得分:1)
沿着@Werner的路线“你不能制作丝绸钱包......”显然,解决方案是依靠负责垃圾的人来确保你的源数据更好。但是我想你正在寻找一种解决方法。从你的例子来看,一些'tiding'是可能的。例如,对ColumnB进行排序,2012年在ColumnC中,对该行交换B和C的内容。然后对ColumnD进行排序并为D和E执行相同的操作。如果ColumnF包含Quote
,则插入一个空白单元格并向右移动。如果ColumnF为空,则使用ColumnD交换该行的内容。将ColumnD移动到最后。在ColumnF中选择Quote
之前的任何内容,如果为空,则将其删除到ColumnE,否则删除到ColumnH。结果应该类似于:
- 比我预期的更好,我猜想可以合理编程的极限。