標題:
[發問]
有難度的邏輯
[打印本頁]
作者:
symis
時間:
2014-4-22 12:33
標題:
有難度的邏輯
公司要求的功能,如連結:
http://www.2shared.com/document/g-7rzfUv/test1.html
難在分配人數的合法性檢查
請教要怎麼判斷?
謝謝!
作者:
yen956
時間:
2014-4-22 16:16
回復
1#
symis
我只能想到這個笨方法:
E4 陣列公式:
=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),C4,"")))
向下拉
E8 陣列公式:
=SUM(E4:E5)
有錯誤時, 輸入有點麻煩:
(至少要操作兩次以上, 看準要修改的格子再修改)
總數有錯誤時, 不給警告, 以免太麻煩, 反正全部輸入完畢就ok了,
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a1, b1, c1, d1 As Integer, Rng As Range
Set Rng = Worksheets(1).Range("J3:J10")
If Not Intersect(Target, Rng) Is Nothing Then
[E4].FormulaArray = _
"=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),C4,"""")))"
[E5].FormulaArray = _
"=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),C5,"""")))"
[E6].FormulaArray = _
"=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),C6,"""")))"
[E7].FormulaArray = _
"=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),C7,"""")))"
[E8] = "=SUM(E4:E5)"
If [E4] > 1 Then
MsgBox "A 最多只能有1個", vbCritical
End If
If [E5] > 2 Then
MsgBox "B 最多只能有2個", vbCritical
End If
If [E6] < 4 Then
MsgBox "C 最少要有4個", vbCritical
End If
If [E7] < 1 Then
MsgBox "D 最少要有1個", vbCritical
End If
End If
End Sub
複製代碼
作者:
yen956
時間:
2014-4-22 16:20
回復
1#
symis
這個方法人多時不適用(太多警告了)
作者:
symis
時間:
2014-4-22 17:47
感謝yen956,但是輸入正確,為何仍有警告?
作者:
yen956
時間:
2014-4-22 18:46
本帖最後由 yen956 於 2014-4-22 18:49 編輯
抱歉, 我好像有偷改你的檔案的樣子,
(兩個圖不一樣, 真抱歉, 常為了錄影而压縮原空間)
又, 所謂 陣列公式
點[E4], 在【資料編輯列】輸入公式,
不要按 Enter, 改按 Ctrl+Shift+Enter
作者:
symis
時間:
2014-4-22 19:25
回復
5#
yen956
您太客氣了,我試的結果一樣呢!
是不是我也把E5,E6,E7也照做有關?
查了一下,Ctrl+Shift+Enter 是陣列公式
我再研究一下好了
謝謝您!
作者:
yen956
時間:
2014-4-22 20:40
回復
4#
symis
把 B3:C7 剪下, 貼到 C3 就可以了, 公式已在 vba 中
有難度的邏輯(考核表).7z
http://www.mediafire.com/download/j90ni7j1evwrix5/%E6%9C%89%E9%9B%A3%E5%BA%A6%E7%9A%84%E9%82%8F%E8%BC%AF%28%E8%80%83%E6%A0%B8%E8%A1%A8%29.7z
作者:
yen956
時間:
2014-4-23 08:31
本帖最後由 yen956 於 2014-4-23 08:33 編輯
回復
6#
symis
如果整張工作表, 只有這四個公式:
[E4].FormulaArray = "=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),C4,"""")))"
(或許公式應改為:) "=SUM(LEN(UPPER($J$3:$J$10))-LEN(SUBSTITUTE(UPPER($J$3:$J$10),
B4
,"""")))"
....
再也沒有其他的公式, 則可將原VBA刪除, 改用這個試試看:
(原公式保留)
Private Sub Worksheet_Calculate()
If [E4] > 1 Then
MsgBox "A 最多只能有1個", vbCritical
End If
If [E5] > 2 Then
MsgBox "B 最多只能有2個", vbCritical
End If
If [E6] < 4 Then
MsgBox "C 最少要有4個", vbCritical
End If
If [E7] < 1 Then
MsgBox "D 最少要有1個", vbCritical
End If
End Sub
複製代碼
又, 原VBA有誤(不小心, 抱歉!!)
[E8] = "=SUM(E4:
E5
)"
應改為
[E8] = "=SUM(E4:
E7
)"
作者:
symis
時間:
2014-4-23 17:07
大大真厲害!
幾點請教:
1. 如何讓USER若改到規定人數時,也會提示?
2. A,B,C,D輸入錯誤會提示,但仍可繼續操作,這樣USER可不理? 還是,若有錯,按掉訊息後,回復回值比較好?
3. macro3的用途是...?
作者:
yen956
時間:
2014-4-25 16:40
本帖最後由 yen956 於 2014-4-25 16:44 編輯
2. A,B,C,D輸入錯誤會提示,但仍可繼續操作,這樣USER可不理? 還是,若有錯,按掉訊息後,回復回值比較好?
複製代碼
回復
9#
symis
[J4:J10] 用資料→驗証→清單, 可防使用者輸入錯誤.
1. 如何讓USER若改到規定人數時,也會提示?
複製代碼
其實用【錯誤會提示】不是好方法,太多【錯誤會提示】會中斷操作
建議[E3:E8]可改用【設定格式化條件】,例如:
當 B級(即[E5]) 大於2時, [E5]就變成滿江紅(公式仍在),
但不會出現警告提示, 不會中斷操作, 如何?
3. macro3的用途是...?
複製代碼
不知macro3是指什麼?
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)