- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
16#
發表於 2015-7-24 06:20
| 只看該作者
本帖最後由 GBKEE 於 2015-7-24 06:21 編輯
回復 14# finally0130
試試看
第6帖檔案的程式碼- Option Explicit
- Dim x_Mon As Integer, x_Week As Integer
- Sub Ex()
- Dim R As Long, E As Variant, t As Date
- t = Time
- Range("F4:Z" & Rows.Count) = "" '清除舊有資料 Rows.Count 範圍的列總數,這裡為工作表範圍
-
- R = Range("D4").End(xlDown).Row '日平均價的最後一列號
- With Range("B4:B" & R) '月別範圍
- .Cells = "=MONTH(RC[2])" '工作表上寫入函數,[R1C1]工作表上欄名列名表示法
- .Value = .Value '公式轉值
- End With
- With Range("C4:C" & R) '周別範圍
- .Cells = "=WEEKNUM(RC[1])" '2003: 增益集須加入 VBA分析工具箱
- .Value = .Value
- End With
- x_Week = DatePart("ww", Range("D4")) 'VBA的週別函數
- x_Mon = Month(Range("D4")) 'VBA的月別函數
-
- For Each E In Range("D4:D" & R) '日期範圍
- 週月收盤價 E '呼叫 Sub 週月收盤價 E(傳遞參數)
- x_Week = DatePart("ww", E) '再讀當週
- x_Mon = Month(E) '再讀當月
- Next
- 均價 '呼叫 Sub 均價
- MsgBox Application.Text(Time - t, "共計執行 [s] 秒")
- End Sub
- Sub 均價()
- Dim Rng As Range, E As Variant, i As Integer, AR()
- AR = Array(5, 10, 20, 60, 120)
- For Each E In Array("F4", "N4", "V4") '日平均價,周平均價,月平均價的第一個欄位
- Set Rng = Range(E).Resize(Range(E).Offset(, -1).End(xlDown).Row - 3, 5)
- For i = 0 To UBound(AR)
- With Rng.Columns(i + 1) '均價範圍的每一個欄位範圍
- If .Rows.Count > AR(i) Then '範圍小於均價日數 下面的With會有錯誤
- With .Cells(AR(i)).Resize(.Rows.Count - AR(i) + 1)
- .Cells = "=Average(RC[" & -i + -1 & "]:R[" & -AR(i) + 1 & "]C[" & -i + -1 & "])"
- '工作表上寫入公式
- End With
- End If
- End With
- Next
- Rng.Value = Rng.Value '轉公式為值
- Next
- End Sub
- Sub 週月收盤價(E As Variant) '讀取到:周收盤價,月收盤價
- If x_Week <> DatePart("ww", E) Then '不同週數
- With Range("L" & Rows.Count).End(xlUp).Offset(1)
- .Resize(, 2) = E.Offset(-1).Resize(, 2).Value 'E的上一列
- .Cells(1, 0) = DatePart("ww", E.Offset(-1))
- End With
- End If
- If x_Mon <> Month(E) Then '不同月數
- With Range("T" & Rows.Count).End(xlUp).Offset(1)
- .Resize(, 2) = E.Offset(-1).Resize(, 2).Value
- .Cells(1, 0) = Month(E.Offset(-1))
- End With
- End If
- End Sub
複製代碼 |
|