Vba 使数字在插入行时自动上移

Vba 使数字在插入行时自动上移,vba,excel,Vba,Excel,目前正在使用excel工作表对项目进行排名,如果插入新行并输入现有排名,我们希望它自动增加数字。如果我们在一行中输入9作为它的等级,我们希望先存在的9移动到10,旧的10移动到11等等。我已经算出来了,但是我的代码自动将第一行编号为1,以此类推。这就是我目前所拥有的 Private Sub Worksheet_Change(ByVal Target As Range) Dim I As Integer I = 1 Application.EnableEvents = Fa

目前正在使用excel工作表对项目进行排名,如果插入新行并输入现有排名,我们希望它自动增加数字。如果我们在一行中输入9作为它的等级,我们希望先存在的9移动到10,旧的10移动到11等等。我已经算出来了,但是我的代码自动将第一行编号为1,以此类推。这就是我目前所拥有的

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
    I = 1
    Application.EnableEvents = False
    For I = 1 To 20
        Range("A" & I).Value = I
    Next
    Range("A21").Value = ""
    Application.EnableEvents = True
End Sub

可以循环遍历列A中的每个单元格,如果其值大于(或等于)刚刚更改的单元格,则将其递增1:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim v As Long
    Dim r As Range
    Set r = Application.Intersect(Range("A:A"), Target)
    If r Is Nothing Then
        Exit Sub
    End If
    If r.Count > 1 Then
        Exit Sub
    End If
    If IsEmpty(r.Value) Then
        Exit Sub
    End If
    I = 1
    v = r.Value
    If Application.CountIf(Range("A:A"), v) > 1 Then ' Only change things if this
                                                     ' value exists elsewhere
        Application.EnableEvents = False
        For I = 1 To Cells(Rows.Count, "A").End(xlUp).Row
            If Cells(I, "A").Address <> r.Address Then
                If IsNumeric(Cells(I, "A").Value) Then ' skip cells that aren't numeric
                    If Cells(I, "A").Value >= v Then
                        Cells(I, "A").Value = Cells(I, "A").Value + 1
                    End If
                End If
            End If
        Next
        Application.EnableEvents = True
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
我想我会坚持多久
暗v一样长
调光范围
设置r=Application.Intersect(范围(“A:A”),目标)
如果r什么都不是
出口接头
如果结束
如果r.计数>1,则
出口接头
如果结束
如果为空(r值),则
出口接头
如果结束
I=1
v=r.值
如果Application.CountIf(范围(“A:A”),v)>1,则“仅当
“价值存在于别处
Application.EnableEvents=False
对于I=1到单元格(Rows.Count,“A”).End(xlUp).Row
如果单元格(I,“A”).地址r.地址,则
如果是数值(单元格(I,“A”).Value),则“跳过非数值单元格”
如果单元格(I,“A”).值>=v,则
单元格(I,“A”)。数值=单元格(I,“A”)。数值+1
如果结束
如果结束
如果结束
下一个
Application.EnableEvents=True
如果结束
端接头

此代码是否有遗漏?当我实现它并插入新行并分配一个数字时,它似乎没有任何作用。它只会在您添加到a列中的数字已经存在于其他地方的情况下更改某些内容-例如,如果您键入9,那么任何现有的9都将更改为10,任何现有的10都将更改为11,等等,如果没有其他9开始,10、11等将不会改变。如果您需要在输入9时增加10、11等,但没有其他9(因此列中没有10),请删除说
If Application.CountIf(Range(“a:a”),v)>1的行,然后
及其相应的
End If
。我理解,我正在尝试这样做,因为这是我的最终目标,但这并没有改变任何事情。即使我有一个9,输入一个新行并将9作为值,我也只会得到两个9。现在我得到了一个错误,这行
单元格(I,“a”)。value=Cells(I,“a”)。value+1
@TravisEaston您的a列是否包含数字?当它崩溃时,
I
的值是多少?查看工作表中的那一行,看看A列中的单元格包含什么。