Страницы: 1
RSS
Как сделать уникальными идентичные текстовые значения на разных листах
 
Помогите, решить задачу, как автоматизировать поиск и замену одинаковых текстовых значений на такие же, но с добавлением уникальности (цифровой) по всей книге сохраняя схожесть новых уникализированых значений на разных листах.    
На одном листе есть 5 абсолютно одинаковых текстовых значения, надо изменить их название на уникальные, например добавить к названию от 1 до 5, на следующем листе есть эти же абсолютно одинаковые текстовые значения, которым точно также надо присвоить названия от 1 до 5 и так по всей книге (листов может быть до 6)
 
Например. Выделяем ячейку, значение которой нужно уникализировать :), запускаем макрос:  
 
Sub tyutyu()  
Dim s$, i&, fnd As Range, wsh As Worksheet  
s = ActiveCell.Value  
For Each wsh In ThisWorkbook.Worksheets  
   With wsh.UsedRange  
       Set fnd = .Find(s, LookAt:=xlWhole)  
       i = 0  
       If Not fnd Is Nothing Then  
           Do  
               i = i + 1: fnd.Value = s & i  
               Set fnd = .FindNext(fnd)  
           Loop While Not fnd Is Nothing  
       End If  
   End With  
Next wsh  
End Sub
 
Супер !!! Как раз то, что нужно. Огромное спасибо. Если позволите, еще вопрос, а макрос может сам искать подобные текстовые значения ? В книге очень много разных строк с повторяющимися значениями.    
 
П.С. еще раз огромное спасибо очень помогли :)
 
Спасибо, всем за помощь. Макрос отлично работает, принцип работы понятен. Функция тоже справляется с поставленной задачей. Просто думал полностью автоматизировать процесс поиска и замены всех повторов на уникальные значения.
 
{quote}{login=onehin}{date=05.04.2011 06:26}{thema=}{post}... думал полностью автоматизировать процесс поиска и замены всех повторов на уникальные значения.{/post}{/quote}  
... можно попробовать Туитуи2 :)(наверное, лишнего накрутил)  
 
Sub tyutyu2()  
Dim x, y(), s, i&, j&, fnd As Range, wsh As Worksheet  
x = ActiveSheet.UsedRange.Value  
ReDim y(1 To ActiveSheet.UsedRange.Cells.Count, 1 To 2)  
With CreateObject("Scripting.Dictionary")  
   .CompareMode = 1  
   For Each s In x  
       If Len(s) Then  
           If Not .Exists(s) Then  
               i = i + 1: .Item(s) = i  
               y(i, 1) = s: y(i, 2) = 1  
           Else  
               j = .Item(s): y(j, 2) = y(j, 2) + 1  
           End If  
       End If  
   Next  
End With  
 
For Each wsh In ThisWorkbook.Worksheets  
   For i = 1 To UBound(y)  
       If Len(y(i, 1)) Then  
           If y(i, 2) > 4 Then  
               With wsh.UsedRange  
                   Set fnd = .Find(y(i, 1), LookAt:=xlWhole)  
                   j = 0  
                   If Not fnd Is Nothing Then  
                       Do  
                           j = j + 1: fnd.Value = y(i, 1) & j  
                           Set fnd = .FindNext(fnd)  
                       Loop While Not fnd Is Nothing  
                   End If  
               End With  
           End If  
       Else  
           Exit For  
       End If  
   Next i  
Next wsh  
End Sub
 
nilem, Спасибо Вам за помощь. :)  
 
Это макрос переименовывает все пустые ячейки, а одинаковые текстовые значения не все уникализирует, некоторые пропускает.
 
Просто, чтобы уж добить :)  
См. в файле.
 
nilem, Макрос - супер !!!!!! :))))))))))))  
 
Вы мне очень помогли и избавили от такой рутинной работы !!!!!!!!  
Спасибо за помощь.
Страницы: 1
Читают тему
Наверх