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
 
                    
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号