当前位置: 主页 > JAVA语言

java二维数组行列互换-《ExcelVBA入门之数数你的单元格1》

发布时间:2023-07-06 16:05   浏览次数:次   作者:佚名

在《Excel VBA入门之数数你的单元格1》中我们已经了解到Excel单元格的模式是与数组对应的,而且行和列均对应数组中的一个维度,所以用二维数组描述Excel单元格区域是最合适不过了,但需注意的是:Excel单元格可接收或存放的数据格式很多:Byte、Double、String等等(如下图),

如何数excel单元格_java二维数组行列互换_数单元格的公式

所以如果我们想将单元格区域中的数据(如上图A1到C2)输送到变量,变量的类型必须为Variant才行(Variant型变量或Variant型数组),下图A1到C2的值将被一次性赋给所定义的Variant类型变量arr,arr则会在接收区域数据时自动转换为数组类型。

如何数excel单元格_数单元格的公式_java二维数组行列互换

数单元格的公式_如何数excel单元格_java二维数组行列互换

数组元素值的输出也很简单,数组名带上“坐标信息”即可,这与新老师在班级里的“行列交叉”点名完全一致!上图以Msgbox的方式展现了这种“点名”方法,对应的数组数据被正常取出。

现在我们来看看被定义的Variant变量arr赋值后的是否真的自动转换为了数组:

数单元格的公式_如何数excel单元格_java二维数组行列互换

如何数excel单元格_数单元格的公式_java二维数组行列互换

Typename测试输出为Variant(),确实是数组!这说明Variant变量在接收区域数据时会自动转换为数组类型!

在上述例子中,我们选取的单元格区域范围是A1到C2,共计2行3列。如果站在被赋值的arr数组角度看,自己的二维空间第一维度上有2个“元素”(对应2行),第二维度上有3个“元素”(对应3列)。如果还想了解数组每个维度首尾“元素”的“定位”(上下界),则需要借助VBA的LBound和UBound函数:

java二维数组行列互换_数单元格的公式_如何数excel单元格

java二维数组行列互换_如何数excel单元格_数单元格的公式

函数的第一个参数为数组名,第二个参数为维度。

数单元格的公式_如何数excel单元格_java二维数组行列互换

上图输出的结果在告诉我们:arr数组第一维度上元素“编号”从1到2共计2个java二维数组行列互换,第二维度上元素“编号”从1到3共计3个。当然,如果编号从0开始,则维度上的“元素”数将比尾元素编号多1。

java二维数组行列互换_数单元格的公式_如何数excel单元格

其实这两个统计数组上下界的函数还可以帮我们简单“探测”数组维数,比如让一个二维数组输出第三维度上的信息,程序将会发生错误:

如何数excel单元格_java二维数组行列互换_数单元格的公式

利用这个方法java二维数组行列互换,我们还可以验证单元格区域的一个本质属性:无论单元格区域是单行、单列、还是行列矩阵,均会被VBA视为二维数组(单个单元格除外)!

如何数excel单元格_数单元格的公式_java二维数组行列互换

数单元格的公式_java二维数组行列互换_如何数excel单元格

上图代码arr接收只接收了一行看起来只能算是一维的数据,输出却有第二维的信息!单列的验证有兴趣的朋友可以自己试试,但结论不会变:单元格区域即使只有单行或单列也是二维的!

最后,还是回来数单元格吧(减少注解供你细品)

java二维数组行列互换_如何数excel单元格_数单元格的公式