工作表函数WorksheetFunction.Transpose返回转置单元格区域,即将一行单元格区域转置成一列单元格区域,反之亦然。
但据说能处理的数组元素字符长度最大为255,实测在Office2019和WPS2016并未发现该限制,2048个字符也可转置
Function TransposeArray(ByVal arr)
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 单元格范围内的所有内容。