Страницы: 1
RSS
Разбить на разные строки значение, внесённое в одну ячейку., Разделить ячейку
 
Добрый день.
Подскажите, пожалуйста, как разделить ячейку по ФИО на строки? Разделители не помогают.
пример в приложении.
Изменено: Юрий М - 12.08.2022 15:25:19
 
Здравствуйте, ну скорее на столбцы, а не на строки? В вашем случае вам нужен список уникальных ФИО или же разделителей, но так как у вас встречаются точки, пробелы, дефисы в ФИО, а они скорее встретятся и по всему тексту, то это проблема, придется применять множество условий так как в вашем примере полная каша и лучше выкладывать пример в экселе а не в ipg
 
Хорошо, попробую собрать список ФИО.
Изменено: Айрат Бакиев - 12.08.2022 10:48:38
 
Код
'v2
Sub SplitSelection()
    Dim rn As Range
    On Error Resume Next
    Set rn = Intersect(Selection.Columns(1), ActiveSheet.UsedRange)
    On Error GoTo 0
    If rn Is Nothing Then Exit Sub
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Dim Application_Calculation As Long
    Application_Calculation = Application.Calculation
    Application.Calculation = xlCalculationManual
    
    Dim cl As Range
    For Each cl In rn
        SplitCell cl
    Next
    
    Application.Calculation = Application_Calculation
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
End Sub

Private Sub SplitCell(cl As Range)
    Dim arr As Variant
    arr = Split(cl.Value, vbLf)
    If IsArray(arr) Then
        Dim brr As Variant
        Dim bb As Variant
        For Each bb In arr
            If bb <> "" Then
                If IsEmpty(brr) Then
                    ReDim brr(0 To 0)
                Else
                    ReDim Preserve brr(0 To UBound(brr) + 1)
                End If
                brr(UBound(brr)) = bb
            End If
        Next
        If Not IsEmpty(brr) Then
            If UBound(brr) > LBound(brr) Then
                cl.Cells(2, 1).Resize(UBound(brr) - LBound(brr)).EntireRow.Insert
                cl.Cells(1, 1).Resize(UBound(brr) - LBound(brr) + 1) = Application.Transpose(arr)
            End If
        End If
    End If
End Sub

Изменено: МатросНаЗебре - 12.08.2022 15:25:37
 
Айрат Бакиев,  сформулируйте и предложите новое название темы, из которого будет понятна задача - модераторы поменяют.
Помощь скрыта.

МатросНаЗебре,  в очередной раз прошу Вас не помогать в темах с подобными названиями. Или сразу сами предлагайте адекватное.
 
Стараюсь прислушиваться, в этот раз что-то пропустил. Вариант названия темы:
Разбить на разные строки значение, внесённое в одну ячейку.
 
Айрат Бакиев, Разбить текст в ячейке по строкам через произвольный разделитель
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ранее скрытая помощь отображается.
 
Айрат Бакиев, вот вариант в Power Query. Не зная какие у вас разделители, по картинке симитированы разные - как разрыв строк в ячейке, так и просто двоеточие. Вроде работает)). Файл примера перезалит.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Ф.И.О., должность", type text}}),
    #"Разделить столбец по разделителю" = Table.ExpandListColumn(Table.TransformColumns(#"Измененный тип", {{"Ф.И.О., должность", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Ф.И.О., должность"),
    #"Разделить столбец по разделителю1" = Table.ExpandListColumn(Table.TransformColumns(#"Разделить столбец по разделителю", {{"Ф.И.О., должность", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Ф.И.О., должность"),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Разделить столбец по разделителю1", each [#"Ф.И.О., должность"] <> null and [#"Ф.И.О., должность"] <> "")
in
    #"Строки с примененным фильтром"
Изменено: Zagadka - 17.08.2022 09:37:36
 
Уважаемые, подскажите пожалуйста, а можно ли разбить сразу несколько столбцов на строки (по разделителю "перенос") каким-либо способом, т.к. стандартным подходом PQ не позволяет. Количество разделений в ячейках совпадает. В файле пример (возможно самый грубый). Возможно макрос есть какой.
Изменено: Анатолий - 15.12.2023 16:57:46
 
Цитата
Анатолий написал:
стандартным подходом PQ не позволяет
что это за подход такой?
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    standard = Table.FromColumns(
        Table.ToList(Source, (x) => List.Transform(x, each Text.Split(_, "#(lf)"))){0}
    )
in
    standard
Пришелец-прораб.
 
Подход в PQ называется "Разделить столбец" в 19 офисе.

Огромное спасибо!!!

Я неделю уже разбиваю строки, а тут 3 строчки кода.

Когда знаешь - все просто.
 
Анатолий, вообще то мышка тоже работает в этом случае
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Transposed Table" = Table.Transpose(Source),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Transposed Table", "Column1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4"}),
    #"Transposed Table1" = Table.Transpose(#"Split Column by Delimiter")
in
    #"Transposed Table1"
Пришелец-прораб.
 
Формулой
=ИНДЕКС(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A$1;СИМВОЛ(10);ПОВТОР(" ";99));(СТРОКА($1:$12)-1)*99+1;99));СТРОКА()-1)
Страницы: 1
Наверх