Страницы: 1
RSS
Транспонировать данные, соответствующие своим id, в горизонтальные ячейки
 
Добрый день! Необходимо транспонировать данные соответствующие своим  id в горизонтальное положение.
Изменено: nicex - 22.01.2019 19:10:24
 
Как? Две строки сделать?
 
vikttur, не совсем вас понял, данные соответствующие одному id в одну строку
 
А я Вас совсем не понял. Покажите пример результата.
 
Пример:
 
Всегда ли будут пустые строки между блоками данных?
 
Юрий М, будут всегда, но можно и убрать пустые строки
 
Если для Excel2010+, то такой вариант.
Код
=IFERROR(INDEX($A2:$A300;AGGREGATE(15;6;ROW($1:$300)/($B2:$B300<>"");COLUMNS($F:F)));"'")
 
nicex,
Код
Sub RTranspose()
Dim a&, b%
With Sheets(1)
  a = .UsedRange.Rows.Count + .UsedRange.Row - 1
  For b = 1 To 2
    Sheets(2).Cells(b, 1).Resize(1, a) = Application.Transpose(Intersect(.UsedRange, .Columns(b)))
  Next
End With
End Sub
 
jakim, 2007

Anchoret, сортировать из горизонтальных ячеек будет не легче чем из вертикальных
 
nicex, и? Вы просили транспонирование, и Вы его получили. про сортировку речи не было.
 
Anchoret спасибо, выше файл с примером
 
Можно обойтись UDF VLOOKUP2()/ВПР2()  - протянуть её по списку уникальных.
Например вот под показанным результатом:
Код
=VLOOKUP2($A:$B;1;$A$7;СТОЛБЕЦ()-6;2)

http://prntscr.com/mao6ve
Изменено: Hugo - 22.01.2019 20:47:25
 
Ещё один вариант без пустых строк.
 
Hugo, не получается, нужен файл с примером
jakim, не смог разобраться, может в 2007 не работает
 
Функцция АГРЕГАТ есть начиная с 2010 офиса.
 
Файл у Вас есть, ну а код вот:
Код
Function VLOOKUP2(Table As Variant, SearchColumnNum As Long, SearchValue As Variant, _
                N As Long, ResultColumnNum As Long)
    Dim i As Long, iCount As Long
    If TypeName(Table) = "Range" Then Table = Intersect(Table.Parent.UsedRange, Table).Value
    VLOOKUP2 = ""
    For i = 1 To UBound(Table)
        If Table(i, SearchColumnNum) = SearchValue Then iCount = iCount + 1
        If iCount = N Then
            VLOOKUP2 = Table(i, ResultColumnNum)
            Exit For
        End If
    Next i
End Function
 
nicex,
Код
Sub RTranspose()
Dim a&, b%, aa As Range, bb As Range
b = 0
With Sheets(1)
  a = .UsedRange.Rows.Count + .UsedRange.Row - 1
  For Each aa In .Range(.Cells(.UsedRange.Row + 1, 2), .Cells(a, 2))
    If Len(aa) > 0 Then
      If b = 0 Then b = aa.Row: Set bb = aa Else Set bb = Union(bb, aa)
    ElseIf b > 0 Then
      .Range("H" & b).Resize(1, bb.Cells.Count) = Application.Transpose(bb)
      b = 0
    End If
  Next
End With
End Sub
 
Вариант для 2007 офиса на Лист3 формулами
 
Anchoret, jakim, Hugo, Спасибо!

Anchoret, до половины таблицы работает
Цитата
Run-time error '6':
Overflow
всего в таблице 59 тыс строк
 
nicex, рядом с переменной "b" поставьте тот-же значок, что и у "a".
 
Anchoret, Dim a&, b&, aa As Range, bb As Range так ? (наугад поставил, ничего не отвалится ?)
Страницы: 1
Наверх