2017-08-30 46 views
0

以下是方案。我在E6:E309列中列出了所有工作號碼。我希望銷售人員前來輸入D6:D309中的相關單元格,通過在範圍D6:D309中輸入從1到303之間的任意數字來首先繪製該作業。如果銷售人員在列D11中輸入了「1 「,這意味着工作號碼是E11首先被切斷。難的是以下兩個條件:將單元格限制爲輸入特定數字範圍的特定順序

第一條件:在屬於範圍D6的任何細胞的第一個條目:309應該是號碼1,第二個是2號,第三個是數3等等因此,銷售人員不能在屬於D6:D309的任何單元格中輸入數字「2」,除非在屬於範圍D6:D309的任何單元格中的其他位置輸入了數字「1」輸入,等等。

第二種情況:沒有特定的順序讓細胞在另一個之前輸入。 銷售人員可以通過輸入「1」開始進入任何單元格,本身D10,然後移動到只能輸入「2」的D18,然後返回到只能輸入「3」的D3,依此類推。

您的幫助將非常感謝。

回答

0

這可以通過一些巧妙的自定義驗證來完成。要進行客戶驗證,請選擇要應用此驗證的單元格,然後選擇「數據」 - >「數據驗證」。在設置下的表單中,在「允許」下拉列表中選擇自定義,然後輸入公式。

詳細,你需要以下三個驗證:

  1. 小區D6:=D6=(MAX($D$7:$D$309,0)+1)
  2. 細胞D7:D308(確保細胞D7是在選擇活動單元格:=D7=(MAX($D$6:$D6,$D8:$D$309,0)+1)
  3. 電池D309:=D309=(MAX($D$6:$D$308,0)+1)

如果你願意,你可以在「錯誤警報」選項卡中添加自定義錯誤消息來解釋邏輯用戶

請注意:儘管此解決方案可以滿足您的條件,但在刪除任何條目時您將遇到問題!在這種情況下,驗證仍然會強制用戶輸入下一個最高的數字,因此除非其上的所有其他數字都被刪除,否則不能輸入已刪除的數字!

+0

喜彼得,對於非常感謝。令人驚歎的工作。它完全符合我想要的而不需要VBA。但是,是否有一種方法可以添加另一個條件,只允許在D6中輸入E6 <>「」。 D7直到D309,與它們的相對細胞一樣。 – Omar

+0

所以只是爲了理解 - 下面的直接單元格必須先填充?如果用戶從第309行開始並且必須將其填充到頂部? –

+0

如果填充E6(即E6 <>「」),則允許您的數據驗證在D6中工作。對於D7直到D309也是如此,其中如果E7被填充(即E7 <>「」),則允許數據驗證在D7中工作,依此類推。所以,這是相鄰的單元格必須首先填充,而不是下面的單元格。 – Omar

0

正在關注Worksheet_Change事件應該工作。它具有以下功能:

1)檢查輸入的值是否是一個數字,如果沒有顯示消息,並退出
2)檢查正確的號碼被輸入

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Range("D6:D309")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub 'check for range 

    Application.EnableEvents = False 
    Dim countPrevNum As Long, largeNum As Long, currNum As Long 

    If Not IsNumeric(Target.Value) Then  'check if entered value is number 
     MsgBox "Enter a number" 
     Target.Cells.Clear 
     Target.Cells.Select 
     Application.EnableEvents = True 
     Exit Sub 
    End If 

    currNum = Target.Value  'value entered 
    Target.Cells.Clear   'clear the target cell 

    If WorksheetFunction.CountA(Range("D6:D309")) Then 
     largeNum = WorksheetFunction.Large(Range("D6:D309"), 1) 'get the largest number in the range 
    End If 

    If largeNum <> currNum - 1 Then  'check if previous largest number is equal to currNum-1 
     MsgBox "Number to be entered : " & largeNum + 1 
     Target.Cells.Select   'select the target cell 
    Else 
     Target.Value = currNum  'enter the value target cell 
    End If 
    Application.EnableEvents = True 
End Sub 
+0

嗨Mrig。謝謝你的努力。我寧願避免使用VBA,因爲我可能不得不分享此工作簿。謝謝,雖然。 – Omar

相關問題