Страницы: 1
RSS
Разъединить коды в ячейке
 
Здравствуйте!
Помогите пожалуйста с заданием: нужно в файле в столбце "escalations" разъединить коды(если в ячейке два и более, они идут через пробел), то нужно внизу продублировать ту же строку и вставить второй код и так далее, в зависимости от кол-ва кодов в ячейке.
Изменено: l-lisa - 24.03.2021 14:23:58
 
l-lisa, п можно показать пару 3-10 строк исходных данных и рядом или на другом листе то что хотите поучить ну и чуть более развернуто описать логику
Не бойтесь совершенства. Вам его не достичь.
 
пример , без макроса не обойтись
 
В power query это один тыц кнопки (если я правильно поняла)
(ошибки, про которые он там пишет, это н/д из последнего столбца, если там будут данные, ругаться не будет)
Изменено: Xel - 24.03.2021 14:51:49
 
Цитата
Xel написал:
В power query это один тыц кнопки (если я правильно поняла)
Дело в том, что есть строки с тремя кодами через пробел, а есть просто с одним кодом, можно так в POwerQuery cделать, чтобы только там где больше 1-го кода было , дублировать строку и в ней прописывать второй, третий код?
 
Результат подозрительно похож на ваш "ручной". Проверьте с другими данными.
Изменено: Xel - 24.03.2021 14:59:42
 
Ну вы на примере только с двумя кодами сделали, всё так, а можете рассказать как вы это сделали, потому что у меня файл исходный большой
 
Исходные данные должны быть отформатированы таблицей и называться "Таблица1", данные - обновить все.
 
Код
Sub escalations()
    
    Dim sh As Worksheet
    Set sh = ActiveSheet
    
    Dim y As Long
    Dim x As Integer
    Dim arr As Variant
    With sh
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        x = .Cells(1, .Columns.Count).End(xlToLeft).Column
        arr = .Range(.Cells(1, 1), .Cells(y, x))
    End With
    
    Dim e As Integer
    For x = 1 To UBound(arr, 2)
        If arr(1, x) = "escalations" Then
            e = x
            Exit For
        End If
    Next
    If e = 0 Then
        MsgBox "Не найден столбец escalations", vbInformation
        Exit Sub
    End If
    
    Dim u As Long
    u = 1
    Dim wb As Workbook
    Set wb = Workbooks.Add(1)
    sh.Rows(1).Copy wb.Sheets(1).Cells(u, 1)
    
    Dim aEx As Variant
    Dim vEx As Variant
    Dim brr As Variant
    ReDim brr(1 To 1, 1 To UBound(arr, 2))
    For y = 2 To UBound(arr, 1)
        aEx = Split(arr(y, e), " ")
        For Each vEx In aEx
            For x = 1 To UBound(brr, 2)
                brr(1, x) = arr(y, x)
            Next
            brr(1, e) = vEx
            u = u + 1
            wb.Sheets(1).Cells(u, 1).Resize(1, UBound(brr, 2)) = brr
        Next
        
    Next
End Sub
 
Xel, спасибо!
Вы что взяли мои обработанные данные и сделали новую талицу? зачем?

МатросНаЗебре, Спасибо огромное!!! :)  :)  :)
Страницы: 1
Читают тему
Наверх