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


Dim PreviousValue As String

' Шаг 1: Запоминаем текущее значение ячейки при её выделении
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        PreviousValue = Target.Value
    End If
End Sub

' Шаг 2: Формируем нумерованный список при выборе из списка
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Lines() As String
    Dim NextIndex As Long
    Dim NewSelection As String
    
    ' Укажите ваш диапазон ячеек со списком (например, "A1:A100" или "B2:B50")
    If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
        If Target.Cells.Count > 1 Then Exit Sub
        
        ' Если ячейку очистили (Delete), сбрасываем всё
        If Target.Value = "" Then
            PreviousValue = ""
            Exit Sub
        End If
        
        On Error GoTo CleanExit
        Application.EnableEvents = False
        
        NewSelection = Target.Value
        
        ' Если ячейка была пустой — создаем пункт 1.
        If PreviousValue = "" Then
            Target.Value = "1. " & NewSelection
        Else
            ' Подсчитываем текущее количество строк для следующего номера
            Lines = Split(PreviousValue, vbLf)
            NextIndex = UBound(Lines) + 2
            
            ' Добавляем новое значение с новой строки (vbLf = Enter)
            Target.Value = PreviousValue & vbLf & NextIndex & ". " & NewSelection
        End If
        
        ' Обновляем сохраненное значение для следующего выбора
        PreviousValue = Target.Value

CleanExit:
        Application.EnableEvents = True
    End If
End Sub