返回列表 上一主題 發帖

Array 陣列應用

Array 陣列應用

本帖最後由 hugh0620 於 2010-12-8 17:22 編輯

Dear 大大

     小弟對於陣列的應用方式不熟悉,所以,有些地方可以使用到陣列簡化程式碼的撰寫,卻寫了一堆程式碼,
       雖可以答達目的,還是請教大大如何使用array(陣列)來解決問題,也可以讓小弟吸收一下

    附件是我工作上的一個舉例
    1. Customer 資料有兩筆       (大約需放大至100筆)
    2. 狀態 資料有三筆
    3. AB欄是我展開後所需要的結果
   
    請大大們指導一下

    多資料匯整成在同data中.zip (989.78 KB)

回復 14# oobird


    謝謝大大詳細的說明

TOP

ReDim Preserve arr(1 To 2, 1 To m)
在迴圈內重新宣告陣列的大小。
假設不能預知程式運行的結果須要的陣列大小(雖然可以先算出來,但用動態陣列就不用)
每一次的迴圈m=m+1,所以這個陣列是不斷的長大的,必須要注意陣列只能改變最後一維的大小,這裡就是指第二維。所以最後要把這個陣列轉置寫入工作表中。

TOP

回復 12# oobird


    大大~ 我都有先使用F1看說明~ 可是....公司的電腦~ 在OFFICE的說明~ 無法跳出
         所以~ 才先請教大大們

         

TOP

dim i% = dim i as integer
把游標定在redim上按f1,看說明。
要學vba首先學如何看說明。

TOP

回復 10# hugh0620
Dim i As Integer
Integer 的型態宣告字元是百分比符號(%)。
Preserve 選擇性引數。當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字。

TOP

本帖最後由 hugh0620 於 2010-12-9 11:15 編輯

回復 9# oobird

       真的很感謝大大~ 真的是厲害~   
       最後再請教大大語法的意思
       1. Dim a, b, arr(), i%, j%, m%                   i%的意思是什麼呢? (我沒用過這樣的寫法,請大大教導一下)
           a = [e3:e5]
           b = [d3:d4]
          For i = 1 To UBound(b)
                    For j = 1 To UBound(a)
                    m = m + 1
       2.            ReDim Preserve arr(1 To 2, 1 To m)           ReDim 與 Preserve 的意思與用法??
                             arr(1, m) = a(j, 1)
                             arr(2, m) = b(i, 1)
           Next j, i
          [a3].Resize(m, 2) = Application.Transpose(arr)

TOP

03.a = [e3:e5]

04.b = [d3:d4]
改這兩行
a=range([e3],[e3].end(4))
b=range([d3],[d3].end(4))

TOP

回復 7# oobird


    謝謝大大的說明~

   另請教一個問題,若我資料是浮動的 (如customer 是未知筆數,狀態還是固定三種時)
        這樣大大程式碼跑起來就無法達到需求,這樣的問題該如何解決呢???

TOP

陣列的意義在於把資料存取置於記憶體中運算,運算完後再一次寫入工作表上,主要是縮短操作時間,程式碼不一定能精簡。
你的須求可以這樣:
  1. Private Sub CommandButton1_Click()
  2. Dim a, b, arr(), i%, j%, m%
  3. a = [e3:e5]
  4. b = [d3:d4]
  5. For i = 1 To UBound(b)
  6. For j = 1 To UBound(a)
  7. m = m + 1
  8. ReDim Preserve arr(1 To 2, 1 To m)
  9. arr(1, m) = a(j, 1)
  10. arr(2, m) = b(i, 1)
  11. Next j, i
  12. [a3].Resize(m, 2) = Application.Transpose(arr)
  13. End Sub
複製代碼

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題