原创作者: 卢子 转自:EXCEL不加班
昨天的文章没看的读者要先看:只需用一招,就可以学好VBA……
用录制宏加For循环虽然可以生成多个工作表,但是命名的规则太土了,都是Sheet1、Sheet2……也不好识别。
如果能按实际情况命名是不是更好?
比如,生成的工作表是1月、2月……12月。
其实,要实现这种很简单,只要知道一个新单词Sheets(i).Name,这个就是工作表的名称,里面的i就是变量,1到12。i & "月"就是在数字后面连接一个月字,也就是1月到12月,其实跟在单元格的用法是一样的。
Sub 生成工作表()
For i = 1 To 12
Sheets.Add After:=ActiveSheet
Sheets(i 1).Name = i & "月"
Next
End Sub
i & "月"也可以直接调用单元格的值,单元格用Range("b" & i),就是b1到b12。现在要根据总表,也就是第一张工作表生成分表,需要在单元格前面指定工作表序号或者名称,也就是Sheets(1).Range("b" & i)。
其实,VBA跟在单元格写入公式的操作有点类似,都以=(等号)去连接后面需要显示的字符,单元格是=A1&"月",而VBA是=i & "月",基本差异很小。
跨表引用也是类似的,只是将原来你连接共工作表的!(感叹号)换成了连接对象的·(点),VBA=Sheet1.Range("B" & i) , 公式=Sheet1!B1。有时我们就是以公式的思路来试试看是否能代入VBA代码使用。
根据b列的内容生成分表的代码就出来了。
Sub 生成工作表()
For i = 1 To 12
Sheets.Add After:=ActiveSheet
Sheets(i 1).Name = Sheets(1).Range("b" & i 1)
Next
End Sub
现在反过来,已经有了分表了,要生成目录。
如果你前面的内容已经掌握,那这个问题就太简单了,将代码中间的等式调换过来即可。单元格写在=前面,工作表名称写在=后面。
Sub 提取目录()
For i = 1 To 12
Sheets(1).Range("c" & i 1) = Sheets(i 1).Name
Next
End Sub
上面的代码虽然都可以运行,不过如果要写标准的,还需要为i定义变量为整数,Dim i As Integer。
有了VBA以后,有些事就会变得更简单,比如填充10000行内容,在单元格内要拉很久。在VBA只需加个循环就可以,瞬间就搞定。
比如现在要在A列生成1-10000的数字。
Sub 生成数字()
Dim i As Integer
For i = 1 To 10000
Sheets(1).Range("a" & i) = i
Next
End Sub
如果你想让工作变得智能化,一键搞定工作,就得用心学习VBA。前期学习会有点难,只要坚持一段时间就会变得很轻松。