Board logo

標題: [發問] Application.Transpose() 可以處理資料轉置的陣列長度 ? [打印本頁]

作者: Scott090    時間: 2014-12-4 07:51     標題: Application.Transpose() 可以處理資料轉置的陣列長度 ?

請教先進

下列程式執行時顯示 類別不合 錯誤

sub ex()
     Dim Arr()
     Dim NumOfRow as Long      
'假如 NumOfRow 超出 2^16 (=65536),取入資料轉置,下一程式碼執行時就顯示錯誤
      Arr = Application.Transpose(Range("A2").resize(NumOfRow,1).value)
End sub

Excel 版本 2010
工作表內資料超過10萬筆,如不全部以 For ....   Next 方法,如何把資料快速全部取入陣列來處理,再以陣列回置給工作表?
作者: stillfish00    時間: 2014-12-4 10:47

回復 1# Scott090
確實transpose有陣列大小限制,
可以自己寫轉置的Function:
  1. Function MyTranspose(arInput)
  2.   Dim i As Long, j As Long
  3.   Dim arRetn
  4.   
  5.   If LBound(arInput) <> 1 Or LBound(arInput, 2) <> 1 Then Err.Raise vbObjectError + 9999, , "The low bound of input array should be 1."
  6.   
  7.   If UBound(arInput) <= 65536 And UBound(arInput, 2) <= 65536 Then
  8.     MyTranspose = Application.Transpose(arInput)
  9.   Else
  10.     If UBound(arInput, 2) = 1 Then
  11.       ReDim arRetn(1 To UBound(arInput))
  12.       For i = 1 To UBound(arInput)
  13.         arRetn(i) = arInput(i, 1)
  14.       Next
  15.     Else
  16.       ReDim arRetn(1 To UBound(arInput, 2), 1 To UBound(arInput))
  17.       For i = 1 To UBound(arInput)
  18.         For j = 1 To UBound(arInput, 2)
  19.           arRetn(j, i) = arInput(i, j)
  20.         Next
  21.       Next
  22.     End If
  23.     MyTranspose = arRetn
  24.   End If
  25. End Function
複製代碼

作者: Scott090    時間: 2014-12-4 20:18

回復 2# stillfish00


    非常感恩 大俠提供的方法與用心的函數
這個已解決問題

再次的謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)