- 帖子
- 522
- 主題
- 36
- 精華
- 1
- 積分
- 603
- 點名
- 0
- 作業系統
- win xp sp3
- 軟體版本
- Office 2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2012-12-13
- 最後登錄
- 2021-7-11
|
20#
發表於 2014-3-22 15:09
| 只看該作者
本帖最後由 yen956 於 2014-3-22 15:15 編輯
回復 19# myleoyes
試試看:
 - Sub 建立日期比對表()
- Dim i As Integer
- Sheets("Sheet1").Activate
-
- '根據 [B3], 填入連續9個月的 結算日期 到 欄Z
- '並填入連續9個月的 年月 到 欄Y, 供 [Y2] Match 年月 用
- '因為某些月份超過1筆, 且同月份須寫在同一列, 故用 MATCH 比對是否同一月份的資料
- '請修改 For i = 1 To 9 之 9, 如果預計要要建立連續 12個月的資料, 則改為 12
- For i = 1 To 9
- Cells(i + 2, 26) = DateSerial(Year([B3]), Month([B3]) + i, 1) - 1
- Cells(i + 2, 25) = Year(Cells(i + 2, 26)) - 1911 & Month(Cells(i + 2, 26))
- Next i
- End Sub
- Sub Exyen()
- Dim Rng, chkRng As Range
- Dim i, endRow, endRow2, blankRow As Integer
- endRow = [A2000].End(xlUp).Row
- [AH1].Resize(200, 40) = ""
- [Y3].Resize(200, 2) = ""
- 建立日期比對表
- endRow2 = [Y200].End(xlUp).Row
-
- Sheets("Sheet1").Activate
- [M3] = 0.0254 '此列 "借用" M$3是個變數並非固定值
- blankRow = 3
- oldRow = 3
- Application.Calculation = xlManual
-
- For i = 3 To endRow
-
- '若 Cells(2, i + 31)<>"", 則這筆資料己結算過, 換下一筆
- If Cells(2, i + 31) <> "" Then GoTo next1:
-
- '否則將 編號 寫入 Cells(2, i + 31)
- Cells(2, i + 31) = Cells(i, 1)
-
- '將 目前這一筆 欄B 之 年月放入 [Y1], 供 [Y2] Match 比對年月 用
- [Y1] = Year(Cells(i, 2)) - 1911 & Month(Cells(i, 2))
-
- '因為某些月份超過1筆, 且同月份須寫在同一列, 故用 MATCH 比對是否同一月份的資料
- [Y2] = "=MATCH(Y1,Y3:Y200,0)"
-
- blankRow = [Y2] + 2
- If Cells(i, 1) <> 0 Then
- Range(Cells(blankRow, i + 31), Cells(endRow2, i + 31)) = "=ROUND($F$" & i & "*$M$3,2)"
- Else
- Range(Cells(blankRow, i + 31), Cells(i, i + 31)) = "=ROUND($F$" & i & "*$M$3,2)"
- End If
- Cells(1, i + 31) = "=SUM(R3C" & i + 31 & ":R200C" & i + 31 & ")"
- next1:
- Next
- Application.Calculation = xlAutomatic
- End Sub
複製代碼 |
|