Как консолидировать данные из нескольких столбцов Excel Все в один столбец

Предположим, что у меня есть лист Excel с 4 столбцами данных и 20 000 строк данных в каждом столбце.

Каков наиболее эффективный способ получить его, чтобы все данные были объединены в один столбец (IE - 80 000 строк данных в столбце A вместо 20 000 строк данных, распределенных по 4 столбцам).

Также, как реализовать это решение. Я имею в виду, если ваше решение не является "формулой", а VBA, как мне реализовать это решение?

Спасибо!

Ответы

Ответ 1

Сохраните свою книгу. Если этот код не делает то, что вы хотите, единственный способ вернуться - закрыть его без сохранения и повторного открытия.

Выберите данные, которые вы хотите перечислить, в одном столбце. Должны быть смежные столбцы. Может содержать пустые ячейки.

Нажмите Alt + F11, чтобы открыть VBE

Нажмите Control + R, чтобы просмотреть Project Explorer

Перейдите к проекту для своей книги и выберите Insert - Module

Вставьте этот код в панель кода

Sub MakeOneColumn()

    Dim vaCells As Variant
    Dim vOutput() As Variant
    Dim i As Long, j As Long
    Dim lRow As Long

    If TypeName(Selection) = "Range" Then
        If Selection.Count > 1 Then
            If Selection.Count <= Selection.Parent.Rows.Count Then
                vaCells = Selection.Value

                ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1)

                For j = LBound(vaCells, 2) To UBound(vaCells, 2)
                    For i = LBound(vaCells, 1) To UBound(vaCells, 1)
                        If Len(vaCells(i, j)) > 0 Then
                            lRow = lRow + 1
                            vOutput(lRow, 1) = vaCells(i, j)
                        End If
                    Next i
                Next j

                Selection.ClearContents
                Selection.Cells(1).Resize(lRow).Value = vOutput
            End If
        End If
    End If

End Sub

Нажмите F5, чтобы запустить код

Ответ 2

Лучшее и простое решение:

Выберите диапазон столбцов, которые вы хотите скопировать в один столбец

Скопировать диапазон ячеек (несколько столбцов)

Открыть Блокнот ++

Вставить выбранный диапазон ячеек

Нажмите Ctrl + H, замените \t на\n и щелкните по замене всех

все несколько столбцов попадают под один столбец

теперь скопируйте то же самое и вставьте в excel

Простое и эффективное решение для тех, кто не хочет тратить время на кодирование в VBA

Ответ 4

Вы не указали, используете ли вы Excel 2003 или 2007, но вы можете столкнуться с проблемой, когда количество строк в Excel 2003 ограничено 65 536. Если вы используете 2007 год, предел составляет 1 048 576.

Кроме того, могу ли я спросить, какова ваша конечная цель для вашего анализа? Если вам нужно выполнить множество статистических вычислений по вашим данным, я бы рекомендовал перейти из среды Excel в нечто более подходящее для обработки и анализа данных, например R.

Существует множество вариантов подключения R к Excel, включая

Независимо от того, что вы хотите использовать для перемещения данных в/из R, код для перехода от широкоформатного формата довольно тривиален. Мне нравится функция melt() из изменить пакет. Этот код будет выглядеть так:

library(reshape)
#Fake data, 4 columns, 20k rows
df <- data.frame(foo = rnorm(20000)
    , bar = rlnorm(20000)
    , fee = rnorm(20000)
    , fie = rlnorm(20000)
)
#Create new object with 1 column, 80k rows
df.m <- melt(df)

Оттуда вы можете выполнять любое количество статистических или графических операций. Если вы используете плагин RExcel выше, вы можете запустить все это и запустить его в самом Excel. Сообщество R очень активно и может помочь решить любые вопросы, которые могут возникнуть.

Удачи!

Ответ 5

Взгляните на Blockspring - вам нужно установить плагин, но тогда это просто еще одна функция, которую вы вызываете следующим образом:

=BLOCKSPRING("twodee-array-reduce","input_array",D5:F7)

Исходный код и другие данные здесь. Если это не подходит и/или вы хотите отказаться от моего решения, вы можете fork мою функцию (Python) или использовать другой поддерживаемый язык сценариев (Ruby, R, JS и т.д.)).

Ответ 6

Формула

=OFFSET(Sheet1!$A$1,MOD(ROW()-1,COUNT(Sheet1!$A$1:$A$20000)),
    (ROW()-1)/COUNT(Sheet1!$A$1:$A$20000))

помещенный в каждую ячейку вашей второй книги, будет извлекать соответствующую ячейку из исходного текста. Нет макросов, простое копирование с одного листа на другой для переформатирования результатов.

Вам нужно будет изменить диапазоны в функции COUNT, чтобы соответствовать максимальному количеству строк в исходном листе. При необходимости отрегулируйте заголовки столбцов.

Если вам нужно что-то отличное от 0 для пустых ячеек, вы можете предпочесть включить условие.

A script для переформатирования данных может быть более эффективным, но 20k строк больше не являются реальным пределом в современной книге Excel.