看板 Office 關於我們 聯絡資訊
大家好: 不好意思有一個VBA的問題想請教 文件連結:https://bit.ly/3ckveLI 我在Actual工作表中,已經算出1~3999對應的羅馬數字以及其字串長度, 而字串長度會介於1~15之間, 我在Results工作表也已經算出字串長度在1~3999的分配狀況並以樞紐分析表呈現。 我的疑問是我現在要在Results工作表的a1:b17用vba寫出 當我用亂數在Actual的c欄隨機挑5000次, 那機率分配會是如何? 目前我寫的code可以算出5000次,但只能1~15平均分配, 而原本的Actual c欄1~15的機率分配並非隨機, 不知道能不能從Actual c欄挑出5000次, 並產出如圖片(a,b欄的樣貌。 圖: https://imgur.com/o2QNhDy 另外我自己產生的數字都會從a1 b1開始, 但我希望a1, b1是表頭, 已經嘗試過很多次但都調整失敗。 請教一下各位高手了,謝謝! ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 142.255.98.214 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1586919570.A.DEA.html
soyoso: 儲存格a1和b1為表頭,寫入資料從第二列起的話 04/15 11:13
soyoso: Range("a" & display_it)改為Range("a" & display_it + 1) 04/15 11:13
soyoso: Range("b" & display_it)亦同 04/15 11:14
soyoso: 表頭方面再寫入"Number"和"VBA"後 listobjects.add格式化 04/15 11:19
soyoso: 為表格,要合計showtotals為真true 04/15 11:19
passion929: 謝謝 剛剛用display_it+1已經成功讓資料從第二列開始 04/15 11:27
passion929: 但我在第二行打了Range(“a1”)=“number” 跑的時候 04/15 11:27
passion929: 仍然出不來 04/15 11:27
passion929: 另外也想請教一下 因為之前沒有學過listtoobjects.add 04/15 11:27
passion929: 的用法,請問具體是要在哪一部分加入呢 04/15 11:27
passion929: 以及Showtotoals=True是要加在哪一個地方呢? 謝謝 04/15 11:27
passion929: 另外目前算出來仍然是1-15平均出現共5000次,有可能套 04/15 11:30
passion929: 用Actual c欄的次數分配機率嗎? 謝謝 04/15 11:30
soyoso: 第二行是指?Dim count_of_each_toss(50)下方嗎? 04/15 11:33
soyoso: 如果加在dim ...和Call clean_a1b17中間的話,就會執行程 04/15 11:33
soyoso: 序clean_a1b17,儲存格a1的值被清除 04/15 11:34
soyoso: 表頭要加在Call clean_a1b17的下方 04/15 11:35
passion929: 對的 我在sub dice_with_dimension() 下面寫了range( 04/15 11:36
passion929: “a1”)= “number” 04/15 11:36
passion929: 喔喔喔謝謝 突破盲點 我忘記有clean的設定了 04/15 11:37
soyoso: listobjects.add和showtotals用法可google,加在迴圈結束 04/15 11:39
soyoso: 檔案來看為next和end sub中間 04/15 11:39
soyoso: 用法方面也可以用錄製,格式化為表格這個功能 04/15 11:40
passion929: 好的 非常感謝你 我再來試試看! 04/15 11:41
soyoso: Actual c欄為分配機率是指?1 Length為1,當亂數時取出1次 04/15 11:49
soyoso: 後就不會被取出的意思嗎? 04/15 11:49
soyoso: 如果是的話,1.亂數,2.取出後length減1,3.判斷當0時不再 04/15 11:49
soyoso: 被取得,以變數暫存(如巨集內變數count_of_each_toss這樣 04/15 11:49
soyoso: 的方式),或是以儲存格暫存都是可以的 04/15 11:49
passion929: 我想要用vba做出的次數比例是接近我在result的j欄(根 04/15 12:40
passion929: 據actual工作表中1-3999的羅馬數字字串算出再count的 04/15 12:40
passion929: 結果) 04/15 12:40
passion929: 但是必須抽5000次,我的想法是因為actual c欄的1-15是 04/15 12:42
passion929: 有某種比例分配的,能不能從這一欄抽5000次再count到r 04/15 12:42
passion929: esults的vba製成的表格,這樣分配比例就會跟actual很 04/15 12:42
passion929: 接近(像圖所示一樣) 04/15 12:42
passion929: 因為1-15並非平均分配 我想這應該是我用randbetween沒 04/15 12:43
passion929: 辦法得出正確答案的原因,但一直查不到應該怎麼寫 04/15 12:43
passion929: 對了我已經成功在vba設定表頭名稱 並格式化為表格和加 04/15 12:44
passion929: 入合計(用錄製的)非常感謝 04/15 12:44
passion929: 對了因為是要模擬actual c欄產生的分配結果,應該是取 04/15 12:49
passion929: 出不放回 04/15 12:49
soyoso: 要做出的次數比例是接近樞紐分析表的話 04/15 13:06
soyoso: 那1.先5000乘i2:i16,會取得actual的次數 04/15 13:06
soyoso: 2.取整數int,或四捨五入(工作表函數的round),這時總數有 04/15 13:06
soyoso: 可能多或少 04/15 13:06
soyoso: 3.隨機分配給占比前幾的,這樣比較不會影響占比小的actual 04/15 13:06
soyoso: percent 04/15 13:06
soyoso: 4.確定1~15的actual的次數後,再來迴圈亂數1~15,每次都遞 04/15 13:06
soyoso: 減1~15的actual次數 04/15 13:06
soyoso: 直至0,每當次數0值增加,亂數最大值就會遞減,如1的次數 04/15 13:06
soyoso: 沒有了,亂數會是1~14 04/15 13:06
soyoso: 亂數的1~15或1~14要對應的是次數還大於0的值 04/15 13:06
passion929: 謝謝你花時間回覆我 真的很感謝 我大概了解設計的邏輯 04/15 13:28
passion929: 了 但因為我是vba新手 之前雖然有用excel函數 但vba對 04/15 13:28
passion929: 我來說是全新的東西 我再來研究要怎麼把這些思維轉成v 04/15 13:28
passion929: ba 非常感謝 04/15 13:28
soyoso: 或是要用資料分析內的亂數產生器,離散分配,值及機率就以 04/15 13:48
soyoso: 樞紐分析表的h2:h16和j2:j16這方面有要連續參照位址,再複 04/15 13:48
soyoso: 製到其他儲存格,亂數個數5000 04/15 13:48
soyoso: 但測試上是否符合要的接近,原po再看看;也可用迴圈重覆產 04/15 13:48
soyoso: 生出亂數,再判斷最符合接近的結果 04/15 13:48
soyoso: 最後再以該結果來產生樞紐分析表 04/15 13:48
soyoso: 如 https://i.imgur.com/IP88dMO.jpg 這是測試迴圈100次下 04/15 13:48
soyoso: 的結果 04/15 13:49
soyoso: 判斷上是以兩兩相減abs後最小值,當然這只是模擬而已,至 04/15 13:49
soyoso: 於最接近的定義為何,原po再自行調整 04/15 13:49
soyoso: https://i.imgur.com/cc5rWQP.jpg 04/15 13:49
soyoso: 當迴圈300次時 https://i.imgur.com/k6C7Y1H.jpg 04/15 13:53
passion929: 謝謝你這麼專業又熱心 我後來因為還是研究不出來怎麼 04/16 03:45
passion929: 寫 所以我試著用另一個macro產生5000個亂數在excel某 04/16 03:45
passion929: 個地方後 再countif再表格裡 也有產生差不多的結果 只 04/16 03:45
passion929: 是變成要錄好多macro再call進來 目前檔案雖然能跑 但 04/16 03:45
passion929: 離完美還很遠 04/16 03:45
passion929: 真的非常感謝你花時間幫我看 這個問題比較複雜 一定花 04/16 03:47
passion929: 了你很多時間理解我的表達與測試 04/16 03:47