Уважаемые форумчане, подскажите пожалуйста как сохранить нумерацию строк в таблице после сортировки. Нумерация идет не по порядку. Нужно чтобы при удалении какой либо строки она сохранялась и не пропадал удаленный номер. Файл прилагаю. СПАСИБО.
Уважаемые форумчане, подскажите пожалуйста как сохранить нумерацию строк в таблице после сортировки. Нумерация идет не по порядку. Нужно чтобы при удалении какой либо строки она сохранялась и не пропадал удаленный номер. Файл прилагаю. СПАСИБО.Egider
Sub ОбновитьНумерациюПослеУдаления() Dim i As Long On Error GoTo ErrorHandler
With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False .Calculation = xlCalculationManual End With
With ThisWorkbook.Worksheets("Лист1")
Dim lastRow As Long lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
If ActiveCell.Row < 2 Or ActiveCell.Row > lastRow Then MsgBox "Выберите строку в диапазоне данных!", vbExclamation GoTo CleanExit End If
Dim arr As Variant arr = .Range("C2:D" & lastRow).Value
Dim восстановить As Boolean восстановить = True
Dim удаляемаяСтрока As Long удаляемаяСтрока = ActiveCell.Row - 1
Dim удалённоеЧисло As Long удалённоеЧисло = arr(удаляемаяСтрока, 2)
Dim newArr() As Variant ReDim newArr(1 To UBound(arr, 1) - 1, 1 To 2)
Dim outIndex As Long outIndex = 1
For i = 1 To UBound(arr, 1)
If i <> удаляемаяСтрока Then newArr(outIndex, 1) = arr(i, 1)
If IsNumeric(arr(i, 2)) And arr(i, 2) > удалённоеЧисло Then newArr(outIndex, 2) = arr(i, 2) - 1 Else newArr(outIndex, 2) = arr(i, 2) End If
outIndex = outIndex + 1 End If
Next i
.Range("C2:D" & lastRow).ClearContents .Range("C2").Resize(UBound(newArr, 1), 2).Value = newArr End With
восстановить = False
CleanExit:
With Application .Calculation = xlCalculationManual .EnableEvents = True .DisplayAlerts = True .ScreenUpdating = True End With Exit Sub
ErrorHandler:
If восстановить Then
With ThisWorkbook.Worksheets("Лист1") .Range("C2:D" & lastRow).ClearContents .Range("C2").Resize(UBound(arr, 1), 2).Value = arr End With
MsgBox "Произошла ошибка: " & Err.Description & vbCrLf & "Данные были восстановлены.", vbCritical Else MsgBox "Произошла ошибка: " & Err.Description, vbCritical End If
Resume CleanExit End Sub
[/vba]
Суть такова кода: Ставновитесь на ячейку в любой колонке (C:D), запускаете макрос. Он сам удалит строку выбранную и пронумерует снова. Может чем поможет. Удачи.
Sub ОбновитьНумерациюПослеУдаления() Dim i As Long On Error GoTo ErrorHandler
With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False .Calculation = xlCalculationManual End With
With ThisWorkbook.Worksheets("Лист1")
Dim lastRow As Long lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
If ActiveCell.Row < 2 Or ActiveCell.Row > lastRow Then MsgBox "Выберите строку в диапазоне данных!", vbExclamation GoTo CleanExit End If
Dim arr As Variant arr = .Range("C2:D" & lastRow).Value
Dim восстановить As Boolean восстановить = True
Dim удаляемаяСтрока As Long удаляемаяСтрока = ActiveCell.Row - 1
Dim удалённоеЧисло As Long удалённоеЧисло = arr(удаляемаяСтрока, 2)
Dim newArr() As Variant ReDim newArr(1 To UBound(arr, 1) - 1, 1 To 2)
Dim outIndex As Long outIndex = 1
For i = 1 To UBound(arr, 1)
If i <> удаляемаяСтрока Then newArr(outIndex, 1) = arr(i, 1)
If IsNumeric(arr(i, 2)) And arr(i, 2) > удалённоеЧисло Then newArr(outIndex, 2) = arr(i, 2) - 1 Else newArr(outIndex, 2) = arr(i, 2) End If
outIndex = outIndex + 1 End If
Next i
.Range("C2:D" & lastRow).ClearContents .Range("C2").Resize(UBound(newArr, 1), 2).Value = newArr End With
восстановить = False
CleanExit:
With Application .Calculation = xlCalculationManual .EnableEvents = True .DisplayAlerts = True .ScreenUpdating = True End With Exit Sub
ErrorHandler:
If восстановить Then
With ThisWorkbook.Worksheets("Лист1") .Range("C2:D" & lastRow).ClearContents .Range("C2").Resize(UBound(arr, 1), 2).Value = arr End With
MsgBox "Произошла ошибка: " & Err.Description & vbCrLf & "Данные были восстановлены.", vbCritical Else MsgBox "Произошла ошибка: " & Err.Description, vbCritical End If
Resume CleanExit End Sub
[/vba]
Суть такова кода: Ставновитесь на ячейку в любой колонке (C:D), запускаете макрос. Он сам удалит строку выбранную и пронумерует снова. Может чем поможет. Удачи.MikeVol
Ученик. Одесса - Украина
Сообщение отредактировал MikeVol - Понедельник, 14.07.2025, 18:44