根据句号将行合并为一行

Merge rows into one based on full stop

我有一个 table 格式如下。


全部


众所周知


让我们成为苹果。


abs kdjhkj kfhksh sh


kjsfhkshgkh dh.


我希望基于句号合并行,每当出现句号时,都应创建一个新行,直到出现下一个句号。 例子


众所周知,让我们成为苹果吧。


abs kdjhkj kfhksh sh kjsfhkshgkh dh.


我看到我们可以使用内置工具将 n 行合并为一行。但是我有一个很大的清单,我不能四处走动,对每组都这样做。 在代码中或通过 excel 或 libreoffice calc 的任何解决方案都会有所帮助。 虽然我可以尝试宏但不喜欢那个。无论如何,如果这是实现它的唯一方法,那为什么不呢。

如果您只是将它导入到 google 驱动器中,您可以使用:

=SPLIT(连接(A1:A5);".")

您可以在 excel 中以同样的方式使用连接,然后用“.”分隔。但据我所知,我认为你不能以那种方式分裂。无论如何,in VBA 都不是难码。但我猜你只是想解决这个问题,你正在 excel 中解决这个问题,因为你不知道如何以任何其他方式解决它。

我认为没有办法用 excel 函数来存档它。我尝试创建一个代码来满足您的需求:

代码:

Option Explicit

Sub test()

    Dim str As String
    Dim i As Long, LastRowA As Long, LastRowC As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row

        For i = 1 To LastRowA

            If InStr(1, .Range("A" & i).Value, ".") > 0 Then

                If str = "" Then
                    str = .Range("A" & i).Value
                Else
                    str = str & " " & .Range("A" & i).Value
                End If

                LastRowC = .Cells(.Rows.Count, "C").End(xlUp).Row

                If LastRowC = 1 And .Range("C1").Value = "" Then
                    .Range("C" & LastRowC).Value = str
                Else
                    .Range("C" & LastRowC + 1).Value = str
                End If

                str = ""

            Else

                If str = "" Then
                    str = .Range("A" & i).Value
                Else
                    str = str & " " & .Range("A" & i).Value
                End If

            End If

        Next i

    End With

End Sub

结果:

下面的代码比第一个答案更有效。

    Sub Program1()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim Lastrow As Long
    Dim Str1 As String
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")

    Lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    j = 1
    For i = 1 To Lastrow
        If InStr(1, ws.Cells(i, 1).Value, ".") > 0 Then
            ws.Cells(j, 3).Value = Str1 & ws.Cells(i, 1).Value
            j = j + 1
            Str1 = ""
        Else
            Str1 = Str1 & ws.Cells(i, 1).Value
        End If
    Next
   End Sub