Объединить строку в текстовой ячейке с другой строкой (в том же месте - разделитель) в других ячейках - PullRequest
0 голосов
/ 21 ноября 2018

Во-первых, для ясности, я использую Excel 2013, поэтому я не смогу получить доступ к новым модным вещам в Excel 2016.

Во-вторых, мне нужна помощь, поскольку у меня нетНе удалось найти решение или хотя бы метод решения моей проблемы ниже.

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

See example Так что для этого вопроса у меня есть 3 столбца и много строк.Разделитель в каждой ячейке: ; .В каждой ячейке в одной строке будет одинаковое количество этого разделителя.Но каждый ряд будет иметь разные номера разделителя.Предполагается, что перед первым, после последнего и между разделителями существует предполагаемое значение.

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

Так, например:

          Column 1 - Column 2 - Column 3
   Row 1   a;b;c      1;2;3      q;w;e   
   Row 2  
   Row 3  

Так что я бы для столбца 4 содержал результат конкатенации, который равен "a1q", column5 "b2w "и столбец 6" c3e "

Или это может быть просто все в столбце 4 с разделителем, что-то вроде" a1q; b2w; c3e "

То же самое со строками 2 и 3но они могут иметь больше или меньше значений.Вот почему мне нужно что-то масштабируемое.

Я не думаю, что это возможно с обычным Excel, если не задействован VBA.Надеюсь, я прояснил вопрос и заранее благодарю вас за любую помощь.

1 Ответ

0 голосов
/ 21 ноября 2018

Этот должен поместить все в столбец 4 или "D".

Sub splitter()
    Dim SubBNameSplit() As String, BuildNameSplit() As String, NumberSplit() As String, result As String
    Dim lrow As Long
    Dim x As Range
    Dim i As Long

    With Worksheets("Sheet1")
        lrow = .Cells(Rows.Count, 1).End(xlUp).Row
            For Each x In .Range("A2:A" & lrow)
                SubBNameSplit() = Split(.Range("A" & x.Row), ";")
                BuildNameSplit() = Split(.Range("B" & x.Row), ";")
                NumberSplit() = Split(.Range("C" & x.Row), ";")
                result = ""

                For i = LBound(SubBNameSplit) To UBound(SubBNameSplit)
                    result = result & SubBNameSplit(i) & BuildNameSplit(i) & NumberSplit(i) & ";"
                Next i

                .Range("D" & x.Row).Value = result
            Next x
    End With
End Sub
...