✔ 最佳答案
這裡做了三個 vba 程序:
1,用 vba 產生按鈕
2,用 vba 刪除按鈕
3,主程序,篩選數據,並輸出。
請將所有程序放入主工作表的 "私家辦公室" 。
看圖:
圖片參考:
http://w2.hkmalls.com/rc/126b/capture.jpg
請將主工作表定名為 "MAIN" ,否則將程序裡面的 "MAIN" 改為實際的主表名。
Private Sub my_output_bttn_Click()
'按鈕被按就會呼叫此程式。
Dim arr(1 To 10000, 1 To 4) ' 主陣列,儲存資料
Dim arr2(1 To 10000, 1 To 3) ' 副陣列,儲存從主陣列篩選出來的資料
Dim R%, endRow%, i%, atY%, aCount%
' ///////////////////////////////////////////////
' 從主工作表找出有效資料,存入陣列 arr
Sheets("MAIN").Select
endRow = Cells(Rows.Count, 1).End(xlUp).Row
For R = 2 To endRow
modl = Trim(Cells(R, 1).Value)
quan = Trim(Cells(R, 2).Value)
tout = Trim(Cells(R, 4).Value)
grup = Trim(Cells(R, 5).Value)
If InStr("g: 1101RI1 1501CS1 1501PA7", UCase(grup)) < 2 Then GoTo 222
'切勿刪掉 "g: "
atY = 0
For i = 1 To aCount
If arr(i, 2) = modl Then atY = i
Next
If atY = 0 Then
aCount = aCount + 1
atY = aCount
arr(atY, 1) = aCount
arr(atY, 2) = modl
End If
If LCase(tout) = "today out" Then
arr(atY, 3) = arr(atY, 3) + Evaluate(quan)
ElseIf UCase(tout) = "NO MOVE" Then
arr(atY, 4) = arr(atY, 4) + Evaluate(quan)
Else
Cells(R, 4).Select
MsgBox "Error found!" & Chr(13) & Chr(13) & "Neither [today out] nor [NO MOVE]" & Chr(13) & Chr(13) & "program ceased"
Exit Sub
End If
222:
Next
' ///////////////////////////////////////////////
' 從陣列 arr 篩選 "today out" 載入陣列 arr2
Erase arr2 ' 清空陣列 arr2
atY = 0
For i = 1 To aCount
If arr(i, 3) > 0 Then ' 陣列arr 列i元素3(today out) 有數就抄入 arr2
atY = atY + 1
arr2(atY, 1) = atY
arr2(atY, 2) = arr(i, 2)
arr2(atY, 3) = arr(i, 3)
End If
Next
Sheets("Sheet1").[A5].Resize(10000, 3).ClearContents '清空這範圍舊資料
Sheets("Sheet1").[A5].Resize(atY, 3) = arr2 ' 寫入陣列 arr2
Sheets("Sheet3").[A5].Resize(10000, 3).ClearContents
Sheets("Sheet3").[A5].Resize(atY, 3) = arr2
' ///////////////////////////////////////////////
' 從陣列 arr 篩選 "NO MOVE" 載入陣列 arr2
( 中略若干行 )
End Sub
Yahoo 字數限制,不能盡貼。
請到此處抄回
2009-09-20 08:26:09 補充:
程式寫的很簡單(所以很長),方便你將來自行修改,增減。
我模擬5000列資料,執行在0.5妙以下,工作正常。
你測試後發現問題請來信修正。