Vba 使数字在插入行时自动上移
目前正在使用excel工作表对项目进行排名,如果插入新行并输入现有排名,我们希望它自动增加数字。如果我们在一行中输入9作为它的等级,我们希望先存在的9移动到10,旧的10移动到11等等。我已经算出来了,但是我的代码自动将第一行编号为1,以此类推。这就是我目前所拥有的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
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列中的单元格包含什么。