MS Excel - 运行 公式或根据随机行选择保存先前的值
MS Excel - Run formula or save previous value based on random row selection
我有一个 Excel sheet,我正在 select 根据数字带随机排列。我最初的目标是 select 一行并保存它被随机数生成器 select 编辑的时间。但是,由于 rand()
函数的重新计算和波动性,我无法为所有行保存 selection 时间;只有当前的。
| 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: =RANDBETWEEN(0,E11+100)
H2: =MATCH(H2,$E2:E11,1)
I2: =INDEX($A:$A,$I)
Cx: =IF($Ax=$J,NOW(),0)
其中 x
是行号
Bx: =VALUE(Cx)
其中 x
是行号
最初我认为 value()
函数可能会模拟手动 Paste Special > Value 命令并有效地 "freeze" 当前值,但这是不工作(没有真正的惊喜)。
在弄清楚我做错了什么之前,我能够重复键入 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,我可以看到单元格逐渐变红,直到它们重新绘制自己选中后为绿色。
我有一个 Excel sheet,我正在 select 根据数字带随机排列。我最初的目标是 select 一行并保存它被随机数生成器 select 编辑的时间。但是,由于 rand()
函数的重新计算和波动性,我无法为所有行保存 selection 时间;只有当前的。
| 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: =RANDBETWEEN(0,E11+100)
H2: =MATCH(H2,$E2:E11,1)
I2: =INDEX($A:$A,$I)
Cx: =IF($Ax=$J,NOW(),0)
其中x
是行号Bx: =VALUE(Cx)
其中x
是行号
最初我认为 value()
函数可能会模拟手动 Paste Special > Value 命令并有效地 "freeze" 当前值,但这是不工作(没有真正的惊喜)。
在弄清楚我做错了什么之前,我能够重复键入 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,我可以看到单元格逐渐变红,直到它们重新绘制自己选中后为绿色。