使用VBA可能会更容易,但可以使用公式来完成。我在LibreOffice Calc中工作,每个公式的最大字符数较低,所以我需要使用辅助列。但如果您愿意,可以将其合并为一个公式。我最多建立了六个骰子,但是如果你按照辅助列中的模式进行操作,你可以将它扩展到你想要的数量。
单元格A1是您的起始编号所在的位置。通常,它会是一个 1
为每个骰子。我开始了 123456
说明逻辑。 C到H列是辅助列,每个最多六个骰子。这些单元格为每个单元格找出下一个值。 A列将值连接成一个字符串。输入第2行的公式,然后将该行向下复制以根据需要预先填充(不需要的单元格将为空白,您可以隐藏列C:H,如果需要)。
A2中的公式:
=IF(A1="","",C2&D2&E2&F2&G2&H2)
空白的测试是隐藏不需要的细胞。如果要将所有内容都转换为单个公式,请将C2:H2中的公式替换为引用。
C2:H2中的公式如下:
C2: = IF(VALUE(LEFT(A1,1))=6,"", VALUE(LEFT(A1,1)) + OR(VALUE(MID(A1,2,1))=6))
D2: = IF(VALUE(MID(A1,2,1))=6,C2,VALUE(MID(A1,2,1))+IF(LEN(A1)>2,VALUE(MID(A1,3,1))=6,1))
E2: =IF(LEN(A1)<3,"",IF(VALUE(MID(A1,3,1))=6,D2,VALUE(MID(A1,3,1))+IF(LEN(A1)>3,VALUE(MID(A1,4,1))=6,1)))
F2: =IF(LEN(A1)<4,"",IF(VALUE(MID(A1,4,1))=6,E2,VALUE(MID(A1,4,1))+IF(LEN(A1)>4,VALUE(MID(A1,5,1))=6,1)))
G2: =IF(LEN(A1)<5,"",IF(VALUE(MID(A1,5,1))=6,F2,VALUE(MID(A1,5,1))+IF(LEN(A1)>5,VALUE(MID(A1,6,1))=6,1)))
H2: =IF(LEN(A1)<6,"",IF(VALUE(MID(A1,6,1))=6,G2,VALUE(MID(A1,6,1))+1))
我添加了空格来对齐公式模式,以便更容易看到逻辑;你可以删除这些。你至少有两个骰子,所以前两个公式不需要测试它们是否存在。当第一个骰子到达时 6
,其他所有人都只能 6
,所以这是最后一排。 C2中的OR函数是因为LO Calc在评估布尔表达式时犹豫不决; OR强制它(并且不会伤害任何东西)。最后一个潜在的模具不需要从下一个模具中携带一个值,所以它的公式稍微短一些。
请注意,列D到H包含对前一列的引用。如果要将其合并为单个公式,请将D2中的C2引用替换为C2公式。然后对每个连续的列执行相同的操作(公式将随着您的操作而增长)。
这是两个骰子的输出: