Перебирая дубликаты ячеек столбца и ставя "-NUMBER" после - PullRequest
3 голосов
/ 05 октября 2011

У меня огромная электронная таблица, и в одном из столбцов есть ПРЕДЛОЖЕННЫЙ, чтобы быть уникальным идентификатором. Но проблема в том, что мой клиент не понимает важности требования "уникальности".

Так что я просто не хочу вручную проходить 7000 строк и переименовывать их. Я знаю, как делать циклы, я знаю, как выделить дубликаты ячеек, но я не знаю, как циклически повторять дубликаты и ставить счетчик после них, так что если у меня есть:

duplicate
duplicate
duplicate

это составит:

duplicate-1
duplicate-2
duplicate-3

Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 05 октября 2011

Вы можете сделать это, не прибегая к VBA.Допустим, столбец A - это полууникальный столбец с именами клиентов (т. Е. Иногда клиент появляется более одного раза, и в этих случаях вы хотите различать эти записи).Используйте этот расчет и заполните длину вашей таблицы:

  1. В столбце B введите это и заполните: =MATCH(A2,A:A,)
  2. В столбце C введите это и заполните-downdown: =IF(B2=ROW(), 1, C1+1)
  3. В столбце D введите это и заполните: =A2 & "-" & C2

Что он делает?

  1. СтолбецB сообщает вам начальную строку каждого клиента.
  2. Столбец C просматривает начальный ряд каждого клиента и начинает считать с 1 вперед.
  3. Столбец D просто объединяет A & D для уникального идентификатора

Вы получите что-то вроде таблицы ниже.После этого вы можете скопировать и вставить значение, чтобы преобразовать вычисление в значение, удалить лишние столбцы, и все готово.

CustName    First   Counter Unique
A           2       1       A-1
B           3       1       B-1
C           4       1       C-1
C           4       2       C-2
D           6       1       D-1
E           7       1       E-1
E           7       2       E-2
E           7       3       E-3
F           10      1       F-1
1 голос
/ 06 октября 2011

Формула с одним столбцом, которая работает независимо от порядка, является следующей формулой (для данных, начинающихся с A1) =A1 &"-" &COUNTIF($A$1:A1,A1)

enter image description here

1 голос
/ 05 октября 2011

Если вы хотите придерживаться VBA, вы можете использовать Словарь объекта в Windows Scripting Runtime, чтобы помочь вам.

Сначала установите ссылку на время выполнения сценариев Windows:

Windows Scripting Runtime

Затем введите код, подобный следующему:

Option Explicit

Sub test()
    Dim uniqueCounter As New Scripting.Dictionary
    Dim counter As Long
    Dim rowCount As Long
    Dim identifer As String


    rowCount = 17 'Whatever code you want to put in to calculate the last row

    For counter = 1 To rowCount
        identifer = Sheet1.Cells(counter, 1) 'Put whatever number of combination of cells which the row unique here (maybe it's just the one)
        If uniqueCounter.Exists(identifer) Then
            uniqueCounter(identifer) = CLng(uniqueCounter(CStr(Sheet1.Cells(counter, 1)))) + 1
            Sheet1.Cells(counter, 2) = "Duplicate #" & uniqueCounter(CStr(Sheet1.Cells(counter, 1)))
        Else
            uniqueCounter.Add identifer, "0"
            Sheet1.Cells(counter, 2) = "Original"
        End If
    Next counter

End Sub

Приведенные выше повороты кода будут обрабатывать следующие данные:

1
2
3
1
1
1
3
2
1
1
2
3
12
15
3
4
15

и заполните столбец b оригиналами и дубликатами, например:

1   Original
2   Original
3   Original
1   Duplicate #1
1   Duplicate #2
1   Duplicate #3
3   Duplicate #1
2   Duplicate #1
1   Duplicate #4
1   Duplicate #5
2   Duplicate #2
3   Duplicate #2
12  Original
15  Original
3   Duplicate #3
4   Original
15  Duplicate #1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...