分享

太聪明了!居然想到用一条简单的公式取代VBA

 Excel不加班 2021-09-29

VIP学员的问题,希望将A列的数据依次放在每个工作表的B2,不用一个个粘贴。

这种问题,卢子的第一反应就是用VBA。

Sub 依次粘贴()

    Dim i%

        For i = 2 To Sheets.Count

            Sheets(i).[b2] = Sheet1.Range("A" & i)

        Next

End Sub

不过在我动手写VBA之前,打开了她的表格,看到了一条好公式,只是差一点点她就写成功了。借助INDEX+SHEET的结合,只是参数没写好。

INDEX这个函数想必都很熟悉,如果不熟也没关系,可以点文章进去了解:你要的INDEX教程来了,速看!

而SHEET估计90%的人都感觉很陌生,没用过。这个是新版本的函数,卢子以前知道,但是几乎没能用在实际问题上面。

这个系列总共有2个函数,SHEET和SHEETS。

SHEET的意思就是指这个工作表是第几个,比如你在第2个表输入公式,就返回2,不需要任何参数。

=SHEET()


SHEETS的意思就是指这个工作簿一共有多少个工作表,比如现在有12个工作表,也是不需要参数。

=SHEETS()


看到这里,你会发现SHEET就类似于VBA中的变量i,而SHEETS就类似于Sheets.Count。

介绍完用法,那就进入正题。

假如要依次引用A列的内容,可以用INDEX+ROW。

=INDEX(A:A,ROW(A2))


而现在是要在每个表的B2引用A列的内容,就可以用SHEET取代ROW,都是获得数字2、3、4……

现在要在表2到最后一个表输入同一个公式,可以选中表2,按住Shift键选中最后一个,这样就将要输入公式的所有表选中,输入一个公式就等同于所有表都输入公式。

=INDEX(Sheet1!A:A,SHEET())


解决完,突然想起了2年前写过的一篇文章:日报表累计的通用公式

里面关键内容我发上来,可以用SHEET代替原来需要将日期写在工作表A2的问题。

如何设置“本月累计”这个公式?

一个月有多少天,就写多少个公式,这样操作虽然可以做到,但不智能。

其实,这种也可以用一个通用公式搞定。选择2日,按住Shift键,选择最后一天的表格,在单元格输入公式,下拉,这样就可以。

=E4+OFFSET(INDIRECT((DAY($A$2)-1)&"日!F3"),ROW(A1),0)

以上公式是借助A2是标准日期的特点提取日,用SHEET就不用管A2是什么内容了。

=E4+OFFSET(INDIRECT((SHEET()-1)&"日!F3"),ROW(A1),0)

每个人都有自己的想法,平常多交流,也许就能从交流中学到更好的公式。

推荐:5个超好用的公式,收藏备用,特别是第1个太精妙了!

上文:这样用公式计算余额,我还是第一次见到


你用过这2个新函数吗?

作者:卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多