Re: [算表]如何讓Excel判斷"已過期的資料列",並搬 …

看板Office作者 (...)時間15年前 (2009/07/13 23:14), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《dorng (東)》之銘言: : 軟體:Office Excel : 版本:2003 : 檔案內有「A」和「B」兩張工作表,A的格式如下: : ┌─────┬───┬─────┐ : │收件日期 │主旨 │到期日  │ : ├─────┼───┼─────┤ : │2006/12/1 │XXX │2007/1/1 │ : ├─────┼───┼─────┤ : │2009/07/13│AAA │2009/12/1 │ : └─────┴───┴─────┘ : : : : : : : 我想撰寫一個巨集,讓Excel進行下述動作... : [舉例] : 第一列的「到期日」資料為2007/01/01,而今天是2009/07/13, : 所以第一列資料(整列資料)會被搬移至B工作表。第二列則不會。 : 請問該如何撰寫成巨集程式?這樣的描述是否清楚呢? : p.s「A」工作表內的資料列數並不一定,大約在50-70筆左右。 Option Explicit ' 將已到期之資料列搬移 ' 2009.07.13 Sub MoveDeadlineData() Dim rangeCheck As Range ' 目前確認的儲存格 Dim rangeNextCheck As Range Dim rangeDest As Range Const strSourceSheet As String = "SheetA" ' 來源資料表名稱 Const strSourceColumn As String = "C" ' 到期日欄位 Const strDestSheet As String = "SheetB" ' 目的資料表名稱 Dim numCopy As Integer numCopy = 0 ' 先移至"到期日欄"最後一個有資料的儲存格 Set rangeCheck = Sheets(strSourceSheet).Columns(strSourceColumn).Find( _ what:="*", LookIn:=xlValues, searchdirection:=xlPrevious) Set rangeDest = Sheets(strDestSheet).Range("A1") ' --- 由最後一列往上判斷、移動資料: --- Do Until rangeCheck.Row = 1 Set rangeNextCheck = rangeCheck.Offset(-1, 0) If CInt(DateDiff("d", Now, rangeCheck.Value)) < 0 Then rangeCheck.EntireRow.Copy rangeDest.Insert shift:=xlDown Application.CutCopyMode = False rangeCheck.EntireRow.Delete shift:=xlUp numCopy = numCopy + 1 Else ' Do nothing End If Set rangeCheck = rangeNextCheck Loop ' --- 輸出訊息: --- Dim Msg, Style, Title, Response Msg = "總共搬移了: " & Str(numCopy) & " 筆資料" Style = vbOKOnly Title = "報告" Response = MsgBox(Msg, Style, Title) ' --- 釋放物件: --- Set rangeCheck = Nothing Set rangeNextCheck = Nothing Set rangeDest = Nothing End Sub -- 問題: 1. B工作表原有的資料會被往下移 2. 若A資料表資料中間有空白列會出錯 3. 未做防呆項目(ex:檢查工作表是否存在、中間空白列、到期日格式不是日期…) 4. 輸出訊息的部分若不需要可拿掉 5. 不確定是否符合需求,請提供工作表或自行進一步測試   視結果再討論看看~ 6. 若程式用法有不妥當的地方,請大家告知~謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.122.216.53 ※ 編輯: lantolerance 來自: 122.122.217.20 (07/14 07:31)

07/16 09:16, , 1F
謝謝解答~~~
07/16 09:16, 1F

07/16 10:47, , 2F
^^
07/16 10:47, 2F
文章代碼(AID): #1AMqzQV1 (Office)
文章代碼(AID): #1AMqzQV1 (Office)