我有一个带有公式的工作表,该公式是从列表中随机选择一个名称。我创建了一个分配给按钮/图像的宏,该宏会将随机生成的值复制到另一个单元格中,但是它复制的值不是它生成的值。例如,如果A1中的公式生成“ John”,我想将该值复制到B1,以便B1包含“ John”,即纯文本,无公式。
我的问题是B1的最终结果将不是“ John”,而是与列表不同的名称(纯文本无公式)。我最好的猜测是,运行宏会使公式在实际复制所需的内容之前重新计算几次,因此复制和粘贴的内容不是所需的结果。在运行它之前,如何获取该宏以正确复制它显示的值?
附加到我正在使用的“运行”按钮的图像上的宏是:
var spreadsheet=SpreadsheetApp.getActive();
spreadsheet.getRange('A1').copyTo(spreadsheet.getRange('B1'),SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
A1中的公式为:
=index(A3:A8,randbetween(1,6))
这会随机产生A3:A8中六个名称之一。
在成功的结果中,当A1包含“ John”时,单击按钮会将“ John”粘贴到B1中。然后,A1将重新计算为其他名称。如果A1包含“ Steve”,则单击按钮将粘贴“ Steve”,依此类推。目前,它将随机粘贴任何名称。
答案 0 :(得分:1)
(可能)不可能使RANDBETWEEN和宏一起正常播放,但是一种解决方法是使用宏生成随机数并将其粘贴到电子表格中。然后,您可以将该粘贴的数字用作随机确定的来源,除非再次运行该宏,否则它不会重新计算。这样一来,您就可以在其他宏中使用特定的随机结果。就我而言,我使用INDIRECT允许我将随机数用作单元格引用的一部分,从而选择一个随机名称。这是我用于随机数的宏:
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max))+1;
};
建立此函数后,您可以将其作为getRandomInt(5)放入其他宏,也可以将其作为最大数量。我添加了“ +1”以防止结果为零,但设置最大值仍然可以正常进行。