返回列表 上一主題 發帖

Array 陣列應用

Array 陣列應用

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

Dear 大大

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

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

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

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

回復 1# hugh0620


   大大們

   後來我看到一些大大以前寫的方式,幫忙看一下有沒有需要改進的  (若是陣列中的資料有幾十筆時,有否更好的方式呢?????)
    N = 0
     I = 0
     Do Until Sheet1.Cells(3 + I, 4) = ""
           For Each R In Array("F", "O", "P")
               Sheet1.Cells(3 + N, 1) = R
               Sheet1.Cells(3 + N, 2) = Sheet1.Cells(3 + I, 4)
               N = N + 1
           Next
         I = I + 1
     Loop

TOP

這個不是解決過了嗎?怎麼又來一次?

TOP

回復 3# oobird


    大大 這是我第一次發       我在發之前有現找尋過後
            沒有查到相關的資料   我才發帖
        請勿誤會

TOP

那麼應該是你傳錯文件了。
你的文件中並沒有你說的
1. Customer 資料有兩筆       (大約需放大至100筆)
    2. 狀態 資料有三筆
    3. AB欄是我展開後所需要的結果

TOP

回復 5# oobird


    抱歉唷~ 是我傳錯檔~ 讓大大誤會了~
    重傳一次
    array 陣列應用.rar (7.76 KB)

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

回復 7# oobird


    謝謝大大的說明~

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

TOP

03.a = [e3:e5]

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

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

        靜思自在 : 人生沒有所有權,只有生命的使用權。
返回列表 上一主題