Первичные ключи автоинкремента в базе данных используются для однозначной идентификации данной строки и не должны иметь никакого значения business . Поэтому оставьте первичный ключ как есть и добавьте другой столбец, названный, например, courseOrder
. Затем, когда вы удаляете запись из базы данных, вы можете отправить дополнительный оператор UPDATE для уменьшения столбца courseOrder
всех строк, у которых courseOrder
больше, чем тот, который вы сейчас удаляете.
В качестве побочной заметки вы никогда не должны изменять значение первичного ключа в реляционной базе данных, потому что могут быть другие таблицы, которые ссылаются на него как на внешний ключ, и его изменение может нарушать ссылочные ограничения.
Sub Tester()
Dim rng As Range, tmp, i As Long
Set rng = Range("E1:E12")
tmp = rng.Cells(rng.Cells.Count).Value
For i = rng.Cells.Count To 2 Step -1
rng.Cells(i).Value = Increment(rng.Cells(i - 1).Value)
Next i
rng.Cells(1).Value = Increment(tmp)
End Sub
'If value has a dash, increment the second number
' Assumes any value with a dash has a number on either side...
Function Increment(v)
Dim rv, arr
rv = v
arr = Split(v, "-")
If UBound(arr) = 1 Then rv = arr(0) & "-" & CLng(arr(1)) + 1
Increment = rv
End Function
с использованием объекта Dictionary
:
Sub ShiftAndIncrease()
Dim cell As Range, key As Variant
With CreateObject("Scripting.Dictionary")
For Each cell In Range("E1:E12").SpecialCells(xlCellTypeConstants) '
.Item(cell.Row Mod 12 + 1) = Increase(cell.Value2)
Next
Range("E1:E12").ClearContents
For Each key In .keys
Range("E" & key).Value = "'" & .Item(key)
Next
End With
End Sub
Function Increase(v As Variant)
Increase = Split(v, "-")(0) & "-" & Split(v, "-")(1) + 1
End Function