我有一个用 OpenOffice(Windows 7 32 位中的 V3.3.0)创建的电子表格,我将其用作 DVD 收藏的数据库。在询问超级用户中的问题,这样当我拿不定主意要看什么的时候,它就可以从我的收藏中随机弹出一个标题。它使用以下公式:
=INDIRECT("A"&RANDBETWEEN(2;COUNTA(A1:A1048576)))
这将在我的 DVD 的开头和结尾之间选择一个随机值并显示名称。这个功能运行良好,但我现在想对其进行扩展,使其更加复杂一些。
每次我看 DVD 时,我都会在电子表格的一栏中记下日期。现在,我希望随机选择一部我最近六个月没看过的电影。
我将来可能会对此进行扩展,例如,随机选择一部我过去 6 个月内没看过的电影,并且是喜剧片(我还有一个电影类型的专栏)。
对于如何做到这一点的任何指点都将不胜感激。
答案1
现在您需要添加另一列,其中包含您上次观看该电影的日期以及类型。我不知道如何自动完成此操作,但您可以不断重新计算公式,直到找到随机选择。
您需要做的是添加一些IF
子句来查看所选的电影是否符合您想要的类型,以及上次播放日期是否超过了从现在起的某个日期。
为此,我会在几个单元格中输入我的条件,并在另一个单元格中存储一个随机单元格的位置。然后,您可以执行以下操作:
=IF((Last Watched - Today) > 6 Months, IF(Genre = Selected Genre, TITLE))
要获取这些值,您可以使用函数OFFSET
来偏移INDIRECT
一定数量的行/列。基本上,您将用新OFFSET
值替换我在该公式中输入的值。此方法的唯一缺点是,您不能保证每次都能获得标题 - 您可能必须不断重新计算随机单元格,直到找到符合您条件的单元格(我不知道如何在没有宏的情况下自动完成此操作)。
为了解更多详细信息,假设您将包含 DVD 标题的随机单元格放在单元格中A1
。您可以将上一个公式中的 TITLE 替换为INDIRECT(A1)
。如果类型位于其旁边的列中,则将其替换为OFFSET(INDIRECT(A1), 0, 1)
。然后,您可以只更新单元格 A1 中的随机值,它将自动与您的条件匹配。此外,您可以在多个静态单元格中设置条件,因此您也可以即时更新它。
答案2
- 首先,将 DVD 列表过滤为一个较小的“很久没看过”列表,使用与 Breaththrough 建议的类似的条件:
=FILTER(A1:A1048576, (Last Watched - Today) > 6 Months, (Genre = Selected Genre, TITLE))
- 然后应用您现有的随机选择器功能 —
=INDIRECT("B"&RANDBETWEEN(2;COUNTA(B1:B1048576)))
更改为列B
(新的过滤列表) — 来查找一部要观看的电影。