在之前的文章中我们学习了VBA的基本语法,接下来我们就要学习如何使用VBA开发宏命令脚本,如何与Excel进行交互。
我了解的内容仅限于我自己的使用,可能并不系统,还请谅解。
首先我们可能需要操作Sheet页
1.创建Sheet页,此方式可创建指定名称的Sheet页,不需要返回值
Worksheets.Add.Name = "Sheet页名称"
2.获取Sheet页中存在数据的总行数,返回值为Integer
Application.CountA(ActiveSheet.Range("a:a"))
3.获取Sheet页中存在数据的总列数,返回值为Integer
Application.CountA(ActiveSheet.Range("1:1"))
4.获取Sheet页中所有行的数据,返回值用Variant类型变量接收
Rows("从多少行开始: 到多少行结束")
如果希望填写变量的话,按照如下格式填写
Rows(& 开始行变量 ":" & 结束行变量)
此时会有一个小问题,就是获取到的一行的数据,会把这一行所有的单元格都获取到,包括空单元格,但是我们可能用到10列或者100列就可以了,为了提升性能,我们需要获取指定行,指定列的方法
5.获取Sheet页中指定行,指定列范围内的数据,返回值用Variant类型变量接收
Range(Cells(开始列的列数, 开始行的行数), Cells(结束行的行数, 结束列的列数))
此时我们就可以获得需要的指定范围内的数据
6.SpecialCells方法(重点)
这个方法的可用性很强大,它可以筛选出我们需要的数据
Range.SpecialCells(Type, Value)
其中Type可以选择的类型为
XlCellType 名称 | 常量值 | 注释 |
xlCellTypeAllFormatConditions | -4172 | 任意格式单元格 |
xlCellTypeAllValidation | -4174 | 含有验证条件的单元格 |
xlCellTypeBlanks | 4 | 空单元格 |
xlCellTypeComments | -4144 | 含有注释的单元格 |
xlCellTypeConstants | 2 | 含有常量的单元格 |
xlCellTypeFormulas | -4123 | 含有公式的单元格 |
xlCellTypeLastCell | 11 | 已用区域中的最后一个单元格 |
xlCellTypeSameFormatConditions | -4173 | 含有相同格式的单元格 |
xlCellTypeSameValidation | -4175 | 含有相同验证条件的单元格 |
xlCellTypeVisible | 12 | 所有可见单元格 |
当Type参数为 xlCellTypeConstants 或 xlCellTypeFormulas时,Value参数有4种XlSpecialCellsValue 常量可选
XlSpecialCellsValue名称 | 常量值 | 注释 |
xlErrors | 16 | 错误值 |
xlLogical | 4 | 逻辑值 |
xlNumbers | 1 | 数字 |
xlTextValues | 2 | 文本 |
我今天的使用方式为 想要获取Sheet页内筛选后的全部数据,代码为
Worksheets("Sheet页名称").Range(Cells(开始列的列数, 开始行的行数), Cells(结束行的行数, 结束列的列数)).SpecialCells(12)
但是选择完毕后我发现了一个问题,就是通过此方法筛选的可见行数量不对,我在页面上筛选出了5条数据,但是通过这个方法获取的数据仅获得两条,所以这种方法懂哥可以用,我是不太会用
所以我用来获取可见行的方法为
EntireRow.Hidden = False
当我们获取到整个的数据后循环处理,每一行都进行是否隐藏的判断,如果没有隐藏的话再进行数据处理
整个过程的代码如下
Sub myCode()
Dim arr As Variant, row As Long, column As Long, countN As Long //变量声明
n = 1
Worksheets.Add.Name = "test" //创建新的Sheet页
With ActiveSheet
For Each Rng In Worksheets("Sheet1").Range("F:F").Cells //循环Sheet1中F列,每一列都为一个Range对象 如果需要调用一行中多列,则为("A:F")
If Rng <> "" And Rng.EntireRow.Hidden = False Then 数据处理1 //如果Range对象不为空并且隐藏属性为False 则说明为可见行,然后进行数据处理
If Rng <> "" And Rng.EntireRow.Hidden = False Then 数据处理2 //同样进行数据处理
Next
End With
End Sub
7.Sheet页的写入
Worksheets("写入的Sheet页名称").Cells(第几行, 第几列) = 写入的值
上面的过程就是关于Sheet页的数据获取以及Sheet页的写入
下一篇我们将会介绍如何调试VBA代码↓