Страницы: 1
RSS
Разделение информации с одной строки на отдельные строки
 
Помогите, пожалуйста! Нужно разнести данные с одной строки, например (сыр, колбаса, хлеб) на отдельные строки. Очень много строк с такой информацией через запятую с пробелом и всю ее надо разнести по отдельным строкам
Изменено: Sanja - 19.06.2025 04:21:21
 
Хлеб, молоко, сыр
Яйца
Сметана, йогурт
из такого сделать такое
Хлеб
молоко
сыр
Яйца
Сметана
йогурт
 
=ТЕКСТРАЗД(ОБЪЕДИНИТЬ(", ";;A1:A3);;", ")

pq
Изменено: sotnikov - 18.06.2025 10:21:39
 
Почитайте ТУТ или ТУТ и думаю модераторы попросят Вас исправить первое сообщение
Изменено: Msi2102 - 18.06.2025 10:13:57
 
Цитата
написал:
ТЕКСТРАЗД()
такой встроенной функции у меня (Ексель 2021) нет.... но есть такая (UDF)
Код
Function РазделитьТекст(Строка As String, Optional Разделитель As String = " ", Optional Лимит As Integer = -1) ', Optional Число As Integer)
    РазделитьТекст = Split(Строка, Разделитель, Лимит)
End Function

а, вот еще что - надо транспонировать в столбец полученное
Код
{=ТРАНСП(РазделитьТекст(ОБЪЕДИНИТЬ(", ";;L10:L12)))}

массивная
Изменено: BodkhiSatva - 18.06.2025 10:24:54
 
Код
Option Explicit

Sub Разделить()
    Dim arr As Variant
    arr = GetArr(Selection)
    If IsEmpty(arr) Then Exit Sub
    
    PrintArray arr
End Sub

Private Sub PrintArray(arr As Variant)
    Dim rr As Range
    Set rr = ActiveSheet.UsedRange
    Set rr = rr.Rows(rr.Rows.Count + 2)
    Set rr = rr.Resize(UBound(arr, 1), UBound(arr, 2))
    rr.Value = arr
    SortRange rr
    
    Application.Goto rr
End Sub

Private Function GetArr(rr As Range) As Variant
    On Error Resume Next
    Set rr = Intersect(rr, rr.Parent.UsedRange)
    On Error GoTo 0
    If rr Is Nothing Then Exit Function
    
    Dim rArea As Range, arr As Variant, vv As Variant, ww As Variant
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    For Each rArea In rr.Areas
        If rArea.Cells.CountLarge = 1 Then
            arr = Array(rArea.Value)
        Else
            arr = rArea.Value
        End If
        For Each vv In arr
            For Each ww In Split(vv, ",")
                dic(Trim(ww)) = Empty
            Next
        Next
    Next
    If dic.Count = 0 Then Exit Function
    arr = dic.Keys()
    GetArr = TwoDimArr(arr)
End Function

Private Function TwoDimArr(arr As Variant) As Variant
    Dim brr As Variant
    ReDim brr(1 To UBound(arr) + 1, 1 To 1)
    Dim ya As Long
    For ya = LBound(arr) To UBound(arr)
        brr(ya + 1, 1) = arr(ya)
    Next
    TwoDimArr = brr
End Function

Private Sub SortRange(rr As Range)
    With rr.Parent.Sort
        .SortFields.Clear
        .SortFields.Add Key:=rr.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange rr
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Выделите ячейки. Запустите макрос "Разделить".
Изменено: МатросНаЗебре - 18.06.2025 10:21:23 (Добавил сортировку.)
Страницы: 1
Читают тему
Наверх