一、单元格常见表达方式

基础方式 扩展方式 备注
[A8]   不支持变量表达方式,不常用
Range("A8")

Range("A1:k1"),Range("A1:A8")
Range("A:A"), Range("A1").EntireRow

(1)支持变量表达方式"A"&i
(2)range(cells(1,1),cells(2,2))
Cells(8,1)  cells(序号)  支持变量表达方式cells(i,j)

  注:Range("A8")大多数时候可等价于Range("A8").value,即大多数时候写Range("A8")默认取的是Range("A8").value,但有少数例外:

(1)若Range("A8")中的value是“A公司”,而有一张工作表的名字也是“A公司”,则可用sheets(Range("A8").value)引用该表,但不能用sheets(Range("A8"))引用该表;
(2)For Each rng In range("a1:a8")     rng=1  next,该程序不能运行,因程序不知道rng是什么,有两种修改方式让程序知道rng代表单元格:(a)Dim rng as Range  (b)rng.value=1

 二、基于选定单元格进行重定位(1、2是定位用,3、4是重选区域

属性名 示例 备注
.Offset(x,y) Range("A1").Offset(2,1)
Range("A1:k1").Offset(2,1)
(1)(2,1)表示下移2行右移1列;若表示上移2行左移1列,则用(-2,-1)
(2)应用场景:For Each rng In Range("a1:a8")   if rng.Offset(0,1)="男" then rng="先生" else rng="女士" end if  根据单元格右边列的数据进行填充
.end(direction) Range("B4").End(xlUp)  演示“双击选中单元格的各边框后的反应”; 常用形式Range("B4").End(xlUp).offset(1,0) 
.EntireRow  Range("A1").EntireRow  Range("A1").entirerow是range对象,支持.select等方法;  Range("A1").row不是range对象,不支持对象方法,返回的是该区域的行号
.resize(x,y)  Range("A1").Resize(2, 3)  返回range对象,自"A1"单元格起下2行右3列的区域

三、其他一些基于单元格的操作
        

用录制宏观察语法:Select(选中)   Delete(删除)   Copy(复制)    ClearContents(清空)  AutoFilter(自动筛选)
Range("A1:D4").Copy     Destination:= Range("E5")   <=> Range("A1:D4").Copy Range("E5") 
Range(“a1:f100”).AutoFilter field:=4, Criteria1:=“五车间"

四、练习

(1)将“B2:F2”区域中每个单元格与其下面对应的一个单元格合并 (先用录制宏看看合并怎么写)
Dim rng as Range     for each rng in range("B2:F2")   rng.resize(2,1).merge  next

(2)将一张表中的数据,按某列(如部门)拆分到以部门命名的各张表中去

for 表2 to 表.count   (先将目标表除表头外清空call qk)  for 行2 to 末行  判断:if 行值 = 表名 then (计算目标表有多少行k  将该行copy到目标表的k+1行) next next

练习1:写清空的宏 sub qk()  .clearcontents
练习2:如何根据数据中的部门列,为每个部分新建一张表,并以公司名字命名?
  步骤1:将数据拆分到多张表:双重循环:每个表格与表名循环判断是否相同,相同则复制粘贴;
  步骤2:复制粘贴前需清空已有内容,因此写qk的宏,call qk
思考:上述方法运行速度太慢,若先筛选再copy,速度会大大提升,如何做?
  步骤3:用autofilter重写步骤1。
加大难度:上述步骤的前提是已建好表,现考虑自己根据源表新建表
  增加步骤:选择源表某列,依次循环单元格-->循环表名,看该单元格是否已有对应的表,以参数k记录-->若k表示无对应表,则add表
  增加步骤:进一步地,p=InputBox("请确认你要按第几列拆分:"),以按需拆分(将range改为cells,注意要dim p as integer
  增加步骤:按需拆分数据前,要将已有的表格全部删除(注意去掉alert);结束时:msgbox "已处理完毕"
  最后步骤:添加按钮,关联宏

注:有时不能定义inputbox的数据类型,希望输入的是整数,可用k= inputbox("请输入:")   val(k)将k强制转换为整数。