无需VBA如何在Excel中实现TTRPG骰子滚动?替代FOR循环批量投骰方法
Excel实现TTRPG多面骰投掷的最优方案
根据你的Excel版本不同,可选择以下两种无需VBA宏的实现方案,两者都完全满足单个骰子独立投掷后加总的逻辑:
方案1:Excel 365/2021及以上版本(最简写法)
利用内置的RANDARRAY数组函数直接生成指定数量的独立随机整数,通用公式为:=SUM(RANDARRAY(骰子数量,1,1,骰子面数,TRUE))
- 4d6的实现代码:
=SUM(RANDARRAY(4,1,1,6,TRUE)) - 8d8的实现代码:
=SUM(RANDARRAY(8,1,1,8,TRUE)) - 支持复杂骰组直接拼接:比如投掷1d20+3d6+2的公式为
=RANDARRAY(1,1,1,20,TRUE)+SUM(RANDARRAY(3,1,1,6,TRUE))+2
方案2:Excel 2019及更早旧版本(全版本兼容)
利用SUMPRODUCT+ROW(INDIRECT)模拟循环逻辑,强制RAND函数被调用对应次数生成独立随机数,通用公式为:=SUMPRODUCT(INT(RAND()*骰子面数+1)*(--(ROW(INDIRECT("1:"&骰子数量))>0)))
- 4d6的实现代码:
=SUMPRODUCT(INT(RAND()*6+1)*(--(ROW(INDIRECT("1:4"))>0))) - 8d8的实现代码:
=SUMPRODUCT(INT(RAND()*8+1)*(--(ROW(INDIRECT("1:8"))>0)))
进阶优化:封装成一键调用规则
如果需要频繁投掷不同骰组,可以通过自定义名称功能封装逻辑:
- 在任意单元格(比如A1)输入标准骰组代码,如
4d6、8d8 - 点击「公式」选项卡-「定义名称」,名称填
DICE_RESULT,引用位置填对应版本的公式,直接在其他单元格输入=DICE_RESULT即可自动读取A1的骰组代码输出结果
注意事项
- 两类公式均使用易失性函数,按F9即可刷新获得新的投掷结果
- 所有随机数独立生成,不会出现「单次投掷结果乘以骰子数量」的错误
- 无需启用宏,可直接保存为普通xlsx格式文件,无安全警告
内容的提问来源于stack exchange,提问作者MrMusAddict
相关产品推荐
相关产品推荐

