Как консолидировать данные из нескольких столбцов 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
Ответ 3
Вот как вы это делаете с помощью некоторых простых формул Excel, и не нужны никакие VBA. Хитрость заключается в использовании формулы OFFSET. См. Таблицу примеров:
https://docs.google.com/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c&usp=sharing#gid=0
Ответ 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.