Arrays 将列向量转置为行向量
我本想面对一个简单的任务,但我发现了一些问题,无法将一维数组/列向量[0..n,0..0]转换为一维数组/行向量[0..0,0..n] 我尝试使用Application.WorksheetFunction.Transpose内置函数,但没有成功。它似乎只适用于nD数组/矩阵 背景是: -1D数组/列向量来自Recordset.GetRows方法(如果Recordset.Recordcount=1=>该数组是1D数组/列向量) -1D数组/行向量(通过转置函数获得)用于填充listbox对象的listbox.list属性 是否有一种聪明的方法来转换一维数组(从列向量到行向量,反之亦然) 提前感谢您的帮助转置基于零的阵列Arrays 将列向量转置为行向量,arrays,vba,transpose,Arrays,Vba,Transpose,我本想面对一个简单的任务,但我发现了一些问题,无法将一维数组/列向量[0..n,0..0]转换为一维数组/行向量[0..0,0..n] 我尝试使用Application.WorksheetFunction.Transpose内置函数,但没有成功。它似乎只适用于nD数组/矩阵 背景是: -1D数组/列向量来自Recordset.GetRows方法(如果Recordset.Recordcount=1=>该数组是1D数组/列向量) -1D数组/行向量(通过转置函数获得)用于填充listbox对象的li
的问题在于它将1D 任何基于的一行数组转换为基于2D的一列数组。现在,当您尝试向后转置时,您将得到一个基于1Done的单行数组(请参见Application.Transpose
)transpose
- 切换转置将“识别”阵列是垂直还是垂直
水平,并将相应地进行转置(请参见
)。它将只接受基于零的数组toggleTransposeTest
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose: Transposes a 1D zero-based (one-row) array '
' to a 2D zero-based one-column array and vice versa. '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function toggleTranspose0(SourceArray As Variant) As Variant
Dim Transpose, i As Long
On Error Resume Next
i = UBound(SourceArray, 2)
If Err.Number <> 0 Then
On Error GoTo 0
If LBound(SourceArray) <> 0 Then Exit Function
GoSub transposeVertical
Else
If i <> 0 Then Exit Function
GoSub transposeHorizontal
End If
toggleTranspose0 = Transpose
Exit Function
transposeVertical:
ReDim Transpose(UBound(SourceArray), 0)
For i = 0 To UBound(SourceArray)
Transpose(i, 0) = SourceArray(i)
Next i
Return
transposeHorizontal:
ReDim Transpose(UBound(SourceArray))
For i = 0 To UBound(SourceArray)
Transpose(i) = SourceArray(i, 0)
Next i
Return
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub toggleTransposeTest()
Dim v, t, i As Long
ReDim v(9)
' Populate data to 1D array.
For i = 0 To 9
v(i) = i + 1
Next i
' Transpose to 2D zero-based one-column array.
t = toggleTranspose0(v)
For i = 0 To 9
Debug.Print t(i, 0)
Next i
' Transpose back to 1D array.
v = toggleTranspose0(t)
For i = 0 To 9
Debug.Print v(i)
Next i
End Sub
Sub TransposeIssue()
Dim v, t, i As Long
ReDim v(9)
' Populate data to 1D zero-based one-row array.
For i = 0 To 9
v(i) = i + 1
Debug.Print i, v(i)
Next i
' Convert 1D array to a 1D one-based one-row array.
t = Application.Transpose(Application.Transpose(v))
For i = 1 To 10
Debug.Print i, t(i)
Next
' Transpose to 2D one-based one-column array.
t = Application.Transpose(v)
For i = 1 To 10
Debug.Print i, t(i, 1)
Next
' Transpose to 1D one-based one-row array.
v = Application.Transpose(t)
For i = 1 To 10
Debug.Print i, v(i)
Next
End Sub
选项显式
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'用途:转置一维零基(一行)数组'
'到二维基于零的单列数组,反之亦然。'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
函数将Transpose0(SourceArray作为变量)切换为变量
黯淡的转置,我如长
出错时继续下一步
i=UBound(源阵列,2)
如果错误号为0,则
错误转到0
如果LBound(SourceArray)为0,则退出函数
戈苏布转位
其他的
如果i为0,则退出函数
GoSub水平转置
如果结束
toggleTranspose0=转置
退出功能
交叉的:
重拨转置(UBound(SourceArray),0)
对于i=0到UBound(SourceArray)
转置(i,0)=源数组(i)
接下来我
返回
转置水平:
ReDim转置(UBound(源阵列))
对于i=0到UBound(SourceArray)
转置(i)=源数组(i,0)
接下来我
返回
端函数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
子开关TransportSetTest()
暗v,t,i与长
雷迪姆五号(9)
'将数据填充到1D数组。
对于i=0到9
v(i)=i+1
接下来我
'转置到二维基于零的单列数组。
t=切换转置0(v)
对于i=0到9
调试。打印t(i,0)
接下来我
'调回1D数组。
v=切换转置0(t)
对于i=0到9
调试打印v(i)
接下来我
端接头
子传输问题()
暗v,t,i与长
雷迪姆五号(9)
'将数据填充到1D基于零的单行数组。
对于i=0到9
v(i)=i+1
调试。打印i,v(i)
接下来我
'将1D数组转换为基于1D的单行数组。
t=应用程序转置(应用程序转置(v))
对于i=1到10
调试。打印i,t(i)
下一个
'转换为基于二维一列数组。
t=应用程序转置(v)
对于i=1到10
调试。打印i,t(i,1)
下一个
'转换为1D基于一行的数组。
v=应用程序转置(t)
对于i=1到10
调试。打印i,v(i)
下一个
端接头
转置基于零的阵列
的问题在于它将1D 任何基于的一行数组转换为基于2D的一列数组。现在,当您尝试向后转置时,您将得到一个基于1Done的单行数组(请参见Application.Transpose
)transpose
- 切换转置将“识别”阵列是垂直还是垂直
水平,并将相应地进行转置(请参见
)。它将只接受基于零的数组toggleTransposeTest
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose: Transposes a 1D zero-based (one-row) array '
' to a 2D zero-based one-column array and vice versa. '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function toggleTranspose0(SourceArray As Variant) As Variant
Dim Transpose, i As Long
On Error Resume Next
i = UBound(SourceArray, 2)
If Err.Number <> 0 Then
On Error GoTo 0
If LBound(SourceArray) <> 0 Then Exit Function
GoSub transposeVertical
Else
If i <> 0 Then Exit Function
GoSub transposeHorizontal
End If
toggleTranspose0 = Transpose
Exit Function
transposeVertical:
ReDim Transpose(UBound(SourceArray), 0)
For i = 0 To UBound(SourceArray)
Transpose(i, 0) = SourceArray(i)
Next i
Return
transposeHorizontal:
ReDim Transpose(UBound(SourceArray))
For i = 0 To UBound(SourceArray)
Transpose(i) = SourceArray(i, 0)
Next i
Return
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub toggleTransposeTest()
Dim v, t, i As Long
ReDim v(9)
' Populate data to 1D array.
For i = 0 To 9
v(i) = i + 1
Next i
' Transpose to 2D zero-based one-column array.
t = toggleTranspose0(v)
For i = 0 To 9
Debug.Print t(i, 0)
Next i
' Transpose back to 1D array.
v = toggleTranspose0(t)
For i = 0 To 9
Debug.Print v(i)
Next i
End Sub
Sub TransposeIssue()
Dim v, t, i As Long
ReDim v(9)
' Populate data to 1D zero-based one-row array.
For i = 0 To 9
v(i) = i + 1
Debug.Print i, v(i)
Next i
' Convert 1D array to a 1D one-based one-row array.
t = Application.Transpose(Application.Transpose(v))
For i = 1 To 10
Debug.Print i, t(i)
Next
' Transpose to 2D one-based one-column array.
t = Application.Transpose(v)
For i = 1 To 10
Debug.Print i, t(i, 1)
Next
' Transpose to 1D one-based one-row array.
v = Application.Transpose(t)
For i = 1 To 10
Debug.Print i, v(i)
Next
End Sub
选项显式
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'用途:转置一维零基(一行)数组'
'到二维基于零的单列数组,反之亦然。'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
函数将Transpose0(SourceArray作为变量)切换为变量
黯淡的转置,我如长
出错时继续下一步
i=UBound(源阵列,2)
如果错误号为0,则
错误转到0
如果LBound(SourceArray)为0,则退出函数
戈苏布转位
其他的
如果i为0,则退出函数
GoSub水平转置
如果结束
toggleTranspose0=转置
退出功能
交叉的:
重拨转置(UBound(SourceArray),0)
对于i=0到UBound(SourceArray)
转置(i,0)=源数组(i)
接下来我
返回
转置水平:
ReDim转置(UBound(源阵列))
对于i=0到UBound(SourceArray)
转置(i)=源数组(i,0)
接下来我
返回
端函数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
子开关TransportSetTest()
暗v,t,i与长
雷迪姆五号(9)
'将数据填充到1D数组。
对于i=0到9
v(i)=i+1
接下来我
'转置到二维基于零的单列数组。
t=切换转置0(v)
对于i=0到9
调试。打印t(i,0)
接下来我
'调回1D数组。
v=切换转置0(t)
对于i=0到9
调试打印v(i)
接下来我
端接头
子传输问题()
暗v,t,i与长
雷迪姆五号(9)
'将数据填充到1D基于零的单行数组。
对于i=0到9
v(i)=i+1
扩散系数