2017-03-09 35 views
0

當前正在使用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 

回答

0

你可以遍歷列中的每一個細胞,如果其值大於(或等於)一個剛剛改變,由一個增加它:

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 
+0

我失去了一些與這個代碼?當我實現它並插入一個新行並分配一個數字時,它似乎沒有做任何事情。 –

+0

只有在添加到列A中的數字已經存在於其他地方時 - 例如,如果輸入9,然後任何現有的9將被更改爲10,並且任何現有的10將被更改爲11等等,它只會改變某些內容。但是,如果沒有其他9開始,10,11等將不會改變。如果你需要它增加10,11等,當進入9時,但在那裏沒有其他9(所以你將沒有10列),刪除行說'如果Application.CountIf(範圍(「 A:A「),V)> 1 Then>及其相應的」結束如果「。 – YowE3K

+0

我明白,我試圖這樣做,因爲這是我的最終目標,但它不會改變任何事情。即使當我有一個9並輸入一個新的行,並把9作爲值,我最終只有兩個9。 –

相關問題