Excel 手动转置

Excel 手动转置,excel,vba,transpose,Excel,Vba,Transpose,所以我注意到Application.transpose不超过255个字符,我的数组包含300个字符左右。是否有手动或其他方法来转置阵列?目前我使用 Function Transpose(arrIn) As String() Dim arrOut() As String, r As Long, ln As Long, i As Long ln = (UBound(arrIn) - LBound(arrIn)) + 1 ReDim arrOut(1 To ln, 1 To

所以我注意到Application.transpose不超过255个字符,我的数组包含300个字符左右。是否有手动或其他方法来转置阵列?目前我使用

Function Transpose(arrIn) As String()
    Dim arrOut() As String, r As Long, ln As Long, i As Long

    ln = (UBound(arrIn) - LBound(arrIn)) + 1
    ReDim arrOut(1 To ln, 1 To 1)
    i = 1
    For r = LBound(arrIn) To UBound(arrIn)
        arrOut(i, 1) = arrIn(r)
        i = i + 1
    Next r
    Transpose = arrOut

End Function
但我注意到这只需要1D数组并将其转置,但我必须能够从1D转换到2D,并用vise verse。有谁知道如何以有效的方式做到这一点

更新:这是我目前使用的,但我认为它需要一些改进

Function Transpose1(arrIn) As String()
    Dim arrOut() As String, r As Long, ln As Long, i As Long

    ln = (UBound(arrIn) - LBound(arrIn)) + 1
    ReDim arrOut(1 To ln)
    i = 1
    For r = LBound(arrIn) To UBound(arrIn)
        arrOut(i) = arrIn(r, UBound(arrIn, 2))
        i = i + 1
    Next r
    Transpose1 = arrOut

End Function


' From one 2 two
Function Transpose2(arrIn) As String()
    Dim arrOut() As String, r As Long, ln As Long, i As Long

    ln = (UBound(arrIn) - LBound(arrIn)) + 1
    ReDim arrOut(1 To ln, 1 To 1)
    i = 1
    For r = LBound(arrIn) To UBound(arrIn)
        arrOut(i, 1) = arrIn(r)
        i = i + 1
    Next r
    Transpose2 = arrOut

End Function

Application.transpose的迭代限制也为32768。在带有复制和粘贴特殊/转置的隐藏工作表中使用一个范围如何?可以有两个不同的函数吗?一个用于1D到2D,另一个用于2D到1D?@很抱歉回答得太晚,我不想再发展更多的工作表,因为如果用户更改工作簿或其他内容,这可能是“未知的”。@Aneta这是我到目前为止提出的,但我不喜欢这个解决方案。可以用我所拥有的更新上面的文本,希望有人能帮助我提高效率。