註冊
登錄
首頁
論壇版規
禁止列表
說明
地圖
數位書香
私人消息 (0)
公共消息 (0)
論壇任務 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
麻辣家族討論版版
»
Excel程式區
» 將一固定值隨機分配到指定欄位
返回列表
下一主題
上一主題
發帖
[發問]
將一固定值隨機分配到指定欄位
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
1
#
跳轉到
»
發表於 2018-8-26 17:12
|
顯示全部帖子
本帖最後由 n7822123 於 2018-8-26 17:13 編輯
回復
1#
PaulDing
隨機分配到10個欄位的合要等於111嗎?
如果能描述清楚一點,或者舉一個範例結果,別人才知道你的需求
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
2
#
發表於 2018-8-26 17:49
|
顯示全部帖子
本帖最後由 n7822123 於 2018-8-26 18:02 編輯
回復
2#
n7822123
隨便做了一個,不知道有沒符合你的需求
test1.rar
(13.78 KB)
下載次數: 6
2018-8-26 17:52
Sub test1()
亂數比例範圍 = 0.3
RN = Sheets(1).UsedRange.Rows.Count
ReDim Sum(RN - 1)
For R = 1 To RN - 1
Sum(i) = Cells(R + 1, 3)
ave = Sum(i) / 10
For C = 1 To 9
Cells(R + 1, C + 3) = Fix(((Rnd * 2) - 1) * (ave * 亂數比例範圍) + ave)
Next C
Cells(R + 1, 13) = "=sum(RC[-9]:RC[-1])"
Cells(R + 1, 13) = Sum(i) - Cells(R + 1, 13)
Next R
End Sub
複製代碼
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
3
#
發表於 2018-8-26 18:22
|
顯示全部帖子
本帖最後由 n7822123 於 2018-8-26 18:26 編輯
回復
1#
PaulDing
剛剛發現你的S.N. 在B欄,修改一下程式碼
如果要用函數做的話 參考 hcm19522 大大即可
test1.rar
(13.85 KB)
下載次數: 5
2018-8-26 18:25
Sub test1()
亂數比例範圍 = 0.3
RN = Sheets(1).UsedRange.Rows.Count
ReDim Sum(RN - 1)
For R = 1 To RN - 1
Sum(R) = Cells(R + 1, 4)
ave = Sum(R) / 10
For C = 1 To 9
Cells(R + 1, C + 4) = Fix(((Rnd * 2) - 1) * (ave * 亂數比例範圍) + ave)
Next C
Cells(R + 1, 14) = "=sum(RC[-9]:RC[-1])"
Cells(R + 1, 14) = Sum(R) - Cells(R + 1, 14)
Next R
End Sub
複製代碼
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
4
#
發表於 2018-8-29 00:13
|
顯示全部帖子
本帖最後由 n7822123 於 2018-8-29 00:19 編輯
回復
9#
PaulDing
只是一個變數值=0.3,數字越大,分配的越不平均
以平均值當中值,在乘以一個
比例系數
當做公差
假設平均值=10 比例系數=0.3(30%) 相當於 10+/-3
亂數會從7~13 左右的區間跑,再用fix函數取整數
如果比例系數大於1,有可能會跑出負值
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
5
#
發表於 2018-8-31 03:00
|
顯示全部帖子
本帖最後由 n7822123 於 2018-8-31 03:02 編輯
回復
12#
PaulDing
把第一行改為:
亂數比例範圍 = rnd
解釋:rnd=0~1
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
6
#
發表於 2018-9-1 00:32
|
顯示全部帖子
本帖最後由 n7822123 於 2018-9-1 00:34 編輯
回復
14#
PaulDing
因為被取整數了...............
我沒想到你的
分配值
還會有小於1的時候.........
把以下紅色字的部分刪除即可(Fix 會無條件捨去小數點,ex:Fix(0.53)=0)
Cells(R + 1, C + 3) =
Fix(
((Rnd * 2) - 1) * (ave * 亂數比例範圍) + ave
)
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
7
#
發表於 2018-9-2 01:09
|
顯示全部帖子
回復
16#
PaulDing
亂數比例範圍 = 1
這樣應該就很不平均了!
如果你允許出現負值,大於1也是可以的
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
8
#
發表於 2018-9-3 00:46
|
顯示全部帖子
本帖最後由 n7822123 於 2018-9-3 00:51 編輯
回復
18#
PaulDing
你可能要思考一下你的
條件
合不合邏輯,
10個亂數的合要是一個定值,你要亂數範圍大於1,又不想要負值,這本身邏輯就很不合理了!
舉例來說,10個亂數和被限制和為200 ,平均一個亂數值=20
如果你把亂數比例範圍設定=2 ,表示亂數可能 20+/-40=-20~60
而其中-20~0的部分你又要重跑,要求最後跑出來一定要正值,或者等於0
假設你前5筆跑出來等於 40,55,30,28,38 光這些加起來就191,也就是說後面5筆可能加起來只能等於9
如果第6個跑出來超過9,後面4個一定會有負值,
所以第6個只能是9以下,而後面4個可能都是0
如果你知道我再說什麼,就知道這樣非常不合理!!
如果你亂數比例範圍設更大=5 ,可能後面8個數字都是0,因為要滿足你和=200 又不能負值的條件!
越多數字是0對你來說是越不平均嗎?
如果是如此,那第一個數字=和,後面九個數字都等於0 即可,不需要跑亂數。
TOP
n7822123
發短消息
加為好友
n7822123
(阿龍)
當前離線
UID
20045
帖子
406
主題
8
精華
0
積分
453
金錢
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
在線時間
202 小時
註冊時間
2015-2-7
最後登錄
2021-7-31
暱稱:
阿龍
中學生
帖子
406
主題
8
精華
0
積分
453
點名
0
作業系統
WINDOWS 7
軟體版本
2007
閱讀權限
20
性別
男
來自
台灣
註冊時間
2015-2-7
最後登錄
2021-7-31
9
#
發表於 2018-9-7 11:45
|
顯示全部帖子
本帖最後由 n7822123 於 2018-9-7 11:51 編輯
回復
20#
PaulDing
因為你有對10個數字的和
設條件
,假設和=200
那平均每個亂數的平均值ave
必定
要等於200/10=20
如果平均值超過20,加起來的和就超過200,反之亦同
Rnd:系統給的亂數值,範圍從0~1隨機抽取一個數值
Rnd*2:範圍從0~2隨機抽取一個數值
Rnd*2-1:範圍從-1~+1隨機抽取一個數值
把上述的值乘以任意數值就可以當成公差
若乘以30:(Rnd*2-1)*30=-30~+30
這裡我把"ave * 亂數比例範圍" 當做公差範圍,
如果ave=20,亂數比例範圍=1 那麼公差就是 -20~20(這就是為什麼 亂數比例範圍>1 有可能會有負數產生)
但是算出來的中值=0,這樣加總起來的平均值會等於0,不可能會等於你要的平均值
所以最後還要加上平均值ave,就得到最後式子
(Rnd * 2) - 1) * (ave * 亂數比例範圍) + ave
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助
TOP
靜思自在 :
要批評別人時,先想想自己是否完美無缺。
返回列表
下一主題
上一主題
EXCEL專屬討論區
Excelㄧ般區
Excel程式區
進階應用專區
OFFICE 系列
Word
PowerPoint
Access
Office不分區
程式語言
VB 與 VB.Net
C 與 C#
Java 與 J#
程式設計不分區
資料庫
ORACLE
My SQL
MS SQL
網頁設計
ASP 與 ASP.NET
PHP
PHP+MySQL 入門實作
JavaScript
FLASH / ActionScript
HTM/ HTML/ CSS
網頁設計不分區
電腦與作業系統
電腦各種硬體討論
一般電腦軟體討論
論壇事務
管理公告
投訴反映
新手測試
愛 • 生活
公益佈告欄
生活與感動
[收藏此主題]
[關注此主題的新回復]
[通過 QQ、MSN 分享給朋友]
申請友情鏈接
Facebook粉絲