2

У меня есть данные, импортированные из базы данных литературы (формат .txt) в Excel. К сожалению, в большинстве случаев авторы перечислены дважды в одной ячейке, например:

Smith, Miller, Patty, Smith, Patty, Miller

Как видите, меняется и порядок имен. Я хотел бы удалить вторые повторы, Smith, Miller, Patty

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

3 ответа3

2

То, как Excel обрабатывает функции разделения и уникальные или уникальные функции, немного громоздко: разделение выполняется с помощью "текста на столбцы", как в MS Word, а уникальное / отличное выполняется путем расширенной фильтрации "только уникальные значения" в новый столбец.

Вместо этого вы можете попробовать исправить это в Google Sheets по следующей формуле:

Cell A1: Smith, Miller, Patty, Smith, Patty, Miller

Cell A2: =join(", ",unique(transpose(split(A1,", "))))

Result: Smith, Miller, Patty

Google Sheet: https://docs.google.com/spreadsheets/d/1A1l0qdnNSHlJB-5DARGKDeIsbuCCLGuoYWm8sR29UTA/edit?usp=sharing

РАЗДЕЛИТЕ на запятые, чтобы создать отдельное значение в каждой соседней ячейке, распределенной по нескольким столбцам. TRANSPOSE преобразует это из множества значений в один столбец с несколькими значениями. Я думаю, что это необходимо для уникальной работы. И, наконец, JOIN принимает уникальные (дедуплицированные) значения в этом массиве и создает из них новую строку, разделенную запятыми.

0

Возможно, в ваших импортированных данных есть неверные разделители, такие как запятая между именами. Вы можете исправить это, создав новую колонку и обрезку. Попросите Excel найти третью запятую, а затем избавиться от любых символов после нее.

0

Вы можете использовать следующий код VBA для удаления дубликатов из списка с разделителями.

Public Function RemoveDuplicates(list As String, delimiter As String) As String
Dim arrSplit As Variant, i As Long, tmpDict As Object, tmpOutput As String
Set tmpDict = CreateObject("Scripting.Dictionary")
arrSplit = Split(list, delimiter)
For i = LBound(arrSplit) To UBound(arrSplit)
    If Not tmpDict.Exists(arrSplit(i)) Then
        tmpDict.Add arrSplit(i), arrSplit(i)
        tmpOutput = tmpOutput & arrSplit(i) & delimiter
    End If
Next i
If tmpOutput <> "" Then tmpOutput = Left(tmpOutput, Len(tmpOutput) - Len(delimiter))
RemoveDuplicates = tmpOutput
'housekeeping
Set tmpDict = Nothing
End Function

Sub ZapDuplicatesInPlace()
Dim r As Range, va() As Variant
Set r = Application.InputBox("Select range to remove duplicates cell by cell.", "Remove Duplicates From Lists", , , , , , 8)
va = r.Value
For i = LBound(va, 1) To UBound(va, 1)
    For j = LBound(va, 2) To UBound(va, 2)
        'This assumes delimiter is comma followed by space.
        va(i, j) = RemoveDuplicates(CStr(va(i, j)), ", ")
    Next j
Next i
'Print output to sheet
r.Value = va
End Sub

Есть два способа использования этого кода для достижения желаемого.

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

  2. Если вы предпочитаете использовать функции листа, чтобы оставить исходные данные нетронутыми, вы можете использовать функцию RemoveDuplicates в формуле. Например, если у вас есть Smith, Miller, Patty, Smith, Patty, Miller в А1, вы можете использовать приведенную ниже формулу в другой ячейке, чтобы вернуть список минус дубликаты.

    = RemoveDuplicates(A1, ",")

Инструкции по использованию VBA в вашей рабочей книге см. В этом посте.

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