Board logo

標題: [發問] Array矩陣,如何取出AR(1)裡的第5個值等等 [打印本頁]

作者: yangjie    時間: 2015-6-12 12:18     標題: Array矩陣,如何取出AR(1)裡的第5個值等等

請教大大:
個人在練習矩陣用法
Sub Transpose2()
    Dim AR()
    ReDim Preserve AR(k)
        AR(k) = Sheets("test1").Range(Cells(1, 1), Cells(10, 1)).Value
        AR(0) = Sheets("test1").Range(Cells(1, 1), Cells(10, 1)).Value
        k = k + 1
        ReDim Preserve AR(k)
        AR(1) = Sheets("test1").Range(Cells(1, 2), Cells(10, 2)).Value
        k = k + 1
        ReDim Preserve AR(k)
        AR(2) = Sheets("test1").Range(Cells(1, 3), Cells(10, 3)).Value
        k = k + 1
        ReDim Preserve AR(k)
     With Sheets("test1")
        AR = Application.Transpose(Application.Transpose(AR))    此句error   why?

        .Cells(1, 10).Resize(UBound(AR(0))) = AR(0)
        .Cells(1, 11).Resize(UBound(AR(1))) = AR(1)
        .Cells(1, 12).Resize(UBound(AR(2))) = AR(2)
        .Cells(1, 13).Resize(UBound(AR(3))) = AR(3)
    End With
End Sub
請教大大
        又如何取出AR(1)裡的第5個值
       又如何取出AR(2)裡的第6個值等等??
作者: lpk187    時間: 2015-6-12 13:25

回復 1# yangjie

你寫的語法和架構都不對!
程式也不用這樣落落長!
  1. Sub Transpose2()
  2. AR = Sheets("test1").Range(Cells(1, 1), Cells(10, 3)).Value'下面註解的部份是你原有的程式,只要這一列就可以完成
  3.         'AR(k) = Sheets("test1").Range(Cells(1, 1), Cells(10, 1)).Value
  4.         'AR(0) = Sheets("test1").Range(Cells(1, 1), Cells(10, 1)).Value
  5.         'k = k + 1
  6.         'ReDim Preserve AR(k)
  7.         'AR(1) = Sheets("test1").Range(Cells(1, 2), Cells(10, 2)).Value
  8.        ' k = k + 1
  9.         'ReDim Preserve AR(k)
  10.         'AR(2) = Sheets("test1").Range(Cells(1, 3), Cells(10, 3)).Value


  11. Cells(1, 10).Resize(3, UBound(AR, 1)) = ""     '清除
  12. Cells(5, 10).Resize(UBound(AR, 1), 3) = ""'   '清除
  13. Cells(1, 10).Resize(3, UBound(AR, 1)) = Application.Transpose(AR)'這列是從J1欄到S3,往橫的方向貼上
  14. Cells(5, 10).Resize(UBound(AR, 1), 3) = AR'這列是從J5到L14和原來的方向一樣
  15. End Sub
複製代碼

作者: lpk187    時間: 2015-6-12 13:29

回復 1# yangjie
如下圖顯示
    [attach]21169[/attach]
作者: lpk187    時間: 2015-6-12 13:42

回復 1# yangjie

再貼一張解釋給你
    [attach]21170[/attach]
作者: yangjie    時間: 2015-6-12 14:18

回復 3# lpk187
謝謝lpk187
AR = Sheets("test1").Range(Cells(1, 1), Cells(10, 3)).Value
Cells(5, 10).Resize(UBound(AR, 1), 3) = "" '   '清除
Cells(5, 10).Resize(UBound(AR, 1), 3) = AR
if ......
     若整個判讀之後下,
     需要在cells(5,15)下寫入B欄之值
endif
    應如何寫語法
作者: lpk187    時間: 2015-6-12 14:51

本帖最後由 lpk187 於 2015-6-12 14:53 編輯

回復 5# yangjie


    ar = Sheets("test1").Range(Cells(1, 1), Cells(10, 3)).Value '讀取A1到C10
For N = 1 To 10
    If .....then
          Cells(5 , 15) = ar(N, 2) '這裡的 ar(N, 2)是指B欄的第N列
   end if
Next
作者: yangjie    時間: 2015-6-12 15:11

回復 6# lpk187

謝謝
作者: lpk187    時間: 2015-6-12 15:12

回復 5# yangjie

其實不要把陣列認為很複雜,以儲存格來說陣列,儲存格就是一個2維陣列,所以當我們把範圍設成陣列時也是一個2維陣列
例如 ar(列,欄)
但假若只是有1維陣列
就不能直接用像ar=range("A1:C10")這種方式去讀取
方式如下:
讀到一維陣列
Dim ar(1 to 10)
for N=1 to 10
    ar(N)=cells(N,1)
next
...
寫入到儲存格
for x=1 to 10
cells(x,10)=ar(X)
next
作者: yangjie    時間: 2015-6-14 20:30

回復 8# lpk187
謝謝指導




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