
wxiaow
2023/01/03阅读:22主题:兰青
单元格蕴含的设计哲学
单元格蕴含的设计哲学
在使用Excel处理数据的时候,经常会遇到了以下几种情况,使用频率也特别高:
1、对当前单元格进行定位,即获取当前单元格的行列编号;
2、记录当前工作表的记录条数,即获取当前工作表的最后一行单元格的行号;
3、选取当前单元格的上、下、左、右间隔的单元格,如获取当前单元格右侧间隔2个单位的新单元格;
4、重新框选单元格的大小,即扩大或缩小已选单元格区域的范围;
对单元格进行定位
Row属性
获取单元格所在的行号,或者获取单元格区域所在的行号。
# 单元格
range("A1").Row '获取A1单元格的行号 -> 1
[A1].Row '获取A1单元格的行号 -> 1
Cells(1,1).Row '获取A1单元格的行号 -> 1
# 单元格区域
range("A1:C9").Row '获取A1:C9单元格区域的行号,其实就是返回A1:C9左上角单元格A1的行号 -> 1
[A1:C9].Row '获取A1:C9单元格区域的行号,其实就是返回A1:C9左上角单元格A1的行号 -> 1
Column属性
# 单元格
range("A1").Column '获取A1单元格的列号 -> 1
[A1].Column '获取A1单元格的列号 -> 1
Cells(1,1).Column '获取A1单元格的列号 -> 1
# 单元格区域
range("A1:C9").Column '获取A1:C9单元格区域的列号其实就是返回A1:C9左上角单元格A1的列号 -> 1
[A1:C9].Column '获取A1:C9单元格区域的列号,其实就是返回A1:C9左上角单元格A1的列号 -> 1
注:
获取单元格区域所在的行号,返回单元格区域左上角的单元格的行号,列同上。
记录工作表中记录行数
获取工作表中记录的条数(注意工作表中不能有缺失的行),本质就是获取工作表中最后一行单元格的行编号。而获取单元格行编号在本文上半幅已经介绍过,但是如何找到工作表中最后一个单元格呢?这就需要使用到单元格的End
属性。
End属性
End
属性返回当前区域结尾处的单元格,等同于在源单元格按<End + 方向键(上、下、左、右)
>得到的单元格。
其实,使用End
属性来获取连续单元格区域的边界的频率非常高,一般情况下使用鼠标在单元格边框双击即可,如转到右边框,直接在单元格右边框待鼠标变成由四个箭头组成的十字形时,注意与四条直线组成的十字形相区分,负责就变成填充了,双击即可得到。
# 获取N12所处单元格区域的左边界单元格的行列编号
Range("N12").End(xlToLeft).Row
Range("N12").End(xlToLeft).Column
# 获取N12所处单元格区域的右边界单元格的行列编号
Range("N12").End(xlToRight).Row
Range("N12").End(xlToRight).Column
# 获取N12所处单元格区域的上边界单元格的行列编号
Range("N12").End(xlUp).Row
Range("N12").End(xlUp).Column
# 获取N12所处单元格区域的下边界单元格的行列编号
Range("N12").End(xlDown).Row
Range("N12").End(xlDown).Column
End
属性的具体参数如下所示。
序号 | 参数 | 说明 |
---|---|---|
1 | xlToLeft | 向左移动,等同于在源单元格 < Ctrl + ←> |
2 | xlToRight | 向右移动,等同于在源单元格 < Ctrl + → > |
3 | xlUp | 向上移动,等同于在源单元格 < Ctrl + ↑ > |
4 | xlDown | 向下移动,等同于在源单元格 < Ctrl + ↓ > |
Count属性
Count
属性记录当前单元格区域所包含单元格数量。
Range("a1:b5").Count '返回A1:B5单元格区域所包含单元格数量 -> 10
[A1:B5].Count
前面提到过单个单元格可以使用Cell表示,那么当前工作表所包含的所有单元格能否使用Cell表示呢?能否获取当前工作表所包含的所有行呢?能否获取当前工作表所包含的所有列呢?答案是肯定的。
Cells
表示当前活动工作表中所有的单元格,那么获取当前单元格所有行的表示为Cells.Rows
,获取当前单元格所有列的表示为Cells.Columns
,那么获取当前工作表最后一行单元格的行号的表示为Cells.Rows.Count
,那么获取当前工作表最后一行单元格的列号的表示为Cells.Columns.Count
。
注意:
*.xls
格式的工作表最大单元格行数为 65536,*.xlsx
格式的工作表最大单元格行数为1048576。
为什么要获取到到工作表中所包含的所有单元格区域呢?
因为现有的数据都是在不覆盖原有数据的情况下,在原有数据后面追加数据的,因此只有得到所有的数据才能知道数据最后一条数据在哪里,从而指导从哪一行开始追加数据,因此获取当前工作表最后一行数据的表示为,
Range("A" & Range("A"& Cells.Rows.Count).End(xlUp).Row + 1).Select
其中Cells.Rows.Count
得到整个工作表所能容纳的最大数据行数,即*.xls
格式的工作表最大单元格行数为 65536,*.xlsx
格式的工作表最大单元格行数为1048576;
Range("A"& Cells.Rows.Count)
获取整个工作表所能容纳的最大数据行数的第一列单元格,即Range("A65536")
或Range("A1048576")
;
Range("A"& Cells.Rows.Count).End(xlUp)
获得该工作表内最后一条数据;
Range("A"& Cells.Rows.Count).End(xlUp).Row
获得该工作表内最后一条数据所在的行;
Range("A" & Range("A"& Cells.Rows.Count).End(xlUp).Row + 1).Select
选择最后一条数据向下间隔一个单元的A列单元格。
Range("A" & Range("A"& Cells.Rows.Count).End(xlUp).Row + 1).Select ' 选择A29单元格
Range("B" & Range("B"& Cells.Rows.Count).End(xlUp).Row + 1).Select ' 选择B28单元格
Range("B" & Range("B1").End(xlDown).Row + 1).Select ' 选择B9单元格
注:
从上面的例子可知,End属性是以某一个既定单元格开始从上、下、左、右方向寻找单元格区域的边界,而改边界是以空单元格来划分的。
作者介绍

wxiaow
把学的写出来,是方法,也是一种态度。