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
原文地址:https://www.cnblogs.com/xiao-xuan-feng/p/12624631.html