返回列表 上一主題 發帖

VBA如何將不同資料的區域抓出分類?

回復 3# handsometrowa
不要喪氣,我有這能力為你解答,是費了很多時間所磨練出來的.
有問題歡迎提問,多看,多練習範例,會進步的

Sub Main()  
建立資料庫範圍   

Sub 篩選程式(Sh As String)  
依傳送的參數Sh(工作表名稱)指定到工作表物件: With Sheets(Sh)
修訂進階篩選, CriteriaRange[篩選準則],欄位名稱( "到期月份","買賣權" ),
                                     [篩選準則],欄位 設立條件 .[L2] = IIf(Sh = "買權", "Call", "Put")

Sub 月份契約篩選程式(Sh As String)
依照Sh="賣權"或是Sh="買權",新增同一月份的契約的工作表
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

深深的感謝版主,說真的我看到的時候昏了....
我腦中的想法怎麼寫出來這麼複雜
我的功力真的離這個階段好遠好遠...

可否請版主跟我解釋一下 大致上的流程  
您是怎麼構思  又怎麼處理這些問題的先來後到的@@?

TOP

回復 1# handsometrowa
資料區域 變成紅色的字樣 ,錄製巨集試試看
  1. Option Explicit
  2. Dim Rng As Range, AR()
  3. Sub Main()
  4.     AR = Array("到期月份", "履約價", "買賣權", "成交量", "未沖銷契約量")
  5.     With Sheets("選擇權總表")
  6.         .[L4:M4] = Array("成交量", "未沖銷契約量")         '"*成交量" ,"*未沖銷'資料庫欄"*" 進階篩選有會有錯誤
  7.         Set Rng = .Range("B4:Q" & .[B4].End(xlDown).Row)   '資料庫
  8.         篩選程式 "分類一"
  9.         篩選程式 "賣權"
  10.         篩選程式 "買權"
  11.         .Activate
  12.     End With
  13. End Sub
  14. Private Sub 篩選程式(Sh As String)                  'SH參數為字串型態 :工作表名稱
  15.     Dim T As String
  16.     With Sheets(Sh)
  17.         .Cells.Clear                                '儲存格:清除
  18.         .[L1].Value = AR(0)                         '進階篩選: CriteriaRange,準則欄位名稱("到期月份")
  19.         .[A1:E1].Value = AR                         '進階篩選: CopyToRange,複製到儲存格的欄位名稱
  20.         
  21.         If Sh = "賣權" Or Sh = "買權" Then
  22.             .[L1].Value = AR(2)                     '進階篩選: CriteriaRange,準則欄位名稱("買賣權")
  23.             .[L2] = IIf(Sh = "買權", "Call", "Put") '進階篩選:準則欄位 設立條件
  24.         End If
  25.         Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.[L1:L2], CopyToRange:=.[A1:E1], Unique:=True
  26.         .[L1:L2] = ""                                'Unique:=True 僅篩選唯一的記錄
  27.          If Sh <> "賣權" And Sh <> "買權" Then
  28.             .Rows(2).Delete                          '資料庫第2列為 (週別) 不需要刪掉
  29.         Else
  30.             月份契約篩選程式 Sh
  31.         End If
  32.     End With
  33. End Sub
  34. Private Sub 月份契約篩選程式(Sh As String)
  35.     Dim R As Range
  36.     On Error GoTo ER:                               '程式錯誤處裡:月份契約買權的工作表,如不存在會有錯誤.
  37.     With Sheets(Sh)
  38.         .Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Cells(1, .Columns.Count), Unique:=True
  39.         '篩選 [到期月份]在工作表最右端的欄位
  40.         For Each R In .Range(.Cells(2, .Columns.Count), .Cells(2, .Columns.Count).End(xlDown))  '最右端的欄位的[到期月份]
  41.             .Range("A1").AutoFilter Field:=1, Criteria1:=R     '自動篩選: A欄 準則= [到期月份]
  42.             .Range("A:E").Copy Sheets(R & Sh).[A1]             '不符合準則的資料會隱藏掉
  43.         Next
  44.     End With
  45.     Exit Sub                                                   '離開這程序
  46. ER:
  47.     If Err.Number = 9 Then                                      '月份契約買權的工作表
  48.         Sheets.Add Sheets(Sheets.Count)                         '新增工作表
  49.         ActiveSheet.Name = R & Sh                               '工作表:命名
  50.         Resume                                                  '回到程式錯誤點
  51.     End If
  52.     MsgBox Err.Description & Err.Number                         '告知:不是工作表不存在會有錯誤.
  53. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 君子立恆志,小人恆立志。
返回列表 上一主題