我的 Windows 7 笔记本电脑上的 OpenOffice 电子表格 (版本 3.3.0) 中有一个我的 (279) DVD 列表,我想创建一个公式来随机选择一部电影观看(用于我拿不定主意的时候)。这有效:
=RANDBETWEEN(1;279)
但它给出的只是一个数字,我必须上下滚动才能检查,它还“硬编码”了 DVD 的总数。我想显示电影的名称(保存在 A 列中),这样,如果数字为 277,就会显示电影的名称,在本例中为“X-Men 2”。我假设只需在前面添加列字母,如下所示:
=A(RANDBETWEEN(1;279))
可以工作但是它会引发一个错误:#NAME?
那么,我该如何...
- 让它显示电影名称
- 当我添加新的 DVD 时自动检测顶部数字,这样我就不必将其硬编码到公式中?
- 我怎样才能只需单击单元格即可重新生成一个新的随机数?(即不必按 Shift+Ctrl+F9 手动重新计算)
谢谢。
答案1
要返回 A 列、行R, 您可以使用
=INDIRECT("A"&
R)
要计算 A 列中的值的数量,可以使用
=COUNTA(A1:A65536)
因此,对于你的情况,你可以使用
=INDIRECT("A"&RANDBETWEEN(1;COUNTA(A1:A65536)))
您可能可以制作一个宏按钮来重新计算。我对 OpenOffice.org Calc 的宏语言了解不够多,因此无法提供更多帮助。
答案2
我对 OpenOffice 的内部结构不够熟悉,无法帮助您解决第三个请求,只能说对我来说,只需按 F9 即可,不需要 shift 或 control。至于其他两个,不过:
=INDIRECT(ADDRESS(RANDBETWEEN(1,MATCH("*",$A$1:$A$50000,-1)),1))
50000
如果您拥有或认为您将拥有超过 50000 张 DVD,请将 替换为更大的数字,并且如果它在 以外的列中,请替换函数1
中的。ADDRESS()
A
答案3
- 将 Bavi_H 答案中的公式放入单元格
B1
(=INDIRECT("A"&RANDBETWEEN(1;COUNTA(A1:A65536)))
)中 - 让宽度和高度变得
B1
又大又好 B1
采用大号美观字体进行格式化,以便长电影标题仍能适合- 选择列中的任意单元格
A
并选择菜单项Format > Column > Hide
- 选择
Tools > Macros > Record Macros
菜单项 - 按 F9(或 Ctrl-Shift-F9)
- 点击
Stop Recording
按钮 - 在
Basic Macros Dialog
出现的字段中输入名称(如“刷新”)Macro name
,在框中选择电子表格Save macro in
,单击Save
并输入模块名称(如“电影”),单击OK
- 选择菜单项
View > Toolbars > Form Controls
- 在该工具栏中,确保
Design Mode
按钮已打开 - 按下
Form Design
按钮使表单设计工具栏可见 - 在
Form Design
工具栏中,关闭Open in Design Mode
按钮 - 在
Form Controls
工具栏中,单击Label Field
按钮 - 将光标从单元格 B1 的左上角拖到其右下角,以创建与单元格大小相同的标签字段
- 右键单击单元格/标签并
Control...
从上下文菜单中选择项目 - 选择选项卡,然后从字段
General
中删除文本Label
- 选择选项
Events
卡,单击...
按钮 - 在
Assign Action
对话框中,单击Macro...
按钮 - 在
Macro Selector
对话框中,展开框中电子表格下的条目,Library
直到看到之前使用的模块名称(例如“电影”),然后单击它 - 在
Macro name
框中,选择您之前创建的宏(例如“刷新”) - 单击
OK
,单击,然后单击右上角的按钮OK
关闭该框Properties
X
- 在
Form Controls
工具栏中,关闭Design Mode
- 现在,当您单击单元格时,
B1
显示的电影名称应该会改变 - 如果需要,请关闭工具栏
- 在保存电子表格之前,您可以进入
Tools > Options > OpenOffice.org Calc > View
并关闭Window:
Column Headers and Rows
、和Horizontal Scroll Bars
,以获得非常干净的外观(下次创建新的空白电子表格时可能需要重新打开它们)Vertical Scroll Bars
Sheet tabs
- 保存电子表格
- ???
- 利润
答案4
为了方便起见,请在 A 列中对 DVD 进行编号,并在 B 列中输入 DVD 的名称(A2 = A1 + 1
如果您想使其更容易,可以使用公式进行编号)。
假设 n = DVD 开始位置上方的行数,例如如果您有列标签。
=INDEX(B:B, RANDBETWEEN(1, MAX(A:A)) + n, 1)