我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!

你真的了解数组的维度吗?只有非常清楚的了解数组的结构才能正确地把其写入到Sheet中去。

看看下面两种不同的表达方法所产生的数组有什么区别呢?

Sub test()Dim arr1, arr2, arr3'第一种表达方式arr1 = [a2:b4] '第二种表达方式arr2 = Array(Array("A001", 100), Array("A002", 200), Array("A003", 300)) arr3 = Application.Transpose(Application.Transpose(arr2))End Sub

向右滑动可以查看完整代码。

arr1 = [a2:b4],本地窗口中arr1是这样的:

java 一维数组转换为字符串 有间隔符 一维数组转二维数组 java_js二维数组转一维数组

通过本地窗口我们可以看出,arr1是典型二维数组,注意观察数组的维度以及结构。

arr2 = Array(Array("A001", 100), Array("A002", 200), Array("A003", 300)),本地窗口中arr2是这样的:

java 一维数组转换为字符串 有间隔符 一维数组转二维数组 java_vb datatable转二维数组_02

仔细与arr1对比,发现arr2并非二维数组,而是一个一维数组,一维数组的每个元素里又包含两个元素。

同样是表达一个区域的数据,表达方式不同,产生的数组维度也不同。

如果想把arr1输出到Sheet中,要先选定一个与数组的结构相符的区域才行,即3行2列的区域,那怎么把arr2也输出到一个3行2列的区域呢?

要先把arr2用一个工作表函数Transpose转置两次以后才可以。

比如:

arr3 = Application.Transpose(Application.Transpose(arr2))

得到的arr3就可以直接输出到一个3行2列的区域。

本地窗口中arr3如下:

java 一维数组转换为字符串 有间隔符 一维数组转二维数组 java_vb datatable转二维数组_03

搞明白了上面的道理后,我们看看它在实际案例中的运用。

案例:

java 一维数组转换为字符串 有间隔符 一维数组转二维数组 java_vb datatable转二维数组_04

比如上面,要合并三份格式相同的表。我们把每个表里的每条数据直接读取到一个新的数组,然后经过两次转置后输出,就可以得到汇总的数据了。

具体代码如下:

Sub 汇总()Dim ws As Worksheet, rng1 As Range, i%, arr1(), n%, ts%, arr2'先清除汇总表里A到C列的内容Columns("a:c").ClearContents'循环出各个工作表wsFor Each ws In Worksheets    '如果循环出的工作表名称不等于当前工作表(汇总)的名称    If ws.Name <> ActiveSheet.Name Then    '得到ws中A列除了表头以外的数据区域rng1    Set rng1 = ws.Range("a2", ws.[a2].End(xlDown))        '计算出rng1的行数ts,并且做累加        ts = ts + rng1.Rows.Count        '重新声明动态数组arr1        ReDim Preserve arr1(1 To ts)        '在每个ws中的rng1中进行循环        For i = 1 To rng1.Rows.Count        n = n + 1        '把循环出的每行数据装进arr1中        arr1(n) = ws.Cells(i + 1, 1).Resize(1, 3)        Next    End IfNext'因为arr1为一维数组,用transpose转置两次后成为2维数组arr2 = Application.Transpose(Application.Transpose(arr1))'随便选一份ws的表头复制到汇总表里[a1:c1] = Worksheets("一办").[a1:c1].Value'把得到的新数组复制到汇总表中尺寸相同的区域里[a2].Resize(ts, 3) = arr2End Sub

向右滑动可以查看完整代码。

上述案例中把数据装入数组时:

arr1(n) = ws.Cells(i + 1, 1).Resize(1, 3),得到的arr1是一维数组,经过两次转置后即可得到我们想的结果。

本节知识点:

1、一维数组转二维数组。

本节的分享就到这里,鹏哥祝大家每天都有进步。

VBA其实并不难