[算表] 組合加總最佳化

看板Office作者 (米米)時間4年前 (2020/03/17 09:33), 4年前編輯推噓0(00105)
留言105則, 2人參與, 4年前最新討論串1/2 (看更多)
軟體:Excel 版本:2016 大大好,有一問題如下 https://imgur.com/nIb49t9
有10位同學(A欄) 他們可以做的伏地挺身數量(B欄) 現在想分三組競賽,要讓他們的競賽數值平均一點 第一組要3人 第二組3人 第三組4人 有辦法讓他自動計算如何分組後的加總是最平均的(k2,K4,K6越接近越好) (從折線圖看希望他是平坦一點) (要知道每一組分別是那些人)(g:j) 再者 折線圖有辦法利用像是交叉分析篩選器 點選幾號同學就自動依組別 加總並畫在折線圖上嗎? 查過資料好像無法 再麻煩大大幫忙 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.219.98.170 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1584408837.A.571.html

03/17 12:29, 4年前 , 1F
想法,巨集巢狀迴圈排出組合排列數字(3人),接來3人一樣巢
03/17 12:29, 1F

03/17 12:29, 4年前 , 2F
狀迴圈(排除前項已排列數字),前面二組3、3都確定了,那剩
03/17 12:29, 2F

03/17 12:29, 4年前 , 3F
餘的就是4人的部分,接著就是判斷加總兩兩相減abs取正值的
03/17 12:29, 3F

03/17 12:29, 4年前 , 4F
最小值組合,這樣邏輯來看內文連結的話,第一組1,7,8、第
03/17 12:29, 4F

03/17 12:29, 4年前 , 5F
二組4,5,9、第三組2,3,6,10三組加總都是50
03/17 12:29, 5F

03/17 15:41, 4年前 , 6F
好 我再試試看 好難QQ
03/17 15:41, 6F

03/18 10:26, 4年前 , 7F
還是要看原po需求,以巨集迴圈的話,也可抓出多取符合最小
03/18 10:26, 7F

03/18 10:26, 4年前 , 8F
值的組合,抓出上 https://i.imgur.com/jvRrQtB.jpg
可不
03/18 10:26, 8F

03/18 10:28, 4年前 , 9F
只一組,就看看那種方式合適
03/18 10:28, 9F

03/18 11:50, 4年前 , 10F
能請教大概的寫法嗎? 巨集還在學習中
03/18 11:50, 10F

03/18 14:27, 4年前 , 11F
以內文10筆來看的想法上巢狀迴圈
03/18 14:27, 11F

03/18 14:27, 4年前 , 12F
for 變數a =1 to 8
03/18 14:27, 12F

03/18 14:27, 4年前 , 13F
for 變數b = 變數a+1 to 9
03/18 14:27, 13F

03/18 14:27, 4年前 , 14F
for 變數c = 變數b+1 to 10
03/18 14:27, 14F

03/18 14:27, 4年前 , 15F
next
03/18 14:27, 15F

03/18 14:27, 4年前 , 16F
next
03/18 14:27, 16F

03/18 14:27, 4年前 , 17F
next
03/18 14:27, 17F

03/18 14:27, 4年前 , 18F
以上就是不重複三人一組的部分,執行上就是120次
03/18 14:27, 18F

03/18 14:27, 4年前 , 19F
那接著來就是要剔除,舉例好了變數a=1,變數b=2,變數c=3
03/18 14:27, 19F

03/18 14:27, 4年前 , 20F
也就是1,2,3被歸在一組了,那還沒有被歸在一組有4~10
03/18 14:27, 20F

03/18 14:27, 4年前 , 21F
這裡的4~10寫入陣列,或是字串取代1,、2,、3,後再split到
03/18 14:27, 21F

03/18 14:27, 4年前 , 22F
陣列內
03/18 14:27, 22F

03/18 14:27, 4年前 , 23F
一樣巢狀迴圈,但此時同學剩7位還沒有被分配
03/18 14:27, 23F

03/18 14:27, 4年前 , 24F
for 變數d =1 to 5
03/18 14:27, 24F

03/18 14:27, 4年前 , 25F
for 變數e = 變數a+1 to 6
03/18 14:27, 25F

03/18 14:27, 4年前 , 26F
for 變數f = 變數b+1 to 7
03/18 14:27, 26F

03/18 14:27, 4年前 , 27F
nex
03/18 14:27, 27F

03/18 14:27, 4年前 , 28F
next
03/18 14:27, 28F

03/18 14:27, 4年前 , 29F
next
03/18 14:27, 29F

03/18 14:27, 4年前 , 30F
又會有三個人被歸在一組了。這裡變數d,e,f都是來對應陣列
03/18 14:27, 30F

03/18 14:27, 4年前 , 31F
內的值
03/18 14:27, 31F

03/18 14:27, 4年前 , 32F
沒有被被歸在一組的就是最後4人
03/18 14:27, 32F

03/18 14:27, 4年前 , 33F
有了這些歸類後,接著就是設個二個變數(變數g[數值]、變數
03/18 14:27, 33F

03/18 14:27, 4年前 , 34F
h[文字]),變數g用於判斷if回文所述的加總兩兩相減abs取正
03/18 14:27, 34F

03/18 14:27, 4年前 , 35F
值的最小值)來做比較,當最小值小於變數g,then 變數h就寫
03/18 14:27, 35F

03/18 14:27, 4年前 , 36F
入同學(a欄)的資料;else if 當最小值等於變數g時 then 累
03/18 14:27, 36F

