2013-08-01 36 views
0

我有一個用戶數據庫(帶有數字分配)和一個Excel列表項,我成功將它們拉入兩個數組中。一組用戶,Excel中的另一項(任務)。我試圖想到表示此場景的邏輯:將旋轉循環放入Excel單元格中

數據庫中的用戶可以存在數字0-5。基本上,這表示他們在一週內休息了多少天,並幫助分解每個人可以獲得的Excel範圍內的項目數,以便正確比例項目(在我使用布爾指標表示要包含或排除之前) 。例如:

User | Present # 
------------------- 
Jared | 0 'present daily 
John | 0 'present daily 
Mary | 1 'off 1 day 
Tom | 5 'off rotation entirely 

問題是:什麼是最好的方式來把它與他們應該得到整體多少項目?

我希望JaredJohn獲得最大的,Mary少一點,和Tom永遠不會被包括在內。假設我有50個項目。

我曾經想過的一種方法是,在將名稱循環到Excel中時,每當我回到數組頂部作爲「通過」(同時分配到Excel單元格中)時計數。

 Anyone with a 0 is never skipped through each pass 
    Anyone with a 1 is skipped every 4th pass 
    Anyone with a 2 is skipped every 3rd pass 
    Anyone with a 3 is skipped every 2nd pass 
    Anyone with a 4 is skipped every other pass 
    Anyone with a 5 is never included (easy)

在我的例子,JaredJohn總是被使用,Mary將每第四通跳過,Tom將永遠不會被使用。

這是否有意義?
每隔N次抓住一個數組循環的最佳方式是什麼?
我正在以正確的方式解決這個問題嗎?

+1

你能否重新解釋你如何得到:「5> 15,5> 15,4> 12」?我明白了相反的意思,並分裂。 –

+0

如果你只有5個數字,那麼我會使用嵌套'IF'或'Select Case'。然後只需循環計數器並在計數器達到任務數量時重置或退出。 While循環在這裏會很有效。然後使用類似(用戶,循環#)的2D數組,並且每循環從循環#中減去。如果Loop#= 0,則添加一個任務並將Loop#重置爲用戶的號碼。 – Grant

+1

@pnuts你想提供你的評論作爲答案? –

回答

1

爲了避免大量的循環和這可能導致的延遲,我建議計算'需求因子'。
有50項(在這個例子中)根據可用性分配。可用性顯示爲0,每天至5完全關閉,但反過來更容易處理:'關閉輪轉'沒有可用資源,所以0和'目前每天'具有所有平日(?)可用,所以5

The User |那麼現在的#表將成爲:

 
Jared 5 
John 5 
Mary 4 
Tom  0 
     14

所以14人日可覆蓋50個項目,平均3.57項目按每人每天。假設一件物品不能拆分,即每人每天3件,8件以上。通過將(修訂的)表格值乘以INT(item_total/table-total),可以一次分配「3個」。所以對於Jared和John,結果是5x3 = 15,對於Mary 4x3 = 12。

雖然只有42個,所以還有8個尚未分配。 3,3,2'extras'很明顯(導致18,18,14),但編程不那麼容易。我會建議INT公式中存在任何殘差,然後使用其結果+1(即,這裏是4而不是3)接受20,20,16,0的初步結果(6太多),然後循環遍歷每個用戶敲1 (在可能的情況下)直到6個被淘汰。

0

這一點,因爲你似乎是每週分配任務,每天一個不完全意義:

任何一個有0永不通過每遍

任何一個有1跳過跳過每4個通

任何一個有2被跳過每第三通

任何一個有3被跳過每第二通

任何一個有4跳過每隔通永遠不會包含

任何一個有5(容易)

然而,假設上述情況,你跳過用戶他們的個人TaskAssignmentsAttempted Mod (6 - Present#) = 0

也許你需要:

任何一個有0永不跳過

任何擁有1被跳過一次,每5通過

任何擁有2每5通過

被跳過兩次

任何有3的人每5次通過跳過3次

任何人有4每5次跳過4次

任何帶有5的人都會跳過。

假設以上情況,當您的個人5 - Present#小於個人TaskAssignmentsAttempted Mod 5時,您跳過用戶。

使用其中的任何一種,您都需要跟蹤每個用戶進行分配嘗試(成功與否)以及實際分配的次數。