VBA操作单元格
offset
range 选区域
Sub shishi()
Range("a1:a10").Select
End Sub
Sub shishi()
Range("a1:f1").Select
End Sub
range 选单元格
Sub shishi()
Range("a" & 4).Select
End Sub
值得一提的是这种方式下可以使用变量,比如可以与for循环当中的变量连用。
# 这种方式下也可以选中单元格,只不过不能与变量连用
Sub shishi()
[a10].Select
End Sub
相对位置
offset(1,-2)的意思是下移一行,左移2列;
我们可以说,在张三后排的第三个人,单元格也是如此。我们可以精确的说某个单元格的位置,然后根据这个单元格的位置指定其它位置。
比如说我想选中A1单元格右边的一个单元格,但不能直接选中,我们在使用相对位置的时候通常都是和if连用,现在我们来对比一下。
sub shishi()
dim i as integer
for i = 2 to 10
if range("a" & i) = "男" then
range("b" & i) = "先生"
else
range("b" & i) = "女士"
endif
next
end sub
Sub shishi2()
Dim i As Integer
For i = 2 To 10
If Range("b" & i).Offset(0, -1) = "男" Then
Range("b" & i) = "男生"
Else
Range("b" & i) = "女士"
End If
Next
End Sub
Sub shishi3()
Dim rng As Range
For Each rng In Range("b2:b10")
If rng.Offset(0, -1) = "男" Then
rng = "先生"
Else
rng = "女士"
End If
Next
End Sub
END(XLUP)
当我们通过for删除某一列当中的空单元格时,会从下向上循环,但我们不得不猜一个数或精确知道一共有多少行,无法自动判断,而end(xlup)可以实现这种精确的判断。
Sub shishi()
For i = 100 To 1 Step -1
If Range("a" & i) = "" Then
Range("a" & i).Select
Selection.EntireRow.Delete
End If
Next
End Sub
就可以改进成为:
Sub shishi()
For i = Range("a65536").End(xlUp).Row To 1 Step -1
If Range("a" & i) = "" Then
Range("a" & i).Select
Selection.EntireRow.Delete
End If
Next
End Sub
end(xlup)的意思就是向最下也就是65536开始向上数,一直数到有字符的那一行,那就是你单元格的边界。
entirerow
这个比较简单,就是选中一整行。
# 选中
range("a8").entirerow.select
# 删除
range("a8").entirerow.delete
resize
选区之后合并居中,a10的resizw(2,1)就是把我当成基准,向下选择2行,一列,注意并不是向右选择一列,然后规定自己就是2行一列,然后合并,merge就是合并居中的意思
Sub shishi()
Dim rng As Range
For Each rng In Range("a10:e10")
rng.Resize(2, 1).Merge
Next
End Sub
copy
这一个更简单了,我们可以复制一个范围到某一个单元格,但实际效果为是将这个范围释放到以目标单元格为开始的范围,而不是全都放到目标单元格里面,当然最好的用法是复制范围有多少,目标范围就写多少。
range("a7:e7").copy range("a8")
range("a7").entirerow.copy range("a12")
Sub shishi()
Range("a7:e7").Copy Range("a17:e17")
End Sub