Страницы: 1
RSS
как несколько столбцов преобразовать в один
 
Помогите сделать следующее:
есть три столбца со значениями:    
a  b  c
d  e  f
x  y  z

Нужно преобразовать их в один столбец, но чтобы значения, стоявшие на одной строке, встали друг под другом в том же порядке, например:
a
b
c
d
e
f
x
y
z

Надеюсь понятно объяснил.
Очень нужна помощь! Помогите.
Изменено: bishop - 23.09.2016 11:10:59
 
Ввели в C9 и протянули вниз:
=ИНДЕКС($A$1:$D$3;ЦЕЛОЕ((СТРОКА()-СТРОКА($8:$8)-1)/ЧИСЛСТОЛБ($A$1:$D$3))+1;ОСТАТ((СТРОКА()-СТРОКА($8:$8)-1);ЧИСЛСТОЛБ($A$1:$D$3))+1)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Класс! Спасибо за скорость и помощь!
 
Макрос устроит?
 
Ой, поделитесь пжлст!
 
А Вы, пжлст, не жмите кнопку цитирования, когда нужно просто ответить.
 
Код
Sub СтрокиВСтолбец()

    Dim cl As Range
    Dim s As String
    Dim arr
    
    With ActiveSheet
        For Each cl In .UsedRange.Cells
            If cl.Text <> "" Then
                s = s & " " & cl.Text
            End If
        Next
        arr = Split(s)
    End With

    Workbooks.Add
    Cells(1).Resize(UBound(arr) - 1) = WorksheetFunction.Transpose(arr)
    
End Sub

 
МатросНаЗебре, Вы немного не так сделали. У вас получается, что макрос переносит значение из одной ячейки в столбец, а у меня в примере речь идет про несколько отдельных столбцов.
 
Мой вариант.
 
Пока не понимаю, что не так?

Результат совпадает с ТЗ.
Пример прикладываю.
 
Юрий М, все идеально! Вы меня очень выручили и избавили от долгой рутинной работы.
Тема закрыта, всем спасибо!
 
Это сообщение не является ответом на
Цитата
bishop написал: Вы немного не так сделали.
С этим ещё буду разбираться.

Поправил ошибку.
Цитата
Нужно заменить
Cells(1).Resize(UBound(arr) - 1) = WorksheetFunction.Transpose(arr)
на
Cells(1).Resize(UBound(arr) + 1) = WorksheetFunction.Transpose(arr)
 
МатросНаЗебре, вам спасибо большое, ваш вариант тоже пригодится в хозяйстве.
 
Добрый день! Подскажите, пожалуйста, похожий вопрос, что и автора темы.

Только у автора столбцы:
a  b  c
d  e  f
x  y  z

Преобразуются в:
a
b
c
d
e
f
x
y
z

А мне нужно:
a
d
x
b
e
y
c
f
z

То есть чтобы значение каждого столбца располагалось снизу в первом столбце.
Как такое осуществить?
 
pq

pq (без пустых)
Изменено: sotnikov - 16.07.2024 11:00:57
 
Цитата
kul86 написал:
А мне нужно:
=INDEX($A$1:$D$3;MOD(ROW(A1)-1;3)+1;INT(ROW(A3)/3))
Естественно, пропусков быть не должно.
 
Цитата
kul86:  А мне нужно:
a
d
x
=ЕСЛИОШИБКА(ИНДЕКС(A$1:D$3;ОСТАТ(ЧСТРОК(D$9:D9)-1;СЧЁТЗ(A$1:A$3))+1;ЦЕЛОЕ((ЧСТРОК(D$9:D9)-1)/СЧЁТЗ(A$1:A$3))+1);"")
одной формулой (21-й эксель):
=LET(таб_;A1:D3;чс_;ЧСТРОК(таб_);чк_;ЧИСЛСТОЛБ(таб_);инд_;ПОСЛЕД(чс_*чк_)-1;ИНДЕКС(таб_;ОСТАТ(инд_;чс_)+1;ОТБР(инд_/чс_)+1))
или покороче, но помедленней:
=ФИЛЬТР.XML("<l><i>"&ОБЪЕДИНИТЬ("</i><i>";1;ТРАНСП(A1:D3))&"</i></l>";"//i")
Страницы: 1
Читают тему
Наверх