今天要教一个套路公式,将金额中的每一位提取出来,填写到对应的会计凭证表中。弄懂原理,以后只要复制这个公式,稍微修改参数就能一直为你所用。
案例:将下图 1 中的 F 列奖金的每一位数值依次提取出来,放置到右侧的数据表中,第一位数值的前面填上人民币符号,以免被人随意添加数字。
效果如下图 2 所示。
解决方案:1. 在 H2 单元格中输入以下公式:
=IF($F2,LEFT(RIGHT(" ¥"&$F2,COLUMNS(H:$M))),"")
2. 向右向下拖动,复制公式。
公式释义:
为了能帮助大家更好地理解,我会用从内到外依次计算出结果的方式来层层讲解。
先来解析 right 函数这段公式。
1. 选中 " ¥"&$F2 --> 按 F9:
结果为“ ¥7153”;
这段的目的是将人民币符号“ ¥”和 F2 单元格的值连接起来;
* 请注意:“¥”符号前面必须有个空格,原因稍后解释;F2 要列绝对而行相对引用。
2. 选中 COLUMNS(H:$M) --> 按 F9:
columns 函数的作用是计算参数中区域的列数,结果为 6;
之所以选结果表所在的区域,是为了方便,选 A:$F 也是一样,但是要费脑子,没必要;
参数 H:$M 的第一个单元格要相对引用,而第二个参数必须固定,这样就会在公式向右拖动的时候列数依次递减,结果为 6、5、4、3……
3. 选中整段 RIGHT(" ¥"&$F2,COLUMNS(H:$M)) 公式 --> 按 F9:
right 函数的作用是提取出文本字符串中最后一个或多个字符;语法为 right(要提取字符的文本字符串,[需要提取的字符数]);
从前面两段公式解析,我们已经知道,第一个参数结果为“ ¥7153”;第二个参数是 6,且向右拖动会依次递减;
那么整个公式表示从“ ¥7153”依次提取最后 6 位、最后 5 位、最后 4 位……最后 1 位;
4. 最后用 left 函数提取出上述结果的第一位数;
left 函数的第二个参数省略,表示仅提取第 1 个字符;
此时大家就明白为什么“¥”前面要有空格了,就是在位数不足的时候,填充空格,否则的话,H2 单元格也会出现“¥”符号
5. 最外面的 if 函数的作用是,当“奖金”列为空值时,显示空;否则的话,当“奖金”出现空值时,结果区域的最后一位会提取出“¥”符号。
理解了套路公式的含义,我们就能在此基础上根据需求调整公式。比如,如果金额不是整数,有小数点,如何提取每一位呢?
1. 在 H2 单元格中输入以下公式 --> 向右向下拖动,复制公式:
=IF($F2,LEFT(RIGHT(" ¥"&$F2*100,COLUMNS(H:$O))),"")
公式释义:
与之前公式的区别主要是在 F2 的值后面 *100,这样做的目的是将小数点向右移两位,在提取金额的时候,就不会把小数点也作为一位提取出来了。