Как перемещать содержимое ячейки по одной ячейке, когда в этой ячейке есть номера?

Первичные ключи автоинкремента в базе данных используются для однозначной идентификации данной строки и не должны иметь никакого значения business . Поэтому оставьте первичный ключ как есть и добавьте другой столбец, названный, например, courseOrder. Затем, когда вы удаляете запись из базы данных, вы можете отправить дополнительный оператор UPDATE для уменьшения столбца courseOrder всех строк, у которых courseOrder больше, чем тот, который вы сейчас удаляете.

В качестве побочной заметки вы никогда не должны изменять значение первичного ключа в реляционной базе данных, потому что могут быть другие таблицы, которые ссылаются на него как на внешний ключ, и его изменение может нарушать ссылочные ограничения.

0
задан Mike Guest 13 July 2018 в 22:13
поделиться

2 ответа

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
0
ответ дан Tim Williams 17 August 2018 в 12:07
поделиться
  • 1
    Спасибо за ваше решение г-н Уильямс. Я рассмотрю это в течение следующих нескольких дней и опубликую свои выводы. – Mike Guest 14 July 2018 в 15:50

с использованием объекта 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
0
ответ дан DisplayName 17 August 2018 в 12:07
поделиться
  • 1
    Спасибо за ваше решение. Я продолжу это в течение следующих нескольких дней. – Mike Guest 14 July 2018 в 15:49
  • 2
    @MikeGuest, разве это не работало? – DisplayName 6 August 2018 в 05:12