返回列表 上一主題 發帖

[發問] 陣列的值放置到excel的問題

回復 8# mpegwmvavi
一篇不錯的論述,謝謝你的堤供!

TOP

回復 1# PKKO
這是我個人的直覺處理方式,僅供你做參考用!
  1. Sub Ex2()
  2.     ' rng = [A5].CurrentRegion '假設UBOUND(RNG)=20 ,UBOUND(RNG,2)=10
  3.     ' Q1:  [A1].Resize(20, 10).Value = rng '我覺得這是將陣列資料放在excel非常快的方式,不曉得還有更快的嬤?
  4.     ' Q2 : 如果RNG這個陣列,我希望它由RNG(2 TO 16,3 TO 5) 放到 [A1].Resize(15, 3).Value這裡面該如何做?因為目前Q1程式碼無法達成這種放置方式
  5.     ' PS:有沒有答案不是迴圈的.CELLS(x,x)=RNG(X,X)的方式

  6.     Dim rng As Variant, MyArr As Variant, chars As String
  7.    
  8.     ' rng = [A30].CurrentRegion '假設UBOUND(RNG)=20 ,UBOUND(RNG,2)=10
  9.     rng = [A30].CurrentRegion
  10.    
  11.     [AA1].Resize(UBound(rng), UBound(rng, 2)) = rng
  12.     '  Q2 : 如果RNG這個陣列,我希望它由RNG(2 TO 16,3 TO 5)
  13.     chars = "A" & Chr(64 + 3 + 1) & (2 + 1) & ":" & "A" & Chr(64 + 3 + (5 - 3 + 1)) & (2 + (16 - 2 + 1))
  14.     MyArr = ThisWorkbook.Worksheets("工作表1").Range(chars).Value
  15.     [AA1:AJ20].Clear
  16.    
  17.     [A1:J20].Clear
  18.     [A1].Resize(15, 3) = MyArr
  19. End Sub
複製代碼

TOP

本帖最後由 c_c_lai 於 2015-6-22 17:50 編輯

回復 1# PKKO
回復 2# GBKEE
其實 GBKEE 先前的回覆 ( #2 ) 也是一個很切實際的範例,茲將它略略修改成 PKKO 的需求:
  1. Sub EX()
  2.     Dim Rng()
  3.         
  4.     ' rng = [A5].CurrentRegion '假設UBOUND(RNG)=20 ,UBOUND(RNG,2)=10
  5.     ' 假設 [A30] 區域為本案例陣列之暫存處裡區塊
  6.     ' [A30].Resize(UBound(Rng), UBound(Rng, 2)) = Rng
  7.    
  8.     chars = Chr(64 + 3 + 1) & (30 + 2) & ":" & Chr(64 + 3 + (5 - 3 + 1)) & (30 + 2 + (16 - 2))
  9.     With Range("A30").CurrentRegion
  10.         Rng = Range(chars).Value
  11.     End With
  12.     [A1].Resize(15, 3) = Rng
  13. End Sub
複製代碼

TOP

回復 13# PKKO
rng 本身存取之內容並非是目前指定的 {A30},那只是個舉例讓你易於理解,
就如你自訂的 RNG=[A5].CURRENTREGION 的位置一樣。此處,重點是在假設
rng 是個已存在值的 Variant 變數值。你希望它從 RNG(2 TO 16,3 TO 5)
"抽取出來" 然後能夠將其內容放置到 [A1].Resize(15, 3) 的位置上,而且
"PS:有沒有答案不是迴圈的.CELLS(x,x)=RNG(X,X)的方式"。這兒並無所謂的
"再一次性的放置到原本位置" 之處理。就如你自己先前舉例欲指定的 [A1]。

前提是要如何達成此構思:
1) 應用 "迴圈" 完成? (#13 - 1 迴圈法、2 INDEX法)。 抑或是
2) 先將 rng 內容至於某區塊,然後再將它依你的需求 (2 TO 16,3 TO 5)
   "抽取出來",置放入你指定的 [A1].Resize(15, 3) 的位置上。
   完成後再將暫存區清除。

至於快慢的問題,礙於個人設備之不同,需要你自行測試其差異性,
11#、12# (GBKEE) 的回覆已經給了你答案了。

TOP

        靜思自在 : 話多不如話少,話少不如話好。
返回列表 上一主題