VBA-操作单元格对象
选择单元格的几种方式:
[a1].select
cell(2,3).select #参数 行 列
range("a1").select
range("a1") =1 默认是 range("a1").value = 1 为属性赋值
两者还是有 区别的 比如安装单元格a1的值去点击对应的工作表 sheets(range("a1").value).select 这时候只能用range().value
range的两个朋友:offset以及 end 帮助走位的 移动
range("a1").offset(1,2) #两个参数 下移 右移 #偏移单元格 风骚的走位
例子:
Sub ss() Dim rng As Range #这里需要注意 如果这边没有声明rng为单元格的话 需要使用rng.value 来进行赋值 For Each rng In Range("a1:a20") If rng = "男" Then rng.Offset(0, 1) = "先生" Else rng.Offset(0, 1) = "女士" End If Next End Sub
使用end进行更改 range("a65536").end(xlup).row 表示最后一行
Sub ss() Dim rng As Range For Each rng In Range("a1:a" & Range("a65536").End(xlUp).Row) If rng = "男" Then rng.Offset(0, 1) = "先生" Else rng.Offset(0, 1) = "女士" End If Next End Sub
range更改选区 两个参数
Range("a1").Resize(1,4).select #参数 行 列
Range("a1").EntireRow.select
range的复制
Range("h1:i7").Copy Range("n7")
range 单元格的合并 merge
Sub ss() Dim rng As Range For Each rng In Range("h21:o21") rng.Resize(2, 1).Merge Next End Sub
range单元格清除
range("a1:a100").clearcontents
宏的引用
Sub ss() Dim sht As Worksheet Call qk #使用call + 宏名称 来引用另一个宏的功能 For i = 2 To Sheets.Count Range("a1") = i Next End Sub .......................................................... Sub qk() For i = 2 To Sheets.Count Sheets(i).Range("a1").ClearContents Next End Sub
新建表
Sheets.Add after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "123" 上面的代码可以简写为如下 Sheets.Add(after:=Sheets(Sheets.Count)).Name = "123"
但是上面的容易出问题 如果已经有名字为“123”的表 那么程序就会崩溃
sub 拆分表 dim i,k as integer For i = 2 To irow k = 0 For Each sht In Sheets If sht.Name = Sheet1.Cells(i, l) Then k = 1 End If Next If k = 0 Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = Sheet1.Cells(i, l) End If end sub
交互语言
Sub sssss() Dim i As Integer i = InputBox("你几岁了") MsgBox "你" & i & "岁" End Sub
可以结合前面学习的知识制作一个小工具 根据输入的数值 对对应的表列进行拆分成 多表
Sub 拆分数据() Dim sht As Worksheet Dim i, k, j, m As Integer Dim irow As Integer '一共多少行 Dim l As Integer '删除多余的表 irow = Sheet1.Range("a65536").End(xlUp).Row l = InputBox("按照那列分") Application.DisplayAlerts = False If Sheets.Count > 1 Then For m = 2 To Sheets.Count Sheets(2).Delete Next End If Application.DisplayAlerts = False '拆分表 For i = 2 To irow k = 0 For Each sht In Sheets If sht.Name = Sheet1.Cells(i, l) Then k = 1 End If Next If k = 0 Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = Sheet1.Cells(i, l) End If Next '拷贝数据 For j = 2 To Sheets.Count Sheet1.Range("a1:F" & irow).AutoFilter Field:=l, Criteria1:=Sheets(j).Name Sheet1.Range("a1:F" & irow).Copy Sheets(j).Range("a1") Next Sheet1.Range("a1:F" & irow).AutoFilter Sheet1.Select End Sub