Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Из двух столбцов одна строка, Преобразовать два столбца в виде одной строки, в заданном порядке
 
Доброго времени суток!
Не пойму, все перепробовал.
Как вывести данные двух столбцов в одну строку, с заданным порядком ячеек. Т.е есть два столбца со значениями "Атрибут" и "Значение", необходимо вывести эти данные в строку, таким образом, чтобы первым шел "Атрибут" далее "Значение". Данные в столбцах всегда меняются и может возникнуть ситуация, когда значение займет несколько ячеек в столбце, тогда в строке эти значения необходимо вывести через запятую (отмечено розовым цветом) Сам пример во вложении
 
А зачем Вам это?
 
У меня получилось вот так.
Как объединить через запятую, еще думаю.  
 
При помощи Power Query
F1 творит чудеса
 
Код
Sub Transpose2Row()
  Dim r&, rc&, c2&, r2&
  With Worksheets(2)
    r2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1: c2 = 1:  r = 2
    Do While Not IsEmpty(Cells(r, 2))
      If Not IsEmpty(Cells(r + 1, 2)) And IsEmpty(Cells(r + 1, 1)) Then
        rc = Application.Min(Cells(r, 1).End(xlDown).Row, Cells(r, 2).End(xlDown).Row + 1) - r
        .Cells(r2, c2) = Cells(r, 1): .Cells(r2, c2 + 1) = Join(WorksheetFunction.Transpose(Cells(r, 2).Resize(rc, 1)), ", ")
      Else
        .Cells(r2, c2).Resize(1, 2).Value = Range(Cells(r, 1), Cells(r, 2)).Value: rc = 1
      End If
      c2 = c2 + 2: r = r + rc
    Loop
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Максим Зеленский, Я был близок, ни как синтаксис победить не могу))  
 
К вопросу зачем: необходимо для занесения атрибутов в БД. Именно в этом формате БД может съесть эти данные.
У меня получилось написать скрипт на питоне, но не совсем удобно.
 
Доброе время суток.
Цитата
Максим Зеленский написал:
При помощи Power Query
Максим, а не проще ли так?
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Filled Down" = Table.FillDown(Source,{"Атрибут"}),
    #"Grouped Rows" = Table.Group(#"Filled Down", {"Атрибут"}, {{"Значение", each Text.Combine([Значение],","), type text}}),
    singleRow = {List.Combine(List.Zip({#"Grouped Rows"[Атрибут], #"Grouped Rows"[Значение]}))},
    result = Table.FromRows(singleRow, null)
in
    result

Или это демо виртуозного мышкоклацания? :)
 
Спасибо всем, вроде все работает
Страницы: 1
Читают тему (гостей: 1)
Наверх