Объединение строк в Excel

у меня есть данные в столбце 1 и данные в колонке 2 следующим образом:

1234      eggs
1234      bacon
1234      toast
4321      Orange Juice

Я хочу, чтобы он выглядел следующим образом:

1234      eggs-bacon-toast
4321      orange juice

Я также хотел бы, чтобы он автоматически удалял повторяющиеся строки, чтобы у меня были уникальные номера в столбце 1 только с Объединенными данными.

5
задан Raystafarian
18.05.2023 14:51 Количество просмотров материала 3419
Распечатать страницу

3 ответа

вам нужно написать программу или скрипт для соединения строк общим ключом (колонка 1).

если вы не знаете VBA, то вы можете использовать простой сценарий ruby, чтобы сделать соединение на данных из CSV экспорта листа.

выполните следующие действия:

  1. экспортировать лист в формате CSV.
  2. после этого побегите сценарий ниже на данных, производящ новую, Выходной файл в формате CSV.
  3. импортировать выходной файл CSV в Превосходить.

данные должны выглядеть примерно так:

$ cat joiner-data.csv
Key,Data
"1234",eggs
"1234",bacon
"1234",toast
"4321","Orange Juice"

Ниже приведен скрипт ruby для соединения данных по ключу столбца 1.

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

#!/usr/bin/env ruby
# joiner.rb input >output
# read CSV data, with key in column one
# output each key once, with all associated data joined by '-'

require 'csv'

records = {}

input = ARGV.shift

CSV.foreach(input, :headers => true, :return_headers => false) do |row|
  data = row.fields
  key = data.shift
  records[key] ||= []       # ensure new keys start with an empty array
  records[key] += [data]    # append the record data
end

# output the record keys in ascending order, with the data associated with each key
CSV { |csv| records.keys.sort.each{|k| csv << [k,records[k].join('-')]}}

exit

вот пример запуска, используя приведенные выше данные в формате CSV:

$ ./joiner.rb joiner-data.csv
1234,eggs-bacon-toast
4321,Orange Juice

эти выходные данные должны быть помещены в файл, который можно импортировать обратно в Превосходить. Примерно так:

$ ./joiner.rb joiner-data.csv >joined-data.csv

теперь импортируем файл joined-data.csv.

надеюсь, что это помогает.

0
отвечен aks 2023-05-19 22:39

использование vba, вероятно, является наиболее подходящим решением для этой проблемы, но если вы раньше не использовали язык программирования, вы можете столкнуться с несколькими ошибками и не знать, что делать. То же самое касается и решения aks, и это решение также требует выхода из excel. Это, как говорится, его хорошо знать, как манипулировать csv-файлов за пределами excel, и вы должны быть в состоянии получить то, что вы хотите, если вы будете следовать инструкциям АКС дает.

Если вы просто хотите плагин в игре решение, Я сделал таблицу со всеми некоторыми формулами для вас здесь. Чтобы использовать его, вставьте данные в столбец A и B под метками, потяните вниз формулы в C2-F2, а затем отфильтровать столбец F непустыми. Результаты будут в "финале A"и" финале B".

0
отвечен LMNOP 2023-05-20 00:56

ладно, это не очень сложно. Первые вещи во-первых, показывать вкладку "Разработчик" нажав кнопку office, перейдя в Excel Options и выбрав показывать вкладку "Разработчик". Это позволяет редактировать и запускать макросы.

на ленте вкладку Разработчик. Щелкните его и перейдите в раздел "visual basic". Теперь, наверху в Редакторе VBA, нажмите insert-module. В модуле вставьте код ниже:

Sub Macro1()
Application.ScreenUpdating = False
'sort columns
    Columns("A:B").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:B150440")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Dim c As Range
Dim strValue As String

'only non-blank cells
For Each c In Range("A:A")
    If c <> "" Then
Again:
        'check for matches and combine
        If c.Value = c.Offset(1).Value Then
           strValue = c.Offset(, 1).Value & "-" & c.Offset(1, 1).Value
           c.Offset(, 1) = strValue
           c.Offset(1).EntireRow.Delete
           GoTo Again
        End If
    End If
Next c


Application.ScreenUpdating = True
End Sub

запустите его, и вы будьте готовы.

я бы порекомендовал сделать копию ваших данных перед запуском макроса и запустить макрос на копирование, в случае, если он не делает то, что вы хотите

0
отвечен Raystafarian 2023-05-20 03:13

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх