извлекать даты из строки в Excel и копировать в новую строку - PullRequest
0 голосов
/ 10 октября 2018

Как извлечь даты из строки в ячейку Microsoft Excel?У меня есть следующая информация о ячейке A

В ячейке A2 у меня есть: 360485 В ячейке B2 у меня есть (Примечание: текст переноса в одну ячейку):

  10/7 - comment 1
  5/3/16 - comment 2
  3/21/16 comment 3
  1/26/16 - comment 4"

Я хочу получить что-то вроде этого

Col A    Col B      Col C
360485  10/7/16   - comment 1
360485  5/3/16    - comment 2
360485  3/21/16     comment 3
360485  1/26/16   - comment 4"

@ JNevill,

Данные в столбце A: 600537L Данные в столбце B

6/21/17 - text comment 1 
951396-LH/RH-951554
10/27 - text comment 2
normal text
2/5/16 - text comment 3"

Результат

 Col A    Col B                      Col C
600537L 6/21/2017             - text comment 1
600537L 951396-LH/RH-951554 
600537L 27-Oct               - text comment 2
600537L normal               text
600537L 2/5/2016             - text comment 3

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

В Excel 2010 или более поздней версии вы можете сделать это с помощью Power Query (он же Get & Transform), а затем обновить запрос, если добавите больше строк.

  • Разделить столбец 2 на linefeed character в Строки
  • Обрезать столбец 2 для удаления начальных и конечных пробелов
  • Разбить на space на столбцы, но только самый левый пробел

Вот M-код

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns
            (Source, {{"Column2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), 
            let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column2"),

    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column2", type text}}),

    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Trim", each Text.Trim([Column2])),

    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Column2"}),

    #"Split Column by Delimiter1" = Table.SplitColumn(#"Removed Columns", 
            "Trim", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Trim.1", "Trim.2"})
in
    #"Split Column by Delimiter1"

Исходные данные

enter image description here

Результаты

enter image description here

0 голосов
/ 11 октября 2018

Что-то вроде следующего приведет вас в стадион:

Sub test()
    'get that ugly b2 value into an array split by line
    Dim b2Array As Variant
    b2Array = Split(Sheet1.Range("B2"), Chr(10))

    'grab the value in a2
    Dim a2Value As String
    a2Value = Sheet1.Range("A2").Value

    'loop through the array (each line in B2 and output. Making use of more `split` here to grab values
    Dim writeRow As Integer: writeRow = 1
    For Each element In b2Array
        Sheet2.Cells(writeRow, 1).Value = a2Value
        Sheet2.Cells(writeRow, 2).Value = Trim(Split(Trim(element), " ")(0))
        Sheet2.Cells(writeRow, 3).Value = Trim(Replace(element, Split(Trim(element), " ")(0), ""))
        writeRow = writeRow + 1
    Next
End Sub

Предполагается, что это на Листе 1, и вы хотите выводить на Лист2.

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