Перетворіть стовпець у список, розділений комами


129

У мене є завдання створити простий аркуш Excel, який займає невизначене число рядків у колонці A так:

1234
123461
123151
11321

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

1234,123461,123151,11321

Який найпростіший спосіб зробити це?


8
Частиною рішення можуть бути "Правка", "Спеціальне вставлення", "Перекласти", щоб перетворити стовпець у рядок. Якщо інша програма приймає вкладки, а не коми, ви все готово після копіювання нового рядка.
Ар'ян

Як ти робиш протилежне цьому? Візьміть розділений комою список і перетворите його у стовпець вмісту?
stevvve

1
@stevvve використовуйте функцію «Текст до стовпців» на вкладці даних. support.microsoft.com/en-us/kb/214261
Тревор

Для цього я використовую будь-який текстовий редактор, здатний на регулярний вираз, як блокнот ++. Скопіюйте значення стовпців і вставте їх у редактор, знайдіть і замініть регулярний вираз, знайдіть "\ r \ n" замінити на ",". Якщо ви хочете перетворити CSV у стовпчик, знайдіть "," та замініть на "\ r \ n"
1717

Відповіді:


145

Припускаючи, що ваші дані починаються з A1, я ставлю наступне у стовпчик B:

B1:

=A1

B2:

=B1&","&A2

Потім ви можете вставити стовпець B2 вниз по всьому стовпцю. Остання комірка у стовпці B тепер має бути розділеним комою списком стовпця А.


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)
  • $ являє кінець рядка
  • , є текстом заміни в цьому випадку

Домовились. Навіть близько не.
muncherelli

Не згоден з коментарями через контекст. Хтось із обліковим записом суперпользователя, який публікує тут, часто використовує vim.
uniquegeek

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

2

Ви можете скористатись посібником How-To Geek про перетворення рядка у стовпець і просто перевернути його. Потім експортуйте дані у форматі csv (формат, дерозроблений комами), і у вас є свій список, відокремлений комами в простому тексті! Ви можете скопіювати з блокнота і, якщо хочете, повернути його в excel. Крім того, якщо вам потрібно пробіл після коми, ви можете зробити функцію пошуку та заміни, замінивши "," на ",". Сподіваюся, що це допомагає!


Експорт у CSV - це те, що може зробити цей користувач. Мені потрібно, щоб вона була крапкою та клацанням у програмі excel.
muncherelli

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

Я вдосконалив підпункт generatorcsv () для обробки листа 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
Phil

-2

Використовуйте =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)у комірці, у якій потрібно відобразити результат.


3
Це незмінне ручне рішення.
Даніель Харі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.