作者Tessie (Tessie)
看板Office
标题[算表] 批次输入变数至既定公式计算
时间Tue Feb 8 01:18:50 2022
软体:
Google试算表
版本:
想请问,我在一个工作页已经有很复杂的一套公式
这套公式需要输入3个数值x,y,z,经过计算後跑出一个数值 A
输入栏只有这三格,但因为公式中参照很复杂
我现在没办法把输入格变成3整栏,让他跑出一整栏的A
(一部分原因是这公式不是我写的,而且不是只是计算式,
还涉及数值大小条件要参照表格取得值等等,中间参照来参照去非常多)
我现在想要的动作是
如何让这个计算能批次进行?
我有一大堆x,y,z的资料,想要自动算出A
x1,y1,z1,A1
x2,y2,z2,A2
...
xn,yn,zn,An
在A1这一格,我没办法写成 "= x1,y1,z1 丢进去所算出来的A"
把x1,y1,z1丢进去设计好的输入栏这个动作我不知道怎麽进行
还是在公式的输入栏有办法一次输入 x1:xn, y1:yn, z1:zn 然後跑出 A1:An?
但是原本的输出栏A也只是一格,我不知道他会怎麽呈现
想请教高手了,感恩~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.45.223.19 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1644254332.A.6C8.html
1F:→ olycats: 用VBA能做到你要的功能 还没想到其他办法 02/08 09:13
2F:→ planetoid2: google apps script 可以自己写函数 02/08 15:59
上面这两个我完全没碰过,不好意思可否针对我的状况帮忙我找个相关的网页
我可以自行来study,感恩~~
※ 编辑: Tessie (114.45.223.19 台湾), 02/08/2022 16:26:57
3F:推 salqv: 你可以先把x,y,z放在3个栏位,然後录巨集,手动输入第一笔x 02/08 18:30
4F:→ salqv: ,y,z资料至你有函数的栏位,然後把a的值输入到你要的栏位。 02/08 18:30
5F:→ salqv: 再google for回圈的用法,把Range("X2")改成Range("X" & i) 02/08 18:30
6F:→ salqv: ,套进巨集应该就可以了。 02/08 18:30
感谢! 巨集我也没用过(歹势,试算表新手),但这个听起来稍微可以理解,我来study~~
※ 编辑: Tessie (114.45.223.19 台湾), 02/09/2022 11:08:41
摸索了一下,不知道GetRange以及setFormula里面要怎麽用变数指定储存格
例如GetRange('X2')是要写成GetRange('X' & i)吗?我这样跑不动耶
还有setFormula('=X2')是改写成setFormula('=X' & i)这样? 一样跑不动
程式先跑到setFormula时没有错误讯息,但值不对(变成0)
然後跑到GetRange时出现错误讯息 Exception: Range not found
可能这问题太基本,我一时竟然google不到答案...
程式长这样:
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
for (var i = 1; i < 10; i++){
spreadsheet.getRange('AK4').activate();
spreadsheet.getCurrentCell().setFormula('=Q' & i);
spreadsheet.getRange('AL4').activate();
spreadsheet.getCurrentCell().setFormula('=S' & i);
spreadsheet.getRange('AM4').activate();
spreadsheet.getCurrentCell().setFormula('=U' & i);
spreadsheet.getRange('AG' & i).activate();
spreadsheet.getCurrentCell().setFormula('=AN4');
}
};
AK4, AL4, AM4 是固定的公式输入格 (原文中的x,y,z),然後AN4是固定的输出格(原文A)
我要从 Qn, Sn, Un 这几列挖数值去AK4,AL4,AM4去计算,然後结果要丢回去成AGn列
(i<10只是测试用,请忽略,只有这几笔我就不用头痛了XD)
麻烦帮忙解惑了,感恩
※ 编辑: Tessie (114.45.223.19 台湾), 02/09/2022 15:00:00