Excelmacros – 如何将包装的文本分解为合并列的行?

我必须从PDF导入数据到SAS,一步就是将PDF数据转换成excel电子表格,然后再转换为文本以实现更简单的SAS导入。 通常PDF数据转换成excel,很less有错误。 正如我正在尝试导入较旧的数据,它变得相当混乱,一些行被包装在一个单元格中。 我试图找出是否有一个macros可能可以帮助我解决这个错误表中没有太多的手动操作。 我从来没有在VBA编程,所以我对excelmacros很新。

这是凌乱的数据的例子:

这里是正常数据的例子:

(*注意两个图像中的数据值是不同的,例如格式化)

我曾尝试过一个macros。 为此,我将杂乱的数据复制到另一个工作表中,然后运行在单独的工作表上输出更正的数据的macros,然后将更正的数据复制到原始电子表格中的杂乱数据上。 试图编写macros后,我无法弄清楚如何告诉excel将列C,D,E,F中的数据合并到一个单元格中,并打破该封装的文本,以此类推其他合并列(如乱数据图所示)。 这是我看了一些教程后得到的当前代码:

Sub Split_Text_to_Rows() Dim splitVals1 As Variant Dim splitVals2 As Variant Dim totalVals As Long Set sh1 = ThisWorkbook.Sheets(2) Set sh2 = ThisWorkbook.Sheets(3) sh2.Cells.Clear lrow1 = sh1.Range("A65356").End(xlUp).Row For j = 1 To lrow1 splitVals1 = Split(sh1.Cells(j, 1), Chr(10)) splitVals2 = Split(sh1.Cells(j, 2), Chr(10)) For i = LBound(splitVals1) To UBound(splitVals1) lrow2 = sh2.Range("A65356").End(xlUp).Row sh2.Cells(lrow2 + 1, 1) = splitVals1(i) Next i For k = LBound(splitVals2) To UBound(splitVals2) lrow3 = sh2.Range("B65356").End(xlUp).Row sh2.Cells(lrow3 + 1, 2) = splitVals2(k) Next k Next j End Sub 

正如你所看到的,我的代码也很杂乱。 虽然,我得到的代码工作列A和B,当我到达列C – “机动车辆盗窃”等,我不知道如何分离该包装的文本,因为他们合并在列C,D, E,F。 即使在macros分割成1行到2(正常数据图像显示)之后,我也想把列I保持为两个合并行,然后继续分割单元直到列Z.任何提示都会有帮助! 请让我知道是否需要更多的信息或澄清。

我经常发现,最好的方法是首先将数据粘贴到Word中,然后在那里进行清理,将其格式化为Word表格,然后将其转移到Excel中。 原因是Word有非常强大的查找/replacefunction,可以让你快速地将一团糟变成合理的东西。 由于您没有提供可粘贴的示例数据,因此我随机在网上find了一个pdf来显示一种方法。 在这种情况下的关键是注意到,每列开头的空格后面跟着一个数字。 所以我search了“^#”(空格后跟“任意数字”),并用“^ t”(制表符)代替。 接下来,我使用Word的“转换为表格”function,之后数据表准备粘贴到Excel中。

在这里输入图像说明