You didn’t mention if you are using Excel 2003 or 2007, but you may run into an issue with the # of rows in Excel 2003 being capped at 65,536. If you are using 2007, the limit is 1,048,576.
Also, can I ask what your end goal is for your analysis? If you need to perform many statistical calculations on your data, I would recommend moving out of the Excel environment into something that is more directly suited for data manipulation and analysis, such as R.
There are a variety of options for connecting R to Excel, including
- RExcel
- RODBC
- Other options in the R manual
Regardless of what you choose to use to move data in/out of R, the code to change from wide to long format is pretty trivial. I enjoy the melt()
function from the reshape package. That code would look like:
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)
From there, you can perform any number of statistical or graphing operations. If you use the RExcel plugin above, you can fire all of this up and run it within Excel itself. The R community is very active and can help address any and all questions you may encounter.
Good luck!
Добрый вечер! http://www.planetaexcel.ru/forum.php?thread_id=13020 вот тут обсуждали как перенести значения из нескольких столбцов в один. А как сделать аналогичное в столбец d в порядке a1, b1, a2, b2? Число сторок в столбцах A и B может быть разным. Файлик с примером прикрепляю . Заранее признателен за любую помощь! |
|
vikttur Пользователь Сообщений: 47199 |
=ИНДЕКС($A$2:$B$6;ЦЕЛОЕ(СТРОКА(2:2)/2);ОСТАТ(СТРОКА(2:2);2)+1) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Legal, Вы бы сразу уточняли: нужно формулами или макросом? |
формула уже есть — СПАСИБО vikttur!!! |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Если будет ещё и файл… Ваш. Небольшой. Со столбцами исходных данных. С указанием в какую ячейку скопировать. |
Файл со столбцами исходных данных прикрепляю. Повторюсь число строк в столбцах A и B всегда разное. Буду благодарен за уделенное время на иой вопрос. |
|
vikttur Пользователь Сообщений: 47199 |
Динамическая формула для разного количества строк/столбцов (разбита для наглядности): |
Уважаемый vikttur, формула работает, если везде изменить столбец F на B. Правильно ли я делаю? |
|
vikttur Пользователь Сообщений: 47199 |
Диапазон $A$2:$F$20 — максимальный предполагаемый диапазон с данными. |
Разобрался, спасибо! Вводил формулу в столбец D, соответственно получал ошибку о циклической ссылке. |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
|
Фантастика!!! |
|
alex80192 Пользователь Сообщений: 14 |
Похожая проблема, тоже нужно собрать данные из нескольких столбцов в один, как в примере, но столбцов около 2000, поэтому нужны формулы и если можно макрос. Заранее благодарен. |
vikttur Пользователь Сообщений: 47199 |
=ЕСЛИ(ЦЕЛОЕ(СТРОКА(2:2)/5)>СЧЁТЗ($A$2:$A$20);»»;ИНДЕКС($A$1:$E$4;ОСТАТ(СТРОКА(4:4);4)+1;ЦЕЛОЕ((СТРОКА(2:2)+2)/4))) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Иду следом за Виктором. Макрос. |
Спасибо vikttur и Юрий М, я в макросах и формулах совсем дилетант, хочу попросить еще один макрос под этот пример. |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Аналогичный макрос был у меня в предыдущем сообщении. Нужно формировать столбец на этом листе, или на отдельном? |
vikttur Пользователь Сообщений: 47199 |
Формулы и макросы на поток |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Ну и я, вслед за Виктором. |
Друзья! |
|
vikttur Пользователь Сообщений: 47199 |
|
C доп. столбцом чуть чуть не то в плане что на листе3 столбец А надо будет формулу дописывать постоянно, так как этот лист3 каждый раз новый выгружается. Но идея хорошая, как то вот привык к ИНДЕКС |
|
lena Пользователь Сообщений: 18 |
{quote}{login=Юрий М}{date=03.02.2010 01:21}{thema=}{post}Ну и я, вслед за Виктором.{/post}{/quote} |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Поместить код в личную книгу макросов и создать какую-нибудь кнопочку на панели инструментов. |
lena Пользователь Сообщений: 18 |
Так и сделала. Но когда открываю новый файл с данными и жму на эту кнопку, ничего не происходит. Там есть привязка к листам или к их очерёдности или к их количеству? |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Там — это где? Lena, постарайтесь без загадок. |
lena Пользователь Сообщений: 18 |
Там — это у вас в макросе:) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
А что тут смешного? У меня в этой теме три файла. |
lena Пользователь Сообщений: 18 |
я не смеюсь. это просто улыбка. не поняла что вы имели ввиду. речь про файл post_96223.xls |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#30 20.04.2012 16:39:53 С третьего раза получилось сказать, про какой файл разговор. |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
1 |
|
Перенос данных из разных столбцов в один24.09.2015, 11:53. Показов 63892. Ответов 20
Добрый день. Подскажите пожалуйста как столбец A объединить с B, чтобы данные получились общие? Т.е. не слить слово+слово, а сделать так, чтобы после окончания слов из столбца A, следовали слова из столбца B. Спасибо.
0 |
144 / 126 / 50 Регистрация: 25.06.2015 Сообщений: 375 |
|
24.09.2015, 12:03 |
2 |
не слить слово+слово, а сделать так, чтобы после окончания слов из столбца A, следовали слова из столбца B. и чем же первое отличается от второго? Наличием пробела?
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
24.09.2015, 12:45 |
3 |
Пожалуй то же погадаю
Думаю моя задача самая простая Простой задаче — простая формула Код =ЕСЛИ(СТРОКА(A1)>СЧЁТЗ(A:A)*СЧЁТЗ(B:B);"";ИНДЕКС(A:A;(СТРОКА(A1)+СЧЁТЗ(B:B)-1)/СЧЁТЗ(B:B))&" "&ИНДЕКС(B:B;ОСТАТ(СТРОКА(A1)-1;СЧЁТЗ(B:B))+1))
2 |
chumich |
24.09.2015, 13:06
|
Не по теме:
простая формула :good:
0 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 13:25 [ТС] |
5 |
Genbor, AlexM, благодарю Вас. Добавлено через 10 минут
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
24.09.2015, 13:31 |
6 |
diusha82, Файл пример нужен, чтобы не гадать.
0 |
2079 / 1232 / 464 Регистрация: 20.12.2014 Сообщений: 3,237 |
|
24.09.2015, 13:40 |
7 |
К сожалению не совсем то, что нужно. diusha82, к сожалению, здесь не всегда могут угадывать то, что вам нужно, если вы об этом не говорите:
Мне нужно, чтобы все содержимое столбцов A, B, C, D… перешло в один столбец Про столбцы C и D не было сказано ни слова. Описывайте задачу четко и в полном объеме, а не выдавайте ее кусочками. И прикладывайте файл, пусть не оригинальный, но соответствующий структуре и нюансам оригинального.
1 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 14:30 [ТС] |
8 |
Прошу прощения. Согласен с Вами. Мое упущение. «A» «B» Так вот нужно, чтобы получилось все в одном столбце: Столбцов с содержимым может быть много.
0 |
2079 / 1232 / 464 Регистрация: 20.12.2014 Сообщений: 3,237 |
|
24.09.2015, 14:37 |
9 |
То есть: каждое слово в своей ячейке и количество столбцов неизвестно?
0 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 14:51 [ТС] |
10 |
Каждое слово или фраза в каждой ячейке. У меня вообще на данный момент 19 столбцов с содержимым разных слов и словосочетаний. Мне нужно по принципу, который я описывал выше переложить все слова и словосочетания из всех столбцов в один.
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
24.09.2015, 14:57 |
11 |
Месяц назад решал подобную задачу
2 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 16:41 [ТС] |
12 |
Сообщение было отмечено chumich как решение РешениеAlexM, спасибо. То, что нужно, но получается только на Вашем файле. Копирую формулу на свой и все ломается. При вставке говорится, что она с ошибкой и некорректное значение появляется. Пробелы все убираю.
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
24.09.2015, 16:49 |
13 |
Я так понимаю, что один столбец должен быть пустым? Не обязательно.
Что значит ввод «Ctrl+Shift+Enter»? Это значит, что ввод делать не просто Enter, а комбинацией трех клавиш. Так вводят формулы массива.
1 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 17:06 [ТС] |
14 |
Это значит, что ввод делать не просто Enter, а комбинацией трех клавиш. Так вводят формулы массива. Вроде как получилось.
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
24.09.2015, 17:18 |
15 |
чтобы увеличить количество проверяемых столбцов в фрагментах надо изменить буку I на большую От A до I 9 столбцов.
1 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 17:45 [ТС] |
16 |
надо изменить буку I на большую От A до I 9 столбцов. Вроде как получилось. Спасибо. Добавлено через 12 минут
0 |
2640 / 1697 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
24.09.2015, 18:07 |
17 |
Да забыл об этом упомянуть C$1:K$99 тоже 9 столбцов. Надо и К заменить на большую.
1 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||
24.09.2015, 18:28 |
18 |
|||||
Сообщение было отмечено diusha82 как решение Решениеdiusha82, макросом задача решается проще и естественнее.
Вложения
4 |
0 / 0 / 1 Регистрация: 24.09.2015 Сообщений: 14 |
|
24.09.2015, 19:01 [ТС] |
19 |
Казанский, Это просто улет)))
0 |
0 / 0 / 0 Регистрация: 20.07.2020 Сообщений: 1 |
|
21.07.2020, 13:57 |
20 |
Казанский, понимаю, что тема очень старая, но возникает проблема при использовании макроса, когда количество строк большое — примерно 20 тысяч. Не подскажите, как ее решить?
0 |
Исходные данные: Дана огромная таблица в Excel с большим количеством строк и столбцов.
Задача: собрать все значения всех колонок в один столбец.
Рис.1. Исходная таблица Excel
Решение: для решения задачи потребуется помощь макросов. Ниже приведен код макроса для решения задачи.
Sub CopyFilledRows() On Error Resume Next r = 1 With Sheets(2) For Each c In Intersect(Selection, ActiveSheet.UsedRange).Cells If c <> "" Then .Cells(r, 1) = c r = r + 1 End If Next End With End Sub
Для того, чтобы макрос сработал, выполните следующие шаги:
1. Добавть макрос в книгу (Разработчик – Visual Basic, в открывшемся редакторе вставьте код)
2. Выделите на листе диапазон данных, которые нужно собрать в один столбец;
3. Запустите макрос (Разработчик – Макросы – Выполнить)
Рис.2. Запуск макроса в Excel
На втором листе книги в первой колонке будет массив всех значений из выделенного фрагмента.
Как перенести ячейки в один столбец на основе уникальных значений в другом столбце?
Предположим, у вас есть диапазон данных, содержащий два столбца, теперь вы хотите транспонировать ячейки в одном столбце в горизонтальные строки на основе уникальных значений в другом столбце, чтобы получить следующий результат. У вас есть какие-нибудь хорошие идеи, как решить эту проблему в Excel?
Перенести ячейки в один столбец на основе уникальных значений с помощью формул
Перенести ячейки в один столбец на основе уникальных значений с кодом VBA
Транспонировать ячейки в одном столбце на основе уникальных значений с помощью Kutools for Excel
С помощью следующих формул массива вы можете извлечь уникальные значения и транспонировать соответствующие данные в горизонтальные строки, сделайте следующее:
1. Введите эту формулу массива: = ИНДЕКС ($ A $ 2: $ A $ 16, ПОИСКПОЗ (0, СЧЁТЕСЛИ ($ D $ 1: $ D1, $ A $ 2: $ A $ 16), 0)) в пустую ячейку, например D2, и нажмите Shift + Ctrl + Enter вместе, чтобы получить правильный результат, см. снимок экрана:
Внимание: В приведенной выше формуле A2: A16 столбец, из которого вы хотите перечислить уникальные значения, и D1 это ячейка над ячейкой формулы.
2. Затем перетащите маркер заполнения вниз к ячейкам, чтобы извлечь все уникальные значения, см. Снимок экрана:
3. А затем продолжайте вводить эту формулу в ячейку E2: =IFERROR(INDEX($B$2:$B$16, MATCH(0, COUNTIF($D2:D2,$B$2:$B$16)+IF($A$2:$A$16<>$D2, 1, 0), 0)), 0), и не забудьте нажать Shift + Ctrl + Enter ключи, чтобы получить результат, см. снимок экрана:
Внимание: В формуле выше: B2: B16 это данные столбца, которые вы хотите транспонировать, A2: A16 столбец, значения которого вы хотите транспонировать, и D2 содержит уникальное значение, которое вы извлекли на шаге 1.
4. Затем перетащите дескриптор заполнения справа от ячеек, в которых вы хотите отобразить транспонированные данные, пока не отобразится 0, см. Снимок экрана:
5. А затем продолжайте перетаскивать дескриптор заполнения в диапазон ячеек, чтобы получить транспонированные данные, как показано на следующем снимке экрана:
Возможно, формулы сложны для понимания, здесь вы можете запустить следующий код VBA, чтобы получить желаемый результат.
1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: транспонировать ячейки в один столбец на основе уникальных значений в другом столбце:
Sub transposeunique()
'updateby Extendoffice
Dim xLRow As Long
Dim i As Long
Dim xCrit As String
Dim xCol As New Collection
Dim xRg As Range
Dim xOutRg As Range
Dim xTxt As String
Dim xCount As Long
Dim xVRg As Range
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("please select data range(only two columns):", "Kutools for Excel", xTxt, , , , , 8)
Set xRg = Application.Intersect(xRg, xRg.Worksheet.UsedRange)
If xRg Is Nothing Then Exit Sub
If (xRg.Columns.Count <> 2) Or _
(xRg.Areas.Count > 1) Then
MsgBox "the used range is only one area with two columns ", , "Kutools for Excel"
Exit Sub
End If
Set xOutRg = Application.InputBox("please select output range(specify one cell):", "Kutools for Excel", xTxt, , , , , 8)
If xOutRg Is Nothing Then Exit Sub
Set xOutRg = xOutRg.Range(1)
xLRow = xRg.Rows.Count
For i = 2 To xLRow
xCol.Add xRg.Cells(i, 1).Value, xRg.Cells(i, 1).Value
Next
Application.ScreenUpdating = False
For i = 1 To xCol.Count
xCrit = xCol.Item(i)
xOutRg.Offset(i, 0) = xCrit
xRg.AutoFilter Field:=1, Criteria1:=xCrit
Set xVRg = xRg.Range("B2:B" & xLRow).SpecialCells(xlCellTypeVisible)
If xVRg.Count > xCount Then xCount = xVRg.Count
xRg.Range("B2:B" & xLRow).SpecialCells(xlCellTypeVisible).Copy
xOutRg.Offset(i, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False
Next
xOutRg = xRg.Cells(1, 1)
xOutRg.Offset(0, 1).Resize(1, xCount) = xRg.Cells(1, 2)
xRg.Rows(1).Copy
xOutRg.Resize(1, xCount + 1).PasteSpecial Paste:=xlPasteFormats
xRg.AutoFilter
Application.ScreenUpdating = True
End Sub
3. Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится диалоговое окно с напоминанием о выборе диапазона данных, который вы хотите использовать, см. снимок экрана:
4, Затем нажмите OK При нажатии кнопки появится другое окно с напоминанием о том, что нужно выбрать ячейку для отображения результата, см. снимок экрана:
6. Нажмите OK кнопку, и данные в столбце B были перенесены на основе уникальных значений в столбце A, см. снимок экрана:
Если у вас есть Kutools for Excel, объединяя Расширенные ряды комбинирования и Разделить клетки утилит, вы можете быстро выполнить эту задачу без каких-либо формул или кода.
После установки Kutools for Excel, пожалуйста, сделайте следующее:
1. Выберите диапазон данных, который вы хотите использовать. (Если вы хотите сохранить исходные данные, сначала скопируйте и вставьте данные в другое место.)
2. Затем нажмите Кутулс > Слияние и разделение > Расширенные ряды комбинирования, см. снимок экрана:
3. В Объединить строки на основе столбца диалоговом окне выполните следующие действия:
(1.) Щелкните имя столбца, на основе которого вы хотите транспонировать данные, и выберите Основной ключ;
(2.) Щелкните другой столбец, который нужно транспонировать, и щелкните Сочетать затем выберите один разделитель для разделения объединенных данных, например пробел, запятую, точку с запятой.
4. Затем нажмите Ok Кнопка, данные в столбце B были объединены в одну ячейку на основе столбца A, см. снимок экрана:
5. Затем выберите объединенные ячейки и нажмите Кутулс > Слияние и разделение > Разделить клетки, см. снимок экрана:
6. В Разделить клетки диалоговое окно, выберите Разделить на столбцы под Тип вариант, а затем выберите разделитель, который разделяет ваши объединенные данные, см. снимок экрана:
7. Затем нажмите Ok и выберите ячейку, чтобы отобразить результат разделения в появившемся диалоговом окне, см. снимок экрана:
8. Нажмите OK, и вы получите нужный вам результат. Смотрите скриншот:
Скачать и бесплатную пробную версию Kutools for Excel Сейчас !
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!