Распознавание дублирующихся значений и автоматическое добавление их в расширение

1165
Daniel

Мне нужна формула или макрос для Excel, чтобы выполнить следующие операции:
Определить дубликаты и оставить первое значение таким, как, например,

2 2 2 2 2 2 

Должен стать

2 2.1 2.2 2.3 2.4 2.5 

Это должно быть сделано для всех дубликатов в определенном столбце, в данном случае это столбец B.

До сих пор я пытался использовать формулу

=IF(COUNTIF($B$1:$B$5000,B1)>1,B1& " (" & COUNTIF(B$1:B1,B1) & ")",B1) 

Что не сработало, и в случае программирования макроса на VB это не совсем мой сильный набор. Макрос, который я тестировал, также не работает:

Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim dataRng As Range Dim dataArr() As Variant, output() As String Dim y As Long, i As Long, j As Long, tmpcount As Long Set dataRng = Range("B1").Resize(Me.UsedRange.Rows.Count, 1) If Not Intersect(Target, dataRng) Is Nothing Then dataArr = dataRng.Value ReDim output(1 To UBound(dataArr, 1), 1 To 1) For y = 1 To UBound(dataArr, 1) If Right(dataArr(y, 1), 1) = ")" Then dataArr(y, 1) = Left(dataArr(y, 1), InStr(dataArr(y, 1), " (") - 1) End If Next y For i = 1 To UBound(dataArr, 1) tmpcount = 0 output(i, 1) = dataArr(i, 1) For j = 1 To UBound(dataArr, 1) If dataArr(i, 1) = dataArr(j, 1) Then tmpcount = tmpcount + 1 If j = i And tmpcount > 1 Then output(i, 1) = dataArr(i, 1) & " (" & tmpcount & ")" Exit For End If If j > i And tmpcount > 1 Then output(i, 1) = dataArr(i, 1) & " (" & tmpcount - 1 & ")" Exit For End If End If Next j Next i Call printoutput(output, dataRng) End If End Sub Private Sub printoutput(what As Variant, where As Range) Application.EnableEvents = False where.Value = what Application.EnableEvents = True End Sub 

Кто-нибудь имеет представление о том, что здесь должно быть сделано? Заранее благодарю за ваши ответы.

1
Больше информации необходимо здесь. Для начала, мы говорим о Excel? Jarmund 8 лет назад 1
Извините, да, мы говорим об Excel Daniel 8 лет назад 0
в этом случае вы должны добавить это к вопросу Jarmund 8 лет назад 1
Я сделал это сейчас :) Daniel 8 лет назад 0
Вы также должны добавить то, что вы пытаетесь, так как ваш вопрос звучит как «делай мою работу для меня» :( Dave 8 лет назад 0
Извините, я новичок в этом, я буду Daniel 8 лет назад 0
Даниил, +1 от меня! Это сейчас отличный вопрос. В вашем примере вы показываете только 2, но после 2 всегда есть 3? Я имею в виду, если у вас есть 2, затем введите 2.1 в следующем ряду, а затем 2.2 в следующем ряду, вы можете перетащить это вниз, и Excel заполнит его для вас Dave 8 лет назад 0
Это был только пример, у меня, вероятно, более 5000 ячеек, чтобы проверить наличие дубликатов и выполнить это действие для каждого, тогда как получаемый мной Excel обновляется каждые 15 минут. Значения, которые у меня есть, больше по линии 63539 или 85451, которые появляются более одного раза (дубликаты). Я не хочу избавляться от дубликатов, потому что они также очень важны, все, что мне нужно, - это добавить .1, .2 ..... и так далее к каждому найденному дубликату, оставляя первое найденное значение как есть Daniel 8 лет назад 0

2 ответа на вопрос

3
Gary's Student

Со значениями в столбце A, в B1 введите:

=A1 

и в B2 введите:

=A2 & IF(COUNTIF($A$1:A1,A2)=0,"","." & COUNTIF($A$1:A1,A2)) 

и скопируйте вниз:

Примечание . Нет необходимости сортировать значения в столбце А.

Я получил сообщение об ошибке, используя эту формулу. Как я могу также отправить экран печати в качестве комментария? Daniel 8 лет назад 0
Вот что вышло http://de.tinypic.com/r/mja83/9 Daniel 8 лет назад 0
@Daniel ** Убедитесь, что ваша формула соответствует вашим настройкам местного языка. ** Gary's Student 8 лет назад 0
Каковы ваши настройки, потому что я изменил мой, и он все еще не работает Daniel 8 лет назад 0
Я пытался перейти на английский язык (США), и он все еще не работает Daniel 8 лет назад 0
0

Попробуйте разделить ответ, чтобы увидеть причину ошибки (я не смог открыть вашу ссылку de.tinypic.com/r/mja83/9, чтобы увидеть, что происходит). Например, напишите = countif ($ A $ 1: A1, A2) в C2, попробуйте использовать fx или вставьте формулу, чтобы использовать соответствующую на вашем языке, и, возможно, разделитель списка есть; нет, в настройках вашего компьютера. Также для = If (C2 = 0, "", ",") в D2. Тогда в B2 = A2 & D2 & C2. Если все верно, снова объедините формулы. Формула Гэри верна и работает

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