她理财

登录 注册
#阿卡的职场进阶之路

来自上班那些事儿・13篇帖子・606人参与

发帖
aka13

那些我常用的excel小技巧之VBA篇

aka13
aka13 aka13 2023-11-24 16:43 阅读(1945)

在上一篇帖子里,阿卡写了常用的一些excel函数,今天,就来写一写那些工作中用到的VBA。

这里阿卡建了一个示例模板,做演示用,样子如下图:

现在,启用excel里的宏,具体做法如下:

第一步,点击选项;

第二步:选择自定义功能区,将开发工具前面的□打上√。

接下来,返回excel,按快捷键ALT+F11,打开VBA编辑器,先认识一下VBA的编辑界面,长这样:

好了,到这里,准备工作完毕,我们正式进入VBA的世界。

1、for……next基本循环

2、if……end if 判断循环

3、dir字典


接下来,看下VBA处理数据的效率,比如,阿卡常用的壳子,按名称新增工作表,代码如下:

Sub xi()

Dim sht  As Worksheet

Set sht = Sheets.Add

sht.Name = "1"

End Sub

运行一下看看效果,会在原工作表的基础上,按1月”新建一个工作表,很简单有没有?

好,加点难度,先判断现有工作表有无重复名称,然后再按照想要的工作表名称和个数,进行新建,代码如下:

Sub cjb(str As String)

Dim i, k As Integer

Dim sht As Worksheet

For Each sht In Sheets

    k = 0

    If sht.Name = str Then

        k = 1

    End If

Next

    If  k = 0 Then

    Sheets.Add after:=Sheets(Sheets.Count)

    Sheets(Sheets.Count).Name = str

End If

End Sub

这算是一个完整的代码壳子,有了这个壳子,可以往里面装任何想要的数据,比如,日报周报月报,分分钟复刻成百上千张表;还有财务的三大报表数据提取,都可以用。

阿卡曾经用以上代码给行政部的小姐姐打了百十来张不同姓名的通知函,前后不用五分钟,坐着喝杯茶,等打印机打印完去取就行,现在还记得行政小姐姐感激涕零的样子,说,要不是阿卡她就得加班,之前弄这个全靠复制粘贴修改,弄了一周才做完。

接着,放一个阿卡常用的壳子,用于数据拆分,长这样:

Sub chaifenshuju()

Dim i, j, k, l As Integer

Dim sht, sht0, sht1 As Worksheet

Dim irow As Integer

Set sht0 = ActiveSheet

l = InputBox("请输入你要按第几列拆分")

Application.DisplayAlerts = False

    If Sheets.Count > 1 Then

        For Each sht1 In Sheets

            If sht1.Name <> sht0.Name Then

                sht1.Delete

            End If

        Next

    End If

Application.DisplayAlerts = False

irow = sht0.Range("a65536").End(xlUp).Row

For i = 2 To irow

    k = 0

    For Each sht In Sheets

        If sht.Name = sht0.Cells(i, l) Then

            k = 1

        End If

    Next

    If k = 0 Then

        Sheets.Add after:=Sheets(Sheets.Count)

        Sheets(Sheets.Count).Name = sht0.Cells(i, l)

    End If

Next

For j = 2 To Sheets.Count

    sht0.Range("a1:z" & irow).AutoFilter field:=l, Criteria1:=Sheets(j).Name

    sht0.Range("a1:z" & irow).Copy Sheets(j).Range("a1")

Next

    sht0.Range("a1:z" & irow).AutoFilter

    sht0.Select

MsgBox "已处理完毕,牛逼不"

End Sub

测试一下数据,还是开始的示例模板,假如我们要按“班组”这一列进行数据拆分,从左到右数,“班组”所在是第5列,好,我们运行代码:

这里,填写5,然后点“确定”,最终效果如下:

会自动按照班组进行拆分数据,然后以班组为名称建立副本到新的工作表内,前后不超过五秒钟。

接着测试,这次我们换成按性别拆,也就是第3列:

最终效果如下:

同样的,会自动按照性别进行拆分数据,然后以性别为名称建立副本到新的工作表内,睁眼闭眼的功夫,秒秒钟完成工作,很丝滑有没有?

这里为了方便演示,阿卡用的数据很少,只有几行几列,而实际工作中遇到的数据动辄成百上千行,但对于VBA来说,处理起来都一样,这时候就体现出效率了,别人还在复制粘贴的时候,你倒杯水的功夫工作就完成了,交给别人的工作,动辄五六个小时出成果,到了你这里,半小时内搞定,试想,哪个老板能拒绝?

好了,VBA篇先写到这里,后面阿卡会写一写工作中常用的快捷键和小工具,我们下一篇帖子见。

今日以上。

只看楼主
全部回复(30)

回复楼主

回帖
小组话题

扫码下载

APP

iOS • Android

想理财却无从下手? 打开应用
通俗实用的理财课程