112

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

1234
123461
123151
11321

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

1234,123461,123151,11321

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

13 ответов13

135

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

B1:

=A1

БИ 2:

=B1&","&A2

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

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

Если у вас Office 365 Excel, вы можете использовать TEXTJOIN():

=TEXTJOIN(",",TRUE,A:A)

22

Я на самом деле только что создал модуль в 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) и это дает мне список, разделенный запятыми.

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, но я не знаю, как в данный момент, и мне нужно вернуться к работе. ;)

6

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

%s/$/,/

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

  • % означает выполнить действие (т.е. найти и заменить) для всех строк
  • s указывает на замену
  • / разделяет аргументы (т.е. s/find/replace/options)
  • $ представляет конец строки
  • , Является текстом замены в этом случае
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
2

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

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

-2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .