Board logo

標題: [發問] 如何將陣列分區段整欄或者整列的寫入儲存格 [打印本頁]

作者: sptakung1    時間: 2012-9-15 00:30     標題: 如何將陣列分區段整欄或者整列的寫入儲存格

請教各位先進,該如何將程式中陣列DATA的部份資料整欄寫入儲存格內,小弟不知在觀念上哪裡錯誤了,請各位先進教導。
  1. Sub test()
  2. Dim Rng As Range, data(33, 24), i%, j%
  3. With Sheet1
  4. For i = 1 To 33
  5.     For j = 1 To 12
  6.         data(i, j) = Cells(i + 5, j + 8)
  7.     Next
  8. Next
  9. For i = 1 To 33
  10.     For j = 13 To 24
  11.         data(i, j) = Cells(i + 50, j - 4)
  12.     Next
  13. Next
  14. End With
  15. Set Rng = Sheet2.Range("B1:D24")
  16. For i = 1 To Rng.Columns.Count
  17. Rng.Columns(i) = Application.Index(Application.Transpose(data), , i)
  18. Next

  19. End Sub
複製代碼

作者: luhpro    時間: 2012-9-15 03:22

請教各位先進,該如何將程式中陣列DATA的部份資料整欄寫入儲存格內,小弟不知在觀念上哪裡錯誤了,請各位先 ...
sptakung1 發表於 2012-9-15 00:30
  1. Sub Ex()
  2.   Dim Rng As Range, data(33, 24), i%, j%
  3.   With Sheet1
  4.     For i = 0 To 32
  5.       For j = 0 To 11
  6.         data(i, j) = .Cells(i + 6, j + 9)
  7.       Next
  8.     Next
  9.     For i = 0 To 32
  10.       For j = 12 To 23
  11.         data(i, j) = .Cells(i + 51, j - 3)
  12.       Next
  13.     Next
  14.   End With

  15.   With Sheet2
  16.     .Select
  17.     .[A2].Resize(33, 24) = data
  18.     .Range(Columns(1), Columns(24)).AutoFit
  19.   End With
  20.   
  21.   With Sheet3
  22.     .Select
  23.     .[B1].Resize(24, 33) = Application.Transpose(data)
  24.     .Range(Columns(2), Columns(34)).AutoFit
  25.   End With
  26.   
  27. End Sub
複製代碼
[attach]12502[/attach]
作者: sptakung1    時間: 2012-9-15 08:43

[attach]12503[/attach
luhpro 大大您快速的回覆,使我由衷的感激。由於我的敘述語焉不詳造成您的誤會,在此向您致意。我的需求是依據附件(test2.xls)中報表1的資料,來達成報表2及報表3的需求,若是可行的話請再幫忙一下,謝謝您。致上我最大的祝福希望您時時吉祥如意。
作者: sptakung1    時間: 2012-9-15 13:51

也許有大大會質疑,其實如上樓所述的需求,只要簡單的copy就可以了,幹嘛如此大費周章呢?其主因係吾人一直以來對陣列的操作不甚熟稔想藉此練習使用index,TRANSPOSE等函數。經過一早上的摸索,似乎已有些斬獲,目前可得到自己的需求,但存有小bug。情形是依如下的代碼執行後會造成sheet3的b欄形成空白,但我明明是從b1開始的,不知有哪位大大可為我解惑。謝謝!
  1. Sub test1()  '輸出前3列
  2. Dim rng1 As Range, data(33, 24), i%, j%
  3. With Sheet1
  4. .Select      '之前因少了這列,使得結果都沒反應
  5. For i = 1 To 33
  6.     For j = 1 To 12
  7.         data(i, j) = Cells(i + 5, j + 8)
  8.     Next
  9. Next
  10. For i = 1 To 33[attach]12508[/attach]
  11.     For j = 13 To 24
  12.         data(i, j) = Cells(i + 50, j - 4)
  13.     Next
  14. Next
  15. End With
  16. With Sheet3
  17. .Select
  18. Set rng1 = .Range("B1:AI3")
  19. End With
  20. For i = 1 To rng1.Rows.Count
  21. rng1.Rows(i) = Application.Index(Application.Transpose(data), i + 1)
  22. Next

  23. End Sub
複製代碼

作者: chin15    時間: 2012-9-15 14:31

定義data(33, 24)陣列是從0開始
而載入數據時
For i = 1 To 33
    For j = 1 To 12
        data(i, j) = Cells(i + 5, j + 8)
這樣 data(0,0) 沒有賦值,這是b欄空白的原因
可以改為data(1 To 33, 1 To 24)
或前面加上Option Base 1強制陣列下標從1開始
作者: sptakung1    時間: 2012-9-15 16:22

回復 5# chin15
chin大大非常感謝,代碼經如下修改已能正常運作,衷心感激。至上我最深的祝福
TEST3.xls代碼修改如下:
1.代碼最上方加入Option Base 1
2.#18  Set rng1 = .Range("B1:AI3")  AI3改成AH3
3.#21  rng1.Rows(i) = Application.Index(Application.Transpose(data), i + 1) I+1改成I





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