Как объединить данные из нескольких столбцов Excel в один столбец - PullRequest
13 голосов
/ 19 декабря 2010

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

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

Кроме того, как реализовать это решение.Я имею в виду, что если ваше решение не «формула», а VBA, как мне реализовать это решение?

Спасибо!

Ответы [ 6 ]

17 голосов
/ 19 декабря 2010

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

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

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

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

Перейдите к проекту для вашей рабочей книги и выберите «Вставить».- Модуль

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

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 для запуска кода

9 голосов
/ 09 ноября 2015

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

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

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

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

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

Нажмите Ctrl + H, замените \ t на \ n и нажмите заменить все

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

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

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

5 голосов
/ 21 февраля 2013

Вот как вы можете это сделать с помощью простых формул Excel, и вам не понадобится какой-либо изящный VBA.Хитрость заключается в использовании формулы OFFSET.Пожалуйста, ознакомьтесь с таблицей этого примера:

https://docs.google.com/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c&usp=sharing#gid=0

0 голосов
/ 31 августа 2016

Формула

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

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

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

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

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

0 голосов
/ 29 марта 2016

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

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

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

0 голосов
/ 20 декабря 2010

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

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

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

  1. RExcel
  2. RODBC
  3. Другие параметры в руководстве по R

Независимо от того, что вы выбираете для перемещения данных в / из 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 очень активно и может помочь ответить на любые вопросы, с которыми вы можете столкнуться.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...