Преобразовать столбец в список через запятую


129

У меня есть задача создания простого листа Excel, который принимает неопределенное количество строк в столбце A, например:

1234
123461
123151
11321

И сделайте их в списке через запятую в другой ячейке, которую пользователь может легко скопировать и вставить в другую программу, например так:

1234,123461,123151,11321

Какой самый простой способ сделать это?


8
Частью решения могут быть Edit, Paste Special, Transpose для преобразования столбца в строку. Если другая программа принимает вкладки вместо запятых, то после копирования новой строки все готово.
Арджан

Как вы делаете противоположное этому? Взять список через запятую и преобразовать его в столбец содержимого?
Stevvve

1
@stevvve использовать функцию Text to Columns на вкладке данных. support.microsoft.com/en-us/kb/214261
Тревор,

Для этого я использую любой текстовый редактор с поддержкой регулярных выражений, например notepad ++. Скопируйте значения столбца и вставьте его в редактор, найдите и замените регулярное выражение, найдите «\ r \ n» и замените на «,». Если вы хотите преобразовать CSV в столбец, найдите «,» и замените на «\ r \ n»
junaling

Ответы:


145

Предполагая, что ваши данные начинаются с A1, я бы поместил в столбец B следующее:

B1:

=A1

БИ 2:

=B1&","&A2

Затем вы можете вставить столбец B2 вниз по всему столбцу. Последняя ячейка в столбце B должна теперь быть разделенным запятыми списком столбца A.


8
Это отлично подходит для ограниченного числа строк, но (в зависимости от доступной памяти?) Процесс прервется, если вы объедините более пары тысяч строк, в результате чего выходное значение будет неполным. Быть осторожен.
samthebrand

При использовании Excel 2013 на мощном компьютере под управлением Windows 10 Pro это не удалось выполнить всего за 30–35 строк. Мне нужно было более 200. Решение от Майкла Джозефа сработало отлично.
Судебный эксперт

75
  • Скопируйте столбец в Excel
  • Открытое слово
  • «Специальная вставка» только для текста
  • Выберите данные в Word (те, которые вам нужно преобразовать в текст, разделенный ,), нажмите Ctrl- H(Найти и заменить)
  • В поле «Найти что» введите ^p
  • В поле «Заменить на» введите ,
  • Выберите «Заменить все»

+1 То же, что и «официальное» решение здесь от Microsoft: support.microsoft.com/kb/819964
Neo

очень милое решение ... :-)
Сараванан

просто чистая магия :)
Sudheej


23

Я на самом деле только что создал модуль в VBA, который выполняет всю работу. Он берет мой ранжированный список и создает строку с разделителями-запятыми, которая выводится в ячейку по моему выбору:

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

Итак, в мою камеру я просто положил, =csvRange(A:A)и это дает мне список, разделенный запятыми.


1
Ах .. довольно близко к моему ответу, но мне нравится ваша реализация.
mpeterson

10

Альтернативный подход заключается в вставке столбца Excel в этот инструмент в браузере:

convert.town/column-to-comma-separated-list

Он преобразует столбец текста в разделенный запятыми список.

Так как пользователь все равно копирует и вставляет в другую программу, это может быть для него таким же простым.


7

Вы могли бы сделать что-то вроде этого. Если вы не говорите об огромной электронной таблице, это будет хорошо.

  • Alt-F11, создать макрос для создания списка (см. Код ниже)
  • Назначьте его ярлыку или кнопке панели инструментов
  • Пользователь вставляет свой столбец чисел в столбец A, нажимает кнопку, и его список попадает в ячейку B1.

Вот код макроса VBA:

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

Обязательно установите формат ячейки B1 на «текст», иначе вы получите испорченный номер. Я уверен, что вы можете сделать это и в VBA, но я не уверен, как в данный момент, и мне нужно вернуться к работе. ;)


7

Используйте vi или vim, чтобы просто поставить запятую в конце каждой строки:

%s/$/,/

Чтобы объяснить эту команду:

  • % означает выполнить действие (т.е. найти и заменить) для всех строк
  • s указывает на замену
  • /разделяет аргументы (т. е. s/find/replace/options)
  • $ представляет конец строки
  • , текст замены в этом случае

Согласовано. Даже не близко.
Манчерелли

Не согласен с комментариями из-за контекста. Кто-то с учетной записью суперпользователя, который публикует здесь сообщения, часто использует vim.
uniquegeek

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

2

Вы можете использовать руководство How-To Geek по превращению строки в столбец и просто перевернуть его. Затем экспортируйте данные в формате csv (в формате с разделителями-запятыми), и у вас будет список с открытым запятыми! Вы можете скопировать из блокнота и положить его в Excel, если хотите. Кроме того, если вам нужен пробел после запятой, вы можете воспользоваться функцией поиска и замены, заменив "," на ",". Надеюсь, это поможет!


Экспорт в CSV выходит за рамки возможностей этого пользователя. Мне нужно, чтобы он был точным и щелкнул в Excel.
Манчерелли

2

muncherelli, мне понравился твой ответ, и я его подправил :). Просто незначительная вещь, бывают случаи, когда я беру данные с листа и использую их для запроса к базе данных. Я добавил необязательный параметр «textQualify», который помогает создать разделенный запятыми список, используемый в запросе.

Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

1

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

list title 1

item 1
item 2

list title 2

item 1
item 2

и объединяет их конечно в несколько строк, по 1 на список.

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

    Sub generatecsv()

      Dim dataRow As Integer
      Dim listRow As Integer
      Dim data As String

      dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
      listRow = 1: Rem the row in column B that is getting written

      Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
        If (data = "") Then
          data = Cells(dataRow, 1).Value
        Else
          If Cells(dataRow, 1).Value <> "" Then
            data = data & "," & Cells(dataRow, 1).Value
          Else
            Cells(listRow, 2).Value = data
            data = ""
            listRow = listRow + 1
          End If
        End If
        dataRow = dataRow + 1
      Loop

      Cells(listRow, 2).Value = data

    End Sub

1

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

В этом случае лучше всего скопировать столбец, создать новую рабочую книгу, пройти специальную A1книгу новой книги и сделать Transposeтак, чтобы столбец стал строкой. Затем сохраните книгу как .csv. Ваш csv теперь представляет собой обычный текстовый разделенный запятыми список, который вы можете открыть в текстовом редакторе.

Примечание. Не забудьте переместить столбец в строку перед сохранением в формате csv. В противном случае Excel не сможет вставить запятую между значениями.


-1

Один из самых простых способов - использовать веб-приложение zamazin.co для таких задач, разделяющих запятые. Просто заполните данные столбца и нажмите кнопку конвертации, чтобы создать список через запятую. Вы даже можете использовать некоторые другие настройки для улучшения желаемого результата.

http://zamazin.co/comma-separator-tool

введите описание изображения здесь


Это сейчас на delim.co
Фил

-2

Используйте =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)в ячейке, которую вы хотите отобразить результат.


3
Это невероятное ручное решение.
Даниэль Хари
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.