[問題] Excel VBA從某範圍亂數抽取計數

看板Office作者 (baby)時間4年前 (2020/04/15 10:59), 編輯推噓0(0076)
留言76則, 2人參與, 4年前最新討論串1/1
大家好: 不好意思有一個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

04/15 11:13, 4年前 , 1F
儲存格a1和b1為表頭,寫入資料從第二列起的話
04/15 11:13, 1F

04/15 11:13, 4年前 , 2F
Range("a" & display_it)改為Range("a" & display_it + 1)
04/15 11:13, 2F

04/15 11:14, 4年前 , 3F
Range("b" & display_it)亦同
04/15 11:14, 3F

04/15 11:19, 4年前 , 4F
表頭方面再寫入"Number"和"VBA"後 listobjects.add格式化
04/15 11:19, 4F

04/15 11:19, 4年前 , 5F
為表格,要合計showtotals為真true
04/15 11:19, 5F

04/15 11:27, 4年前 , 6F
謝謝 剛剛用display_it+1已經成功讓資料從第二列開始
04/15 11:27, 6F

04/15 11:27, 4年前 , 7F
但我在第二行打了Range(“a1”)=“number” 跑的時候
04/15 11:27, 7F

04/15 11:27, 4年前 , 8F
仍然出不來
04/15 11:27, 8F

04/15 11:27, 4年前 , 9F
另外也想請教一下 因為之前沒有學過listtoobjects.add
04/15 11:27, 9F

04/15 11:27, 4年前 , 10F
的用法,請問具體是要在哪一部分加入呢
04/15 11:27, 10F

04/15 11:27, 4年前 , 11F
以及Showtotoals=True是要加在哪一個地方呢? 謝謝
04/15 11:27, 11F

04/15 11:30, 4年前 , 12F
另外目前算出來仍然是1-15平均出現共5000次,有可能套
04/15 11:30, 12F

04/15 11:30, 4年前 , 13F
用Actual c欄的次數分配機率嗎? 謝謝
04/15 11:30, 13F

04/15 11:33, 4年前 , 14F
第二行是指?Dim count_of_each_toss(50)下方嗎?
04/15 11:33, 14F

04/15 11:33, 4年前 , 15F
如果加在dim ...和Call clean_a1b17中間的話,就會執行程
04/15 11:33, 15F

04/15 11:34, 4年前 , 16F
序clean_a1b17,儲存格a1的值被清除
04/15 11:34, 16F

04/15 11:35, 4年前 , 17F
表頭要加在Call clean_a1b17的下方
04/15 11:35, 17F

04/15 11:36, 4年前 , 18F
對的 我在sub dice_with_dimension() 下面寫了range(
04/15 11:36, 18F

04/15 11:36, 4年前 , 19F
“a1”)= “number”
04/15 11:36, 19F

04/15 11:37, 4年前 , 20F
喔喔喔謝謝 突破盲點 我忘記有clean的設定了
04/15 11:37, 20F

04/15 11:39, 4年前 , 21F
listobjects.add和showtotals用法可google,加在迴圈結束
04/15 11:39, 21F

04/15 11:39, 4年前 , 22F
檔案來看為next和end sub中間
04/15 11:39, 22F

04/15 11:40, 4年前 , 23F
用法方面也可以用錄製,格式化為表格這個功能
04/15 11:40, 23F

04/15 11:41, 4年前 , 24F
好的 非常感謝你 我再來試試看!
04/15 11:41, 24F

04/15 11:49, 4年前 , 25F
Actual c欄為分配機率是指?1 Length為1,當亂數時取出1次
04/15 11:49, 25F

04/15 11:49, 4年前 , 26F
後就不會被取出的意思嗎?
04/15 11:49, 26F

04/15 11:49, 4年前 , 27F
如果是的話,1.亂數,2.取出後length減1,3.判斷當0時不再
04/15 11:49, 27F

04/15 11:49, 4年前 , 28F
被取得,以變數暫存(如巨集內變數count_of_each_toss這樣
04/15 11:49, 28F

04/15 11:49, 4年前 , 29F
的方式),或是以儲存格暫存都是可以的
04/15 11:49, 29F

04/15 12:40, 4年前 , 30F
我想要用vba做出的次數比例是接近我在result的j欄(根
04/15 12:40, 30F

04/15 12:40, 4年前 , 31F
據actual工作表中1-3999的羅馬數字字串算出再count的
04/15 12:40, 31F

04/15 12:40, 4年前 , 32F
結果)
04/15 12:40, 32F

04/15 12:42, 4年前 , 33F
但是必須抽5000次,我的想法是因為actual c欄的1-15是
04/15 12:42, 33F

04/15 12:42, 4年前 , 34F
有某種比例分配的,能不能從這一欄抽5000次再count到r
04/15 12:42, 34F

04/15 12:42, 4年前 , 35F
esults的vba製成的表格,這樣分配比例就會跟actual很
04/15 12:42, 35F

04/15 12:42, 4年前 , 36F
接近(像圖所示一樣)
04/15 12:42, 36F

04/15 12:43, 4年前 , 37F
因為1-15並非平均分配 我想這應該是我用randbetween沒
04/15 12:43, 37F