03/18 14:27, 4年前 , 37F
加變數h = 變數 & ...資料。
03/18 14:27, 37F

03/18 14:27, 4年前 , 38F
變數g不設初始值的話,可能為0,所以初始值方面要設個大點
03/18 14:27, 38F

03/18 14:27, 4年前 , 39F
的數值
03/18 14:27, 39F
還有 27 則推文
03/26 17:15, 4年前 , 67F
另外每當判斷有比之前最小值的出現時,所記錄是哪三組資料
03/26 17:15, 67F

03/26 17:15, 4年前 , 68F
的變數就要清空,清空方式可寫入空字串""
03/26 17:15, 68F

04/13 11:43, 4年前 , 69F
嘗試了蠻久還是沒試出來orz
04/13 11:43, 69F

04/13 18:17, 4年前 , 70F
這要看原po寫到目前方面巨集是如何寫的了
04/13 18:17, 70F

04/15 10:12, 4年前 , 71F

04/15 10:12, 4年前 , 72F
研究很久還是不知道要怎麼寫QQ
04/15 10:12, 72F
※ 編輯: l3112255 (124.219.98.170 臺灣), 04/15/2020 10:16:22

04/15 10:24, 4年前 , 73F
可以給個範例嗎 還是指導一下 麻煩了QQ
04/15 10:24, 73F

04/16 13:00, 4年前 , 74F
連結來看無法提供什麼指導,因為判斷當小於G,H=cells(2,F
04/16 13:00, 74F

04/16 13:00, 4年前 , 75F
),變數G是什麼,之後又要有什麼作用,上面迴圈都執行完了
04/16 13:00, 75F

04/16 13:00, 4年前 , 76F
,在最後才判斷目的是?
04/16 13:00, 76F

04/16 13:00, 4年前 , 77F
像這方面的判斷都會是在迴圈內而非在迴圈結束後才執行
04/16 13:00, 77F

04/16 15:41, 4年前 , 78F
好吧 謝謝大大回覆
04/16 15:41, 78F

04/16 18:33, 4年前 , 79F
這樣說好了,原po知道為什麼要設二組巢狀迴圈嗎?
04/16 18:33, 79F

04/16 18:33, 4年前 , 80F
(第一組)
04/16 18:33, 80F

04/16 18:33, 4年前 , 81F
for A=1 to 8
04/16 18:33, 81F

04/16 18:33, 4年前 , 82F
...
04/16 18:33, 82F

04/16 18:33, 4年前 , 83F
next
04/16 18:33, 83F

04/16 18:33, 4年前 , 84F
(第二組)
04/16 18:33, 84F

04/16 18:33, 4年前 , 85F
for D=1 to 5
04/16 18:33, 85F

04/16 18:33, 4年前 , 86F
...
04/16 18:33, 86F

04/16 18:33, 4年前 , 87F
next
04/16 18:33, 87F

04/16 18:33, 4年前 , 88F
以下我就以一組、二組來稱呼
04/16 18:33, 88F

04/16 18:33, 4年前 , 89F
一組A=1,B=2,C=3時這個資訊就要跟二組說目前1,2,3的同學已
04/16 18:33, 89F

04/16 18:33, 4年前 , 90F
經被占了
04/16 18:33, 90F

04/16 18:33, 4年前 , 91F
那只能抓非1,2,3的名額
04/16 18:33, 91F

04/16 18:33, 4年前 , 92F
二組雖然是D=1,E=2(這裡原po的巨集也是寫錯的,不是變數A+
04/16 18:33, 92F

04/16 18:33, 4年前 , 93F
1,是變數D+1),F=3(錯誤亦同)
04/16 18:33, 93F

04/16 18:33, 4年前 , 94F
這裡1,2,3不是指同學1,2,3而是指非1,2,3後的同學4,5,6,7,8
04/16 18:33, 94F

04/16 18:33, 4年前 , 95F
,9,10,這不是數值的想法,而是位址的想法
04/16 18:33, 95F

04/16 18:33, 4年前 , 96F
所以原po第一步是要先讓一組和二組迴圈內是可以正確回傳上
04/16 18:33, 96F

04/16 18:33, 4年前 , 97F
述資料
04/16 18:33, 97F

04/16 18:33, 4年前 , 98F
第二步才能用該資料所對應的數量來判斷,不是直接
04/16 18:33, 98F

04/16 18:33, 4年前 , 99F
拿變數A~F,因為A~F不就只是1~10的數值,以這個來判斷並不
04/16 18:33, 99F

04/16 18:33, 4年前 , 100F
正確
04/16 18:33, 100F

04/16 18:33, 4年前 , 101F
另外雖然我03/25 21:00回文變數D、E、F方面用另一個程序
04/16 18:33, 101F

04/16 18:33, 4年前 , 102F
sub或是函數function來處理,而原po要以一個程序內來做也
04/16 18:33, 102F

04/16 18:33, 4年前 , 103F
可以,就gosub return,設個變數,文字、數字或布林值都行
04/16 18:33, 103F

04/16 18:33, 4年前 , 104F
執行二組迴圈時先判斷是否是一組迴圈gosub來的;不設也行
04/16 18:33, 104F

04/16 18:33, 4年前 , 105F
,就一組迴圈執行完就exit sub就行
04/16 18:33, 105F
文章代碼(AID): #1US2a5Ln (Office)
討論串 (同標題文章)
文章代碼(AID): #1US2a5Ln (Office)