Разделить список с разделителями на основе переменных, заканчивающихся символами, на определенные столбцы - PullRequest
0 голосов
/ 13 июня 2019

Мне удалось добраться до точки с набором данных, где у меня есть список элементов, разделенных знаком «|» условное обозначение. Сейчас я пытаюсь разделить каждый элемент списка в соответствующем столбце, однако идентификатор столбца представляет собой фрагмент текста в конце каждого значения переменной длины.

Пример данных (все в одном столбце):

Column A   
40.00A|24.00QS|8.00J[a]
40.00A|12.00J|8.00J[a]
20.00A|4.00V
30.00A|12.00CS|8.00QS

Желаемый результат:


+-------+-------+------+-------+-------+------+
|   A   |  QS   | J[a] |   J   |  CS   |  V   |
+-------+-------+------+-------+-------+------+
| 40.00 | 23.00 | 8.00 |       |       |      |
| 40.00 |       | 8.00 | 12.00 |       |      |
| 20.00 |       |      |       |       | 4.00 |
| 30.00 |  8.00 |      |       | 12.00 |      |
+-------+-------+------+-------+-------+------+

Количество конечных символов, определяющих столбцы, установлено на 6 (A, QS, J [a], J, CS и V), поэтому в начале я знаю, сколько столбцов мне понадобится.

У меня есть некоторые идеи о том, как сделать это напрямую с помощью формул, но для этого потребуется разделить элементы на отдельные столбцы с помощью разделителя, а затем использовать какой-то оператор if для некоторых дополнительных столбцов. Предпочел бы избежать проблемы со вспомогательной колонкой. Кроме того, посмотрел следующую ссылку, но она не решает решение, так как предполагает, что значение соответствует заголовку столбца (я могу это исправить, но я чувствую, что здесь есть более быстрое решение VBA): Как разделить один столбец (с неравными значениями) на несколько столбцов, отсортированных по значениям из исходного столбца?

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

После того, как я настроил эти данные, это небольшая задача, чтобы отключить их и получить данные в правильном табличном формате с помощью Power Query.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 июня 2019

, поскольку заголовки фиксированы, его можно просто опробовать следующим образом (строка и столбец данных источника и назначения могут быть изменены по вашему требованию)

enter image description here

Option Explicit
Sub test()
Dim Ws As Worksheet, SrcLastrow As Long, TrgRow As Long, Rw As Long
Dim Headers As Variant, xLine As Variant
Dim i As Long, j As Long
Set Ws = ThisWorkbook.ActiveSheet
'Column A assumed to have the texts
SrcLastrow = Ws.Range("A" & Rows.Count).End(xlUp).Row
TrgRow = 2
Headers = Array("A", "QS", "J[a]", "J", "CS", "V")

For Rw = 1 To SrcLastrow
xLine = Split(Ws.Cells(Rw, 1).Value, "|")
    For i = 0 To UBound(xLine)
    For j = 0 To UBound(Headers)
    xLine(i) = Trim(xLine(i))
        If Right(xLine(i), Len(Headers(j))) = Headers(j) Then
        Ws.Range("D" & TrgRow).Offset(0, j).Value = Replace(xLine(i), Headers(j), "") ' The output data table was assumed to be at Column D 
        End If
    Next j
    Next i
TrgRow = TrgRow + 1
Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...