04/15 12:43, 4年前 , 38F
辦法得出正確答案的原因,但一直查不到應該怎麼寫
04/15 12:43, 38F

04/15 12:44, 4年前 , 39F
對了我已經成功在vba設定表頭名稱 並格式化為表格和加
04/15 12:44, 39F

04/15 12:44, 4年前 , 40F
入合計(用錄製的)非常感謝
04/15 12:44, 40F

04/15 12:49, 4年前 , 41F
對了因為是要模擬actual c欄產生的分配結果,應該是取
04/15 12:49, 41F

04/15 12:49, 4年前 , 42F
出不放回
04/15 12:49, 42F

04/15 13:06, 4年前 , 43F
要做出的次數比例是接近樞紐分析表的話
04/15 13:06, 43F

04/15 13:06, 4年前 , 44F
那1.先5000乘i2:i16,會取得actual的次數
04/15 13:06, 44F

04/15 13:06, 4年前 , 45F
2.取整數int,或四捨五入(工作表函數的round),這時總數有
04/15 13:06, 45F

04/15 13:06, 4年前 , 46F
可能多或少
04/15 13:06, 46F

04/15 13:06, 4年前 , 47F
3.隨機分配給占比前幾的,這樣比較不會影響占比小的actual
04/15 13:06, 47F

04/15 13:06, 4年前 , 48F
percent
04/15 13:06, 48F

04/15 13:06, 4年前 , 49F
4.確定1~15的actual的次數後,再來迴圈亂數1~15,每次都遞
04/15 13:06, 49F

04/15 13:06, 4年前 , 50F
減1~15的actual次數
04/15 13:06, 50F

04/15 13:06, 4年前 , 51F
直至0,每當次數0值增加,亂數最大值就會遞減,如1的次數
04/15 13:06, 51F

04/15 13:06, 4年前 , 52F
沒有了,亂數會是1~14
04/15 13:06, 52F

04/15 13:06, 4年前 , 53F
亂數的1~15或1~14要對應的是次數還大於0的值
04/15 13:06, 53F

04/15 13:28, 4年前 , 54F
謝謝你花時間回覆我 真的很感謝 我大概了解設計的邏輯
04/15 13:28, 54F

04/15 13:28, 4年前 , 55F
了 但因為我是vba新手 之前雖然有用excel函數 但vba對
04/15 13:28, 55F

04/15 13:28, 4年前 , 56F
我來說是全新的東西 我再來研究要怎麼把這些思維轉成v
04/15 13:28, 56F

04/15 13:28, 4年前 , 57F
ba 非常感謝
04/15 13:28, 57F

04/15 13:48, 4年前 , 58F
或是要用資料分析內的亂數產生器,離散分配,值及機率就以
04/15 13:48, 58F

04/15 13:48, 4年前 , 59F
樞紐分析表的h2:h16和j2:j16這方面有要連續參照位址,再複
04/15 13:48, 59F

04/15 13:48, 4年前 , 60F
製到其他儲存格,亂數個數5000
04/15 13:48, 60F

04/15 13:48, 4年前 , 61F
但測試上是否符合要的接近,原po再看看;也可用迴圈重覆產
04/15 13:48, 61F

04/15 13:48, 4年前 , 62F
生出亂數,再判斷最符合接近的結果
04/15 13:48, 62F

04/15 13:48, 4年前 , 63F
最後再以該結果來產生樞紐分析表
04/15 13:48, 63F

04/15 13:48, 4年前 , 64F
這是測試迴圈100次下
04/15 13:48, 64F

04/15 13:49, 4年前 , 65F
的結果
04/15 13:49, 65F

04/15 13:49, 4年前 , 66F
判斷上是以兩兩相減abs後最小值,當然這只是模擬而已,至
04/15 13:49, 66F

04/15 13:49, 4年前 , 67F
於最接近的定義為何,原po再自行調整
04/15 13:49, 67F

04/15 13:49, 4年前 , 68F

04/15 13:53, 4年前 , 69F
04/15 13:53, 69F

04/16 03:45, 4年前 , 70F
謝謝你這麼專業又熱心 我後來因為還是研究不出來怎麼
04/16 03:45, 70F

04/16 03:45, 4年前 , 71F
寫 所以我試著用另一個macro產生5000個亂數在excel某
04/16 03:45, 71F

04/16 03:45, 4年前 , 72F
個地方後 再countif再表格裡 也有產生差不多的結果 只
04/16 03:45, 72F

04/16 03:45, 4年前 , 73F
是變成要錄好多macro再call進來 目前檔案雖然能跑 但
04/16 03:45, 73F

04/16 03:45, 4年前 , 74F
離完美還很遠
04/16 03:45, 74F

04/16 03:47, 4年前 , 75F
真的非常感謝你花時間幫我看 這個問題比較複雜 一定花
04/16 03:47, 75F

04/16 03:47, 4年前 , 76F
了你很多時間理解我的表達與測試
04/16 03:47, 76F
文章代碼(AID): #1UbdYItg (Office)
文章代碼(AID): #1UbdYItg (Office)