2011-02-02 16:01:08 +0000 2011-02-02 16:01:08 +0000
132
132

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

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

1234
123461
123151
11321

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

1234,123461,123151,11321

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

Ответы (14)

146
146
146
2011-02-02 16:37:59 +0000

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

B1:

=A1

B2:

=B1&","&A2

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

76
76
76
2012-06-05 05:24:51 +0000
  • Скопируйте колонку в Excel
  • Открыть слово
  • “Вставить специальное” только как текст
  • Выберите данные в Word (те, которые нужно преобразовать в текст, разделенный с ,), нажмите Ctrl-H (Найти и заменить)
  • В поле “Найти что” введите ^p
  • В поле “Заменить на” введите ,
  • Выберите “Заменить все”.
34
34
34
2017-01-25 18:05:00 +0000

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

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

23
23
23
2011-02-03 14:10:54 +0000

На самом деле я только что создал модуль на 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

So then in my cell, I just put =csvRange(A:A) and it gives me the comma-delimited list.

10
10
10
2015-04-22 20:46:58 +0000

Альтернативным подходом было бы вставить столбец Excel в этот браузерный инструмент: convert.town/column-to-comma-separated-list

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

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

7
7
7
2011-02-06 22:53:14 +0000

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

%s/$/,/

Пояснить эту команду:

  • % означает сделать действие (т.е. найти и заменить) на все строки
  • s указывает на замену
  • / разделяет аргументы (т.е., s/find/replace/options)
  • $ представляет собой конец строки
  • , является заменой текста в данном случае
7
7
7
2011-02-02 19:12:57 +0000

Ты можешь сделать что-то вроде этого. Если вы не говорите об огромной электронной таблице, то это выполнит “хорошо”…

  • Alt-F11, Create a macro to create the list (см. код ниже)
  • Assign it to shortcut or toolbar button
  • Пользователь вставляет свой столбец номеров в столбец 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, но на данный момент я не знаю, как это сделать, и мне нужно возвращаться к работе;).
2
2
2
2011-04-08 15:54:06 +0000

Манчерелли, мне понравился твой ответ, и я его откорректировала :). Просто мелочь, иногда я вытаскиваю данные из листа и использую их для запроса к базе данных. Я добавил необязательный параметр “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
2
2
2011-02-02 16:12:16 +0000

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

1
1
1
2014-10-06 22:56:30 +0000

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

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

Note: Не забудьте перенести столбец в строку, прежде чем сохранять как csv. Иначе Excel не будет знать, как закрепить запятые между значениями.

1
1
1
2011-09-28 17:23:52 +0000

Я улучшил generatecsv() sub для работы с листом 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
0
0
0
2019-11-29 07:33:32 +0000

Я сделал это так

Удалил все ненужные столбцы и данные, затем сохранил как .csv файл, затем заменил дополнительные запятые и новую строку с помощью редактора Visual Studio Code. Привет

-1
-1
-1
2016-11-02 12:45:34 +0000

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

-2
-2
-2
2011-02-02 16:32:57 +0000

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

Похожие вопросы

6
13
9
10
4