Объединить строки в одну на основе полной остановки - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть таблица в следующем формате.


все, что есть


хорошо известен как


пусть будут яблоки.


abs kdjhkj kfhksh sh


kjsfhkshgkh dh.


Я хочу, чтобы строки объединялись на основе полной остановки, всякий раз, когда наступает полная остановка, новая строка должна создаваться до следующей полной остановки. Пример


все, что хорошо известно, пусть будет яблоками.


abs kdjhkj kfhksh sh kjsfhkshgkh dh.


Я вижу, что мы можем объединить n строк в одну, используя встроенные инструменты. Но у меня есть огромный список, я не могу ходить и делать это для каждого сета. Любое решение, в коде или через Excel или libreoffice calc будет полезно. хотя я могу попробовать макрос, но не предпочитая этого. В любом случае, если это единственный способ добиться этого, то почему бы и нет.

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Я думаю, что нет способа архивировать это с помощью функции 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

Результаты:

enter image description here

0 голосов
/ 04 апреля 2019

Приведенный ниже код эффективен по сравнению с первым ответом.

    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
0 голосов
/ 04 апреля 2019

Если вы просто импортируете его в Google Drive, вы можете сделать это с помощью:

= SPLIT (CONCATENATE (A1: A5); ".")

Вы можете сделать это в Excelиспользуя конкатенацию таким же образом, а затем также разделяя на "."но я не думаю, что вы не можете разделить таким образом, насколько я знаю.В любом случае в VBA нет сложного кода.Но я думаю, вы просто хотите решить эту проблему, и вы делаете это превосходно, потому что вы не знаете, как это сделать любым другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...