◆劉璐 謝勇/谷城縣審計局
筆者在對某投資公司進行損益審計時發(fā)現(xiàn),該公司使用“神州易橋財稅大管家”進行電子賬務(wù)處理,此款財務(wù)軟件相當小眾,在網(wǎng)絡(luò)上基本搜索不到有用信息,前臺生成的DBB數(shù)據(jù)庫文件無法被AO識別。審計時只能要求先提供基礎(chǔ)表數(shù)據(jù),但查閱時發(fā)現(xiàn)該軟件自動生成的科目余額表是按月進行全年匯總,某些有期初余額的科目并不在1月反映,多次輔助導入的數(shù)據(jù)與資產(chǎn)負債表總是不一致。焦頭爛額之際只能另辟蹊徑,鑒于明細賬數(shù)據(jù)表里某些單元格可以反映科目的期初余額和方向,筆者想到利用EXCEL的“遙控器”——VBA,實現(xiàn)高效準確地提取每個工作表特定單元格內(nèi)容。接下來就是對這小眾軟件特異數(shù)據(jù)表數(shù)據(jù)標準化的探索之路。
1.統(tǒng)計工作表個數(shù),點擊“公式”→“名稱管理器”,如圖1所示。
圖1 打開名稱管理器
2.新建公式,名稱自定,“引用位置”輸入“=GET.WORKBOOK(1)”。
3.在表中任意單元格輸入公式“=COUNTA(TJ)”,如圖2所示。
圖2 子表個數(shù)
統(tǒng)計結(jié)果可以看到明細賬中存在559個工作表(已包含新增的4個子表,實際源表中555個子表)。
4.查看發(fā)現(xiàn)各個工作表名稱存在科目代碼+科目名稱、科目代碼、默認表名3種命名方式(如圖3所示),但結(jié)構(gòu)相同(如圖4所示),符合批量提取的條件。
圖3 表名結(jié)構(gòu)
圖4 各個子表結(jié)構(gòu)
1.在所有工作表最后添加一個工作表,取名為“匯總”。利用快捷鍵Alt+F11,調(diào)出代碼窗口,添加模塊,編寫代碼如下:
Sub Opiona()
Rem禁止系統(tǒng)刷屏?觸發(fā)其他事件等
'On Error Resume Next '//發(fā)生錯誤,自動執(zhí)行下一句,就是忽略錯誤
Application.ScreenUpdating=False'//關(guān)閉屏幕刷新
Application.DisplayAlerts=False'//關(guān)閉系統(tǒng)提示
Application.EnableEvents=False'//禁止觸發(fā)其他事件
Application.StatusBar=True'關(guān)閉系統(tǒng)狀態(tài)條
T=Timer'//開始時間
Set SHX=Worksheets("匯總")
FIRSTROW=3'//匯總表標題所在行,下一行開始是數(shù)據(jù)
I=FIRSTROW+1'//數(shù)據(jù)記錄的開始行
SHX.Range("A"&I&":HZ1048576").ClearContents'//清空數(shù)據(jù)區(qū)域
Rem獲取各個分表清單
For Each SH In Worksheets
If SH.Name<>SHX.Name Then
Rem提示信息,在狀態(tài)欄顯示
Application.StatusBar="當前提取的表格是:"&SH.Name
DoEvents
Rem寫入工作表名
SHX.Cells(I,1).Value=SH.Name
Rem找到需要的單元格位置
For ICOL=2 To SHX.Range("HZ"&FIRSTROW).End(xl-ToLeft).Column
If Len(SHX.Cells(FIRSTROW-1,ICOL).Value)>0 Then
SHX.Cells(I,ICOL).Value=SH.Range(SHX.Cells(FIRSTROW-1,ICOL).Value).Value
End If
Next
I=I+1'//準備記錄下一條
End If
Next SH
Application.StatusBar=False'恢復系統(tǒng)狀態(tài)條
Application.EnableEvents=True'//'//恢復觸發(fā)其他事件
Application.ScreenUpdating=True'//恢復屏幕刷新
Application.DisplayAlerts=True'//恢復系統(tǒng)提示
MsgBox"一共用時:"&Format(Timer-T,"#0.0000")&"秒",,"溫馨提示!!"'//提示所用時間
End Sub
2.關(guān)閉代碼窗口,返回正常窗口,點擊“開發(fā)工具”,在“匯總”工作表插入窗體按鈕,如圖5所示。
圖5 添加窗體按鈕
同時編輯好表頭,如圖6所示。
圖6 表頭名稱行
3.單擊按鈕執(zhí)行匯總各子表需要提取的4個單元格內(nèi)容,將提取結(jié)果復制,選擇性粘貼到新工作表“余額結(jié)果表”,如圖7所示。
圖7 統(tǒng)計結(jié)果
AO要求余額表包含關(guān)鍵字段:科目代碼、科目名稱、科目方向、科目余額,因此接下來還需要對科目進行切分。從“科目”列我們發(fā)現(xiàn)單元格內(nèi)容都是“科目:科目代碼科目名稱”的結(jié)構(gòu),可以利用組合函數(shù)查找冒號和空格的位置進行對科目代碼和科目名稱的提取,在C3輸入公式“=MID(B3,FIND(":",B3)+1,FIND("",B3)-FIND(":",B3)-1)”,如圖8所示。
圖8 C3單元格公式和結(jié)果
4.在D3輸入公式“=RIGHT(B3,LEN(B3)-FIND("",B3))”,利用下拉鍵,批量完成所有科目代碼和科目名稱的生成,結(jié)果如圖9所示。
圖9 分割后的科目代碼和科目名稱結(jié)果
5.最后一步形成標準的科目余額表,555行數(shù)據(jù)與源表數(shù)據(jù)一致。至此,科目余額表的標準化工作已全部完成,加上之前提供的憑證表,可以完成AO財務(wù)賬套的采集。
由于AO模板的有限性,小眾財務(wù)軟件基本無法直接采集轉(zhuǎn)換,但采集思路是固定的,我們只需要取得科目表、余額表、憑證表即可完成財務(wù)數(shù)據(jù)的標準化處理,滿足工作需要。而實際工作中,小眾財務(wù)軟件的表格數(shù)據(jù)邏輯性可能與AO不對稱,這時就需要積極創(chuàng)新、大膽探索,總能從中找到有用的數(shù)據(jù),再配合相應(yīng)的辦法手段,最終完成數(shù)據(jù)的標準化工作。