Random MS Excel-基于随机行选择运行公式或保存以前的值

Random MS Excel-基于随机行选择运行公式或保存以前的值,random,excel-formula,excel-2007,excel-match,non-volatile,Random,Excel Formula,Excel 2007,Excel Match,Non Volatile,我有一个Excel表格,我根据数字带随机选择行。我最初的目标是选择一行,并节省随机数生成器选择该行的时间。然而,由于rand()函数的重新计算和波动性,我无法保存所有行的选择时间;只有当前的一个 | A | B | C | D |E|F| G | H | I | -+------+-------------+-------------+-----+-+-+------+------+----------+ 1|

我有一个Excel表格,我根据数字带随机选择行。我最初的目标是选择一行,并节省随机数生成器选择该行的时间。然而,由于
rand()
函数的重新计算和波动性,我无法保存所有行的选择时间;只有当前的一个

  |  A   |     B       |      C      |  D  |E|F|  G   |  H   |     I    |
 -+------+-------------+-------------+-----+-+-+------+------+----------+
 1| Name | Time Save   | Time        | Blk | | | Rand | Item | Itm Name |
 2| A    | 0           | 0           | 0   | | | 727  | 8    | H        |
 3| B    | 0           | 0           | 100 |
 4| C    | 0           | 0           | 200 |
 5| D    | 0           | 0           | 300 |
 6| E    | 0           | 0           | 400 |
 7| F    | 0           | 0           | 500 |
 8| G    | 0           | 0           | 600 |
 9| H    | 42814.58888 | 42814.58888 | 700 |
10| I    | 0           | 0           | 800 |
11| J    | 0           | 0           | 900 |
  • G2:=randtween(0,E11+100)
  • H2:=匹配(H2,$E2:E11,1)
  • I2:=索引($A$2:$A$27$I$2)
  • Cx:=IF($Ax=$J$2,NOW(),0)
    其中
    x
    是行号
  • Bx:=值(Cx)
    其中
    x
    是行号
起初,我认为
value()
函数可能会模拟手动粘贴特殊>值命令,并有效地“冻结”当前值,但这不起作用(没有真正的意外)


在弄清楚我做错了什么之前,我能够反复键入F9,并成功地观察到浮点时间戳在
C
列中随机跳转,其值按预期增加。此外,这将反映在
B
列中。但是,以前的时间不会被保存,而是重置为0。

我最终发现循环引用解决了我的问题。我没有在
B
列中使用
=VALUE(Cx)
,而是最终想出了一个主意:测试
C
列中的当前值是否等于0(未选中),然后使用循环引用,如果
B
的先前值为0,则保存,如果不是,则更新:

Bx:=IF(Cx>0,Cx,Bx)

显然,这给出了标准的循环参考警告,但由于这是故意的,我绕过了它。现在我明白了:

  |  A   |     B       |      C      |  D  |E|F|  G   |  H   |     I    |
 -+------+-------------+-------------+-----+-+-+------+------+----------+
 1| Name | Time Save   | Time        | Blk | | | Rand | Item | Itm Name |
 2| A    | 42814.62031 | 0           | 0   | | | 159  | 2    | B        |
 3| B    | 42814.62052 | 42814.62052 | 100 |
 4| C    | 42814.62021 | 0           | 200 |
 5| D    | 42814.62050 | 0           | 300 |
 6| E    | 42814.62043 | 0           | 400 |
 7| F    | 42814.62045 | 0           | 500 |
 8| G    | 42814.62046 | 0           | 600 |
 9| H    | 42814.62021 | 0           | 700 |
10| I    | 42814.61980 | 0           | 800 |
11| J    | 42814.62015 | 0           | 900 |
B
列中添加一些花哨的色阶条件格式,然后按住F9,我可以看到单元格逐渐变红,直到被选中后重新将自己涂成绿色