Загрузка данных


Sub Найти_Повторения_И_Сортировать()
    Dim wsSource As Worksheet
    Dim wsNew As Worksheet
    Dim shp As Shape
    Dim r As Long
    Dim lastRow As Long
    
    ' Запоминаем текущий лист с фигурами
    Set wsSource = ActiveSheet
    
    ' Проверяем, есть ли вообще фигуры на листе
    If wsSource.Shapes.Count = 0 Then
        MsgBox "На этом листе нет никаких фигур!", vbExclamation, "Ошибка"
        Exit Sub
    End If
    
    ' Отключаем обновление экрана для скорости
    Application.ScreenUpdating = False
    
    ' Создаем новый лист для отчета
    Set wsNew = Sheets.Add
    On Error Resume Next
    wsNew.Name = "Анализ_Фигур_" & Format(Now, "hh_mm_ss")
    On Error GoTo 0
    
    ' Создаем шапку таблицы
    wsNew.Range("A1").Value = "Название фигуры"
    wsNew.Range("B1").Value = "Тип фигуры"
    wsNew.Range("A1:B1").Font.Bold = True
    wsNew.Range("A1:B1").Interior.Color = RGB(220, 220, 220)
    
    ' 1. Собираем все фигуры в таблицу
    r = 2
    For Each shp In wsSource.Shapes
        wsNew.Cells(r, 1).Value = shp.Name
        wsNew.Cells(r, 2).Value = shp.Type
        r = r + 1
    Next shp
    
    lastRow = r - 1
    
    ' 2. Сортируем полученный список по алфавиту (колонка A)
    With wsNew.Sort
        .SortFields.Clear
        .SortFields.Add2 Key:=wsNew.Range("A2:A" & lastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange wsNew.Range("A1:B" & lastRow)
        .Header = xlYes
        .Apply
    End With
    
    ' 3. Ищем дубликаты и подсвечиваем их красным
    ' Используем встроенное Условное форматирование Excel
    Dim rng As Range
    Set rng = wsNew.Range("A2:A" & lastRow)
    rng.FormatConditions.AddUniqueValues
    rng.FormatConditions(rng.FormatConditions.Count).SetFirstPriority
    rng.FormatConditions(1).DupeUnique = xlDuplicate
    
    ' Задаем нежно-красную заливку для повторов
    With rng.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = RGB(255, 199, 206)
    End With
    ' Задаем темно-красный цвет текста для повторов
    With rng.FormatConditions(1).Font
        .Color = RGB(156, 0, 6)
    End With
    
    ' Красиво выравниваем ширину колонок
    wsNew.Columns("A:B").AutoFit
    
    ' Включаем экран обратно
    Application.ScreenUpdating = True
    
    ' Сообщаем пользователю
    MsgBox "Готово! Создан новый лист со списком." & vbCrLf & _
           "Фигуры отсортированы по алфавиту." & vbCrLf & _
           "Повторяющиеся имена подсвечены красным цветом.", vbInformation, "Успех"
End Sub