文章提供了三个VBA函数,分别用于二维数组与一维嵌套数组的互相转换、二维数组转换为指定行数/列数的函数以及无限制的数组行列转置。这些函数适用于Excel中的数据操作,提高了处理效率并扩展了数组操作的可能性。 摘要由CSDN通过智能技术生成

1,二维数组与一维嵌套数组互相转换函数

《Excel·VBA数组组合函数、组合求和》
为测试2种数据结构遍历与求和速度之间的差异所写的转换函数

Function TransposeArr(data_arr, Optional res As Long = 1)
    '二维数组与一维嵌套数组互相转换函数,data_arr和返回数组从1开始计数
    Dim i&, j&, result
    If res = 1 Then  '转为一维嵌套数组
        ReDim result(1 To UBound(data_arr) - LBound(data_arr) + 1)
        For i = LBound(data_arr) To UBound(data_arr)
            temp = Application.index(data_arr, i)
            j = j + 1: result(j) = temp
        TransposeArr = result
    ElseIf res = 2 Then  '转为二维数组
        Dim rr&, cc&, r&, c&, tmp&
        rr = UBound(data_arr) - LBound(data_arr) + 1
        For Each a In data_arr
            tmp = UBound(a) - LBound(a) + 1
            If tmp > cc Then cc = tmp
        ReDim result(1 To rr, 1 To cc)
        For Each a In data_arr
            r = r + 1: c = 0
            For i = LBound(a) To UBound(a)
                c = c + 1: result(r, c) = a(i)
        TransposeArr = result
    End If
End Function

2,二维数组转换为指定行数/列数的函数

《Excel·VBA单元格区域行列数转换函数》

3,数组行列转置函数

工作表函数WorksheetFunction.Transpose返回转置单元格区域,即将一行单元格区域转置成一列单元格区域,反之亦然。
但据说能处理的数组元素字符长度最大为255,实测在Office2019和WPS2016并未发现该限制,2048个字符也可转置

Function TransposeArray(ByVal arr)
    '数组行列转置函数,同Transpose,但无最大65536行字符长度256的限制(实测没有256限制)
    '适用一维、二维数组,单元格单行、单列、多行多列,返回数组从1开始计数
    Dim i&, j&, result, n&, x&, y&
    If IsArray(arr) Then
        n = Array_Dim(arr)  '数组维数
        If n > 2 Then Debug.Print "仅适用一维、二维数组": Exit Function
        If n = 1 Then       '一维数组
            ReDim result(1 To UBound(arr) - LBound(arr) + 1, 1 To 1)
            For i = LBound(arr) To UBound(arr)
                x = x + 1: result(x, 1) = arr(i)
        ElseIf n = 2 Then   '二维数组,单行、单列、多行多列
            ReDim result(1 To UBound(arr, 2) - LBound(arr, 2) + 1, 1 To UBound(arr) - LBound(arr) + 1)
            For i = LBound(arr) To UBound(arr)
                x = x + 1: y = 0
                For j = LBound(arr, 2) To UBound(arr, 2)
                    y = y + 1: result(y, x) = arr(i, j)
        End If
    End If
    TransposeArray = result
End Function
Function Array_Dim(ByVal arr)
    '获取数组维数,利用报错判断
    Dim i&, j&
    On Error Resume Next
    If Not IsArray(arr) Then Array_Dim = -1: Exit Function
        i = i + 1: j = UBound(arr, i)
    Loop Until Err.Number <> 0
    Array_Dim = i - 1
End Function
Sub 转置测试()
    Dim arr(1 To 2, 1 To 2)
    arr(1, 2) = Application.Rept("$", 2048)
    a = WorksheetFunction.Transpose(arr)
    b = TransposeArray(arr)
    [a1].Resize(UBound(a), UBound(a, 2)) = a
    [a4].Resize(UBound(b), UBound(b, 2)) = b
End Sub

实测都可在工作表写入2048个字符

几个Excel vba示例文件. 包括行列转置,表格数据到数组,一维数组转二维数组,单列转多列等。均含示例数据,如: 250B的文本测试数据,晶振微调后的频率测试数据等。 另外还有EXCEL的常用命令语句精选。
Dim sr1 As Integer: sr1 = Selection.Item(1).Row Dim sr2 As Integer: sr2 = 1 Dim i As Long: i = 1 Do While i <= Selection.Count For j = ColumnStart(Selection) To ColumnEnd(Selection)
Sub 行转列() Dim dic As Object, i As Long, arr, K, T Set dic = CreateObject("Scripting.Dictionary") arr = Worksheets("源数据").[A1].CurrentRegion Worksheets("结果").Cells.Clear ReDim BRR(1 To UBound(arr), 1 To 3) '声明从2到N行,1到2列,如要添加输出字段请修改1 TO 5 For i = 2 To UBou
将一个 N×M(如 2*3)的矩阵转置,用一个函数实现。在主函数中用 scanf 函数输入 矩阵元素;将数组名作为函数实参,在执行函数过程中实现矩阵的转置函数调用结束后 在主函数中输出已转置的矩阵
2. 打开 Excel 文件,选择要读取的工作表。 3. 使用 Range 对象选择要读取的单元格范围。 4. 使用 For 循环遍历该范围内的所有单元格,并将其值存储到数组中。 下面是一个示例代码,可以将 Excel 工作表中的 A1:B10 范围内的内容转换VBA 数组: Dim myArray(1 To 10, 1 To 2) As Variant Dim i As Integer, j As Integer ' 打开 Excel 文件 Set myWorkbook = Workbooks.Open("C:\MyExcelFile.xlsx") ' 选择要读取的工作表 Set myWorksheet = myWorkbook.Worksheets("Sheet1") ' 使用 Range 对象选择要读取的单元格范围 Set myRange = myWorksheet.Range("A1:B10") ' 使用 For 循环遍历该范围内的所有单元格,并将其值存储到数组中 For i = 1 To 10 For j = 1 To 2 myArray(i, j) = myRange.Cells(i, j).Value Next j Next i ' 关闭 Excel 文件 myWorkbook.Close 这样,myArray 数组就包含了 A1:B10 单元格范围内的所有内容。