- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
50#
發表於 2014-2-13 10:08
| 只看該作者
回復 49# iceandy6150 - '費用項目中 "津 貼",有空格,工作表名稱"津貼59-60"中沒空格
- '所有費用項目需與工作表名稱(費用項目??_??)一致
- '否則 Sh = Filter(Ar, Trim(Rng(1).Cells(i)), True) 會不正確'
- Option Explicit
- Sub Ex()
- Dim xlMon As Integer, xlYear As String, E As Variant
- Dim Rng(1 To 2) As Range, Rng_Ar(), Ar(), i As Integer, Sh As Variant
- With Sheets("損益表")
- xlYear = Mid(.[a3], InStrRev(.[a3], "至") + 1, InStrRev(.[a3], "年") - InStrRev(.[a3], "至"))
- 'xlYear : 損益表的年度
- xlMon = Mid(.[a3], InStrRev(.[a3], "年") + 1, InStrRev(.[a3], "月") - InStrRev(.[a3], "年") - 1)
- 'xlMon : 損益表的月份
- Set Rng(1) = .[A18:A30] '費用項目
- ReDim Rng_Ar(1 To Rng(1).Count) '陣列:元素數 = 費用項目數
- End With
- ReDim Ar(1 To Sheets.Count) '陣列:元素數 = Sheets.Count
- For i = 1 To Sheets.Count
- Ar(i) = Sheets(i).Name '陣列:元素導入 Sheets.Name
- Next
- For i = 1 To Rng(1).Count
- Sh = Filter(Ar, Trim(Rng(1).Cells(i)), True)
- 'Filter 函數 傳回一個從零開始的陣列,該陣列包含基於指定篩選準則的一個字串陣列的子集。
- For Each E In Sh
- With Sheets(E) '有"費用項目"名稱的 工作表
- Set Rng(2) = .[A:B].Find(xlYear, lookat:=xlWhole, LookIn:=xlValues) '核對年度
- If Not Rng(2) Is Nothing Then
- Set Rng(2) = .[a:a].Find(xlMon, lookat:=xlWhole) '搜尋月份
- If Not Rng(2) Is Nothing Then
- Rng_Ar(i) = Rng_Ar(i) + Rng(2).Range("F1") 'Range("F1"):金額位置
- End If
- End If
- End With
- Next
- Next
- Rng(1).Offset(, 1) = Application.WorksheetFunction.Transpose(Rng_Ar)
- 'Transpose(轉置) : 一維陣列(橫式) 轉換為 二維陣列(這裡變一列直式)
- End Sub
複製代碼 |
|