根据句号将行合并为一行
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
我有一个 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