【问题标题】:Excel VBA - Split strings in a range at a white space, considering all cells in the rangeExcel VBA - 考虑范围内的所有单元格,将字符串拆分为空白区域
【发布时间】:2019-03-07 20:34:40
【问题描述】:

我正在从 pdf 中提取许多表,我需要将它们导入数据库。由于提取,有些出来的效果很差。

Example

我想要一个 VBA 脚本,它遍历工作表中包含字符串的所有单元格并在空白处拆分这些单元格,以便从单元格中删除空格后的任何值并放入右侧的相邻单元格.

我已经结合循环研究了 SPLIT 函数,但我被卡住了,因为我的 VBA 知识很少。

【问题讨论】:

  • 您可能想查看“文本到列”
  • 是的,我想过,但是从图中可以看到,整个列中的空格并不总是相同的,所以它会覆盖其他单元格。这就是为什么我认为有必要通过单个单元格进行循环。
  • 在您的示例图像中,无论如何,您都需要将最后一列四行中最底部的六个单元格复制到右侧,因此在将文本应用于前一行的列之前执行此操作。我每天都提取 PDF - 没有轻松的方法来做到这一点......
  • 使用文本到列,分隔。选择空格作为分隔符,也选择其他。在 Other 中放置一个不间断的空格。使用连续分隔符为一个
  • 在这种情况下,它不起作用,见图。此外,我有很多这些,所以我想使用 VBA 脚本。

标签: excel vba loops split delimiter


【解决方案1】:

您似乎很难得到答案,所以我很乐意尝试并提供帮助。

在 VBA 项目中新建一个模块并添加以下代码...

Public Sub SplitCells()
    Dim rngSrcData As Range, objDestSheet As Worksheet, lngRow As Long
    Dim lngCol As Long, arrSplit, arrData(), lngWriteRow As Long, lngIndex As Long
    Dim strDelimiter As String, i As Long, strWriteRange As String

    Set rngSrcData = Selection
    Set objDestSheet = Worksheets("Output")
    strDelimiter = " "

    objDestSheet.Cells.Clear

    With rngSrcData
        For lngRow = 1 To .Rows.Count
            lngIndex = 0

            For lngCol = 1 To .Columns.Count
                arrSplit = Split(CStr(.Cells(lngRow, lngCol)), strDelimiter, , vbTextCompare)

                For i = 0 To UBound(arrSplit)
                    ReDim Preserve arrData(lngIndex)
                    arrData(lngIndex) = arrSplit(i)

                    lngIndex = lngIndex + 1
                Next
            Next

            lngWriteRow = lngWriteRow + 1

            strWriteRange = .Cells(lngWriteRow, 1).Address & ":" & .Cells(lngWriteRow, UBound(arrData) + 1).Address
            objDestSheet.Range(strWriteRange) = arrData
        Next
    End With
End Sub

...与上述内容一起,在您的工作簿中创建一个新工作表并将其命名为“Output”。这是转换后数据的目的地。

现在选择整个数据范围(如屏幕截图所示),然后运行宏。

检查您的“输出”表,您应该会看到结果。

我希望它对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多