精華區beta Accounting 關於我們 聯絡資訊
VBA如何更新會計期間 網誌圖文版: http://www.b88104069.com/archives/4158 一般公認會計原則有個期間假設。我一直記得大學初會教授這麼介紹:一家 公司到底賺不賺錢、賺了多少,只有等到結束營業關門大吉才能最終確定, 可是投資者和債權人等不及了,所以在會計上要切成期間:每個月、每季度 、每年度。很多會計特有的專業術語,例如固資折舊、收入認列、費用配合 ,都是圍繞著如何分開期間而來。而在會計人的工作,也因為這樣基本上設 定為以月為周期,周而復始地以每月結帳為基調,常常每個月結完帳,一大 堆管理報表要先更新期間,在此介紹如何以VBA更新會計期間: 一、產品別毛利彙總表,有這個月和上個月的資料,方便比較。此報表每個 月都要編製,格式相同,到了下個月,最原始作法,是複製上個月檔案,手 工將期間從「1602」改成「1603」、將「1601」改成「1602」。 二、上個步驟更新期間需要改六個儲存格,聰明一點的想法,是引用同一來 源更新。例如新建一個「參數」工作表,設計好會計期間的填寫表格。 三、將報表表頭連結到「參數」工作表,如此一來,每個月只要更新兩個參 數,報表期間就更新好了,從六個儲存格減到兩個儲存格。 四、類似這樣的情況,Excel專業作法是「名稱」。把上方功能區移到「公 式」頁籤,選擇「名稱管理員」,在跳出來的視窗「新增」。 五、「編輯名稱」視窗,看起來一目瞭然,新增一個叫「本期期間」的名稱 ,其內容參照到「=參數!$B$1」。 六、於資料編輯列直接輸入名稱,Excel自動帶出名稱內容。 七、編寫程式:「Names.Add Name:="本期期間A", RefersTo:="1604"」是 很標準的VBA語法,「Names」是操作對象,「Add」是操作方法,中間以「. 」隔開,後面「Name:=」和「 RefersTo:=」是關於此次操作的屬性。順 帶一提VBA都是用半形符號,我文章為了編排版面,特地改成全形。「 ActiveWorkbook.Names.Add Name:="本期期間B", RefersTo:="=參數!$B$1" 」的說明如同程式裡的附註:「'於目前工作簿新增名稱」,應該不難理解 。「Current = InputBox("請輸入本期期間", "會計期間") 」這裡用到了 VBA特有的函數「InputBox」,兩個參數用法在下一步驟會很清楚。 八、執行上一個步驟的「輸入會計期間」巨集,最後會跳出輸入視窗,這裡 可以很清楚兩個參數的作用,一個是視窗標題列的內容、一個是輸入提示的 內容。 九、執行完巨集,再叫出「名稱管理員」,成功建立好了會計期間的名稱。 如果原來有報表期間有設定好使用「本期期間C」和「上期期間C」,在輸入 完InputBox對話方塊,會很神奇看到報表自動更新了會計期間。 InputBox是VBA特有的函數,它如同Excel裡面的IF函數一樣,結構簡單但是 很實用。IF提供了公式計算中的邏輯判斷,InputBox則是讓Excel輸入方式 不再侷限於儲存格,透過對話方塊視窗和名稱,等於是自行設計類似於一般 應用程式的輸入界面,這是VBA主要功能之一。不過InputBox還是有先天限 制,只能輸入文字型資料,而且一次只能輸入一個,在某些情況並不適用, 必須有另外的方法,留待以後再介紹。 延伸閱讀: VBA如何整理程式代碼 http://www.b88104069.com/archives/4157 VBA如何批次刪除空白列 http://www.b88104069.com/archives/4153 VBA如何控制表單輸入防止錯誤 http://www.b88104069.com/archives/4152 -- 周末,我們繼續Excel:精華區=>21.心得=>5.其他=>3.office 會計人的Excel小教室: https://www.facebook.com/acctexcel -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.20.97.205 ※ 文章網址: https://www.ptt.cc/bbs/Accounting/M.1485042198.A.A0D.html