VBA課程記錄5
Range 對象
代表某一單元格、某一行、某一列、某一選定區域(該區域可包含一個或若干連續單元格區域),或者某一三維區域。
Range ("文本型裝單元格地址")
range的常見寫法
Sub rng()
Range("a1").Select 單元格
Range("a:a").Select 列
Range("1:3").Select 行
Range("a1:b10").Select 相鄰區域
Range("a1:d7,c4:e8").Select 不相鄰區域
End Sub
寫法:Range ("文本型裝單元格地址1","文本型裝單元格地址2")
range的變化寫法
Sub rng變化()
Range("a1:b10").Select 一般寫法
Range("a1", "b10").Select 變化寫法1
Range(Range("a1"), Range("b10")).Select 變化寫法2
Range("a1") = 123
End Sub
注意:
1.如果在range前沒有指定工作表,則默認為活動工作表
2.如果對象不是活動工作表(如活動圖表),則會出現錯誤
Sub 單元格對象例子()
Debug.Print Range("a:a").Count 計數工作表最大的行數
Debug.Print Range("1:1").Count 計算工作表最大的列數
Debug.Print Application.CountA(Range("a:a")) 計算工作表已使用的行數
Debug.Print Application.CountA(Range("1:1")) 計算工作表已使用的列數
End Sub
1.range("地址區域").range("地址區域")
Sub 序號表示法()
Range("b2:d4").Range("b2").Select 相對引用的寫法
參照前一個range的左上單元格
End Sub
2.range地址區域中支持變數
Sub range的變數支持()
Dim a%
a = 3
Range("a" & a).Select
Range("c3:e5")(2).Select
End Sub
Sub 實例1動態選單元格或區域()
Dim i%
i = Application.CountA(Range("c:c")) 找到c列中已使用的最後一個單元格位置
Range("c" & i).Select 選擇C列最後一格
Range("a1", "c" & i).Select 選擇A1到C列的最後一格(方法一)
Range("a1:c" & i).Select 選擇A1到C列的最後一格(方法二)
小結:動態單元格區域的定位,可以應用到單據的保存等實際工作中
End Sub
range區域中的每個單元格,我們也可以用索引號表示出來
寫法:range("單元格區域")(行號,列號)
Sub 索引號取出range的單元格()
Range("a1:c4")(4).Select 引用順序是:從左向右,從上到下選取
Range("b2:c4")(3).Select 以前一個單元格區域為照
Range("a1:c4")(4.5).Select 當有小數時,則取整
注意:如果索引號出現小數,則按照「四捨六入五單雙」的「銀行家舍入法」
End Sub
Sub 行列號定位()
Range("a1:c4")(3, 2).Select 利用行號與列號定位
Range("a1:c4")(1.5, 2.5).Select 行列號也可以使用小數
End Sub
小結:
1.這個索引值是參照前一個單元格區域左上單元格進行定位引用的
2.索引值可以是正數,負數,零值,小數
Sub 大於等於2500的平增工資()
Dim rs%, rng%, lj&, k%
For rs = 1 To 60
Range("b2:c20")(rs).Select
rng = Range("b2:c20")(rs)
If rng >= 2500 Then lj = lj + rng: k = k + 1
Next rs
MsgBox "大於等於2500的平均分為:" & Int(lj / k)
End Sub
cells單元格引用法
寫法:cells(行號,列號)
Sub cells基本寫法()
Cells(3, 4).Select 行列號均為數字
Cells(2, "c").Select 行為數字,列為列標字母
Cells.Select 全選
End Sub
cells可以像range一樣可以參照前面的單元格位置
Sub 參照寫法()
Range("b3:f11").Cells(2, 2).Select
Range("b3:f11").Cells(6).Select 從左到右,從上到下
Range("b3:f11")(6).Select 與上一句相等
End Sub
注意:
1.cells中的數字一樣支持正數,負數,0值,小數(四捨六入五單雙)
2.cells不能像range一樣可以引用一個區域,只能引用一個單元格
cells還可以嵌套在range中
Sub 嵌套()
Range(Range("b1"), Range("f11")).Select 這種嵌套方法寫變數比較麻煩
Range(Cells(3, 2), Cells(11, 6)).Select 這種嵌套方法寫變數比較方便
End Sub
Sub 動態引用行列區域()
Dim a%, b%
a = Application.CountA(Range("a:a"))
b = Application.CountA(Range("1:1"))
Range(Cells(1, 1), Cells(a, b)).Select
End Sub
除了前面講的rangecells單元格區域的表示方法還,還是一種簡單的寫法
寫法: [單元格地址] 注意:中括弧中的單元格地址並不需要雙引號("")
Sub 單元格簡寫()
[a3].Select 單元格引用
[b2:c6].Select 單元格區域引用
[a3,b2:c6,b8:d12].Select 多區域引用
[a:a].Select 整列引用
[1:1].Select 整行引用
End Sub
單元格簡寫的也支持引用子集
Sub 子集引用()
[b2:c6].Item(3).Select
Range("b2:c6")(3).Select
[b2:c6].Cells(4).Select
End Sub
Sub 動態區域的引用()
a = Application.CountA([a:a])
b = Application.CountA([1:1])
Range(Range("a1"), Range(Chr(64 + b) & a)).Select 利用chr函數,讓字母形式的列號也支持變數
End Sub
Sub chr函數字元循環()
For i = 1 To 65535
Cells(i, 1) = i
Cells(i, 2) = Chr(i)
Next
End Sub
Sub range引用區域且有變數()
Dim i
i = 1
Range("a1:c" & i).Select 引用單元格是區域且有變數
Cells(i, "c").Select 引用的是單個單元格且有變數
[a1:19].Select 引用的是區域或單元格且無變數
End Sub
Range.Row 屬性
返回區域中第一個子區域的第一行的行號
Range.Column 屬性
返回指定區域中第一塊中的第一列的列號
-------------------------------------------------
Sub test()
i = Range("a3:b9").Range("a5").Row
j = Range("a3:b9").Row
i = Range("b3:d9").Range("a5").Column
j = Range("b3:d9").Column
End Sub
Sub row應用()
For Each rw In Rows("1:13")
If rw.Row Mod 2 = 0 Then
rw.RowHeight = 5
End If
Next rw
End Sub
單元格的值表示方法
Sub 單元格值表示()
a = [a1].Value 實際是什麼,就是什麼
b = [a1].Text 看到是什麼,就是什麼
c = [a1]
End Sub
注意:一個單元格可以省略value,多單元格區域不能省略
Sub 多區域賦值()
Range("e1:e4") = Range("d1:d4").Value
End Sub
單元格地址與引用
Sub 地址與引用()
Set rng = [b2:f2]
[a9] = rng.Address(1, 1) 絕對引用
[b9] = rng.Address(0, 0) 相對引用
[c9] = rng.Address(1, 0) 混合引用
[d9] = rng.Address(0, 1) 混合引用
End Sub
總結:1代表固定,0代表不固定,默認是絕對引用
Sub 地址引用實例()
將表三成績中為空的單元格標為未考
Dim rng As Range, rn$
On Error Resume Next
For Each rng In Sheet3.Range("b2:d10")
If rng = "" Then rn = rn & rng.Address & ","
Next
Range(Left(rn, Len(rn) - 1)) = "未考"
End Sub
1.Range.Cut 方法
將單元格區域剪切到指定的區域
2.Range.Copy 方法
將單元格區域複製到指定的區域
------------------------------------------------------------
Sub 移動複製()
Range("a1:d8").Cut Range("f1")
Range("f1:i8").Copy Range("a1")
End Sub
Sub 另類複製方法()
Range("a10:d17") = Range("a1:d8").Value
End Sub
註:
1.等號後的區域一定要加value.否則不成功
2.被賦值的區域格式全部去掉
Sub 出差登記表記錄保存()
Dim rs%, crs%
rs = Application.CountA([d:d])
crs = Application.CountA(Sheets("出差記錄表").[a:a]) + 1
If rs = 1 Then GoTo 100
Range("a2:d" & rs).Copy Sheets("出差記錄表").Range("a" & crs)
End
100:
MsgBox "沒有要保存的數據!"
End Sub
工作表中單元格,行與列的插入與刪除
Sub 插入()
Rows(2).Insert
End Sub
Sub 隔行插入()
Dim r%
Do
r = r + 2
Rows(r).Insert
Loop Until Cells(r + 1, 1) = ""
End Sub
Sub 刪除()
Rows(1).Delete
End Sub
Sub 隔行刪除()
Dim r, s
m = Application.CountA(Columns(1))
For r = 1 To m / 2
Rows(r).Delete
Next
End Sub
活動單元格:activecell,工作表中活動單元格只有一個
Sub activecells()
a = activecell.Address 取得活動單元格地址
Cells(2, 3).Activate 激活指定單元格
End Sub
selection游標所選區域
Sub 游標所選區域()
Selection = 1
End Sub
Sub 在selection中的改變活單元格()
For i = 1 To Selection.Count
Selection(i).Activate
Next
End Sub
Sub 運用()
Dim i As Range
For Each i In Selection
If i = "" Or i = "缺勤" Then
i = "×"
End If
Next i
End Sub
Worksheet.UsedRange 屬性
返回一個 Range 對象,該對象表示指定工作表上所使用的區域
Sub 已使用區域()
Sheet1.UsedRange.Select
End Sub
注意:
已使用區域的定位方法是:已使用的最小單元格:最大單元格
如果單元格中無內容,但設定了格式,也認為是已使用區域
如果沒有已使用單元格,則默認為A1單元
Sub usedrange應用()
For Each Rng In Sheet1.UsedRange
If IsNumeric(Rng) And Rng >= 90 Then k = k + 1
Next Rng
MsgBox "大於等於90分的人數為:" & k & "人"
End Sub


※合約前是否應該讓對方知情
※如何用經濟學思維提高個人能力
※如何保證食品質量
※價格歧視的作用
※價格歧視的策略
TAG:生活本是如此 |