Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将列向量转置为行向量_Arrays_Vba_Transpose - Fatal编程技术网

Arrays 将列向量转置为行向量

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

我本想面对一个简单的任务,但我发现了一些问题,无法将一维数组/列向量[0..n,0..0]转换为一维数组/行向量[0..0,0..n]

我尝试使用Application.WorksheetFunction.Transpose内置函数,但没有成功。它似乎只适用于nD数组/矩阵

背景是: -1D数组/列向量来自Recordset.GetRows方法(如果Recordset.Recordcount=1=>该数组是1D数组/列向量) -1D数组/行向量(通过转置函数获得)用于填充listbox对象的listbox.list属性

是否有一种聪明的方法来转换一维数组(从列向量到行向量,反之亦然)

提前感谢您的帮助

转置基于零的阵列
  • Application.Transpose
    的问题在于它将1D 任何基于的一行数组转换为基于2D的一列数组。现在,当您尝试向后转置时,您将得到一个基于1Done的单行数组(请参见
    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)
下一个
端接头
转置基于零的阵列
  • Application.Transpose
    的问题在于它将1D 任何基于的一行数组转换为基于2D的一列数组。现在,当您尝试向后转置时,您将得到一个基于1Done的单行数组(请参见
    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
扩散系数