建立“通報正文”表
整理好“數(shù)據(jù)源”表與“數(shù)據(jù)轉(zhuǎn)化”表后,接下來就該把每條通報正文與圖表一一對應起來,按事先擬定的分析框架進行整理。
① 新建一張工作表,并命名為“日報正文”。
② 在A1單元格處輸入通報標題,合并A1:H1單元格,并設置字體大小及排版居中。
③ 添加日期下拉輸入控件,可直接復制“數(shù)據(jù)轉(zhuǎn)化”表中已設置好的下拉控件。
④ 輸入、設置通報正文,例如在B4單元格輸入“一、用戶規(guī)?!保贐5單元格輸入“=數(shù)據(jù)轉(zhuǎn)化!I18”,將新增用戶數(shù)的柱形圖復制到B5單元格所在行的下方,圖表數(shù)據(jù)會隨原圖表數(shù)據(jù)的更新而更新。其他通報正文設置亦同此理,我就不再重復介紹,直接完成設置。
⑤ 可隱藏通報正文范圍外無須用到的單元格區(qū)域,例如要隱藏I列及其以后的列,那么用鼠標選中I列,同時按下【Ctrl+Shift+→】三個鍵,并單擊鼠標右鍵,選中【隱藏】即可,同理,還可隱藏無須用到的行。
⑥ 如果希望隱藏行、列標題,可通過【文件】→【選項】→【高級】,找到【顯示行和列標題】的復選框,去除勾選即可。
最終通報正文效果如圖所示。
數(shù)據(jù)提取自動化
實現(xiàn)從數(shù)據(jù)庫取數(shù),把數(shù)據(jù)結果追加至Excel相應表中,需要用SQL與VBA語句,主要實現(xiàn)以下幾個功能。
★ 打開Access數(shù)據(jù)庫。
★ 輸入提取數(shù)據(jù)的日期。
★ 運行指定的提數(shù)SQL語句。
★ 將SQL語句運行的數(shù)據(jù)結果自動追加到Excel“數(shù)據(jù)源”表的新記錄中。
相關的VBA語句編寫如下:
Sub每日數(shù)據(jù)提取()
'聲明定義VBA語句中需要使用到的各個變量類型
Dim AdoConn As New ADODB.Connection '定義變量AdoConn為連接數(shù)據(jù)庫對象(ADODB是數(shù)據(jù)庫訪問組件,Connection是其中的一個對象),用于實現(xiàn)連接數(shù)據(jù)庫和關閉數(shù)據(jù)庫連接等操作
Dim MyData As String '定義變量MyData為字符串型變量,用于數(shù)據(jù)庫路徑賦值
Dim N As Integer 定義變量N為數(shù)值型變量,用于Excel表行數(shù)賦值
Dim D1 As Date '定義變量D1為日期型變量,用于數(shù)據(jù)起始日期賦值
Dim D2 As Date '定義變量D2為日期型變量,用于數(shù)據(jù)結束日期賦值
' 定義SQL語句所需要的4個字符串型變量,可根據(jù)實際需要選擇需要聲明的變量個數(shù)
Dim strSQL1 As String
Dim strSQL2 As String
Dim strSQL3 As String
Dim strSQL4 As String
' InputBox函數(shù)的作用是打開輸入對話框,提示輸入提數(shù)日期,并賦值給D1,D2賦值D1+1
D1 = InputBox('請輸入需要提數(shù)的日期,例如:2011-9-4', '提數(shù)日期')
D2 = D1 + 1
' 取第3列第1個空格單元格的行數(shù),并賦值給N
N=ActiveSheet.Range('C1').End(xlDown).Row + 1
指定數(shù)據(jù)庫,可根據(jù)實際情況替換雙引號內(nèi)數(shù)據(jù)庫文件名,注意Access數(shù)據(jù)庫文件與Excel文件必須在同一個路徑下,如果不是,則須更改為MyData = 'D:\數(shù)據(jù)\業(yè)務數(shù)據(jù)庫.accdb',根據(jù)實際情況替換Access數(shù)據(jù)庫文件
MyData =ThisWorkbook.Path & “\業(yè)務數(shù)據(jù)庫.accdb'
建立數(shù)據(jù)庫連接,打開剛才指定的數(shù)據(jù)庫MyData
With AdoConn
.Provider=“Microsoft.ACE.OLEDB.12.0”
.Open MyData
End With
設置SQL語句,根據(jù)實際情況編寫和替換
strSQL1= 'SELECT count(用戶ID)FROM用戶明細WHERE注冊日期<#'&D2&'#AND注
冊日期>=# '&D1& #'
strSQL2= 'SELECT count(用戶ID)FROM(SELECT DISTINCT用戶ID FROM訂購明細WHERE
訂購日期<#' &D1& '#)'
strSQL3= 'SELECT count(訂單編號),sum(訂購金額)FROM訂購明細WHERE訂購日期<#'&D2& &D1& '#'
strSQL4= 'SELECT count(用戶ID)FROM(SELECT DISTINCT用戶ID FROM訂購明細WHERE
訂購日期<# '&D2&“#)'
執(zhí)行SQL查詢,并將查詢結果輸出到當前表格相應位置,可根據(jù)實際情況在相應位置進行調(diào)整
ActiveSheet.Cells(N,3).CopyFromRecordset AdoConn.Execute(strSQL1)
ActiveSheet.Cells(N,4).CopyFromRecordset AdoConn.Execute(strSQL2)
ActiveSheet.Cells(N,5).CopyFromRecordset AdoConn.Execute(strSQL3)
ActiveSheet.Cells(N,7).CopyFromRecordset AdoConn.Execute(strSQL4)
關閉數(shù)據(jù)庫連接
AdoConn.Close
釋放變量
Set AdoConn = Nothing
MsgBox函數(shù)作用是打開輸出對話框,以對話框形式提示“數(shù)據(jù)提取完畢!”
MsgBox “數(shù)據(jù)提取完畢!”
End Sub
VBA語句執(zhí)行的步驟,如圖所示。
★ 雙引號之間的語句是VBA語句中的文本字符串。
★ 井號(#)主要在SQL查詢語句中表示數(shù)據(jù)類型為日期型,通常在數(shù)據(jù)值兩端加上井號(#),這在講Access數(shù)據(jù)庫SQL語句查詢時就介紹過。
★ 連接符(&)在VBA語句中,用于連接各個文本字符串,以組成一串所需的字符串,例如VBA語句中的strSQL1變量所賦值的SQL語句。因為需要根據(jù)輸入的日期進行數(shù)據(jù)查詢提取,VBA語句中涉及文本字符串與日期參數(shù)兩種類型的文本。
如果將各個文本字符串與日期參數(shù)D1、D2直接連接,而沒有進行類別分隔再連接,那么系統(tǒng)會將日期參數(shù)D1、D2識別為文本字符串D1、D2,而不是日期參數(shù),這樣就不能引用對話框輸入的日期進行數(shù)據(jù)篩選查詢,并且還會運行出錯。
所以需要將一條完整的SQL語句拆分為各個文本字符串部分,再將各個文本字符串部分與日期參數(shù)D1、D2用連接符(&)進行連接組合,使其組合成一串所需的SQL語句,這就好比剛才介紹的“數(shù)據(jù)轉(zhuǎn)化”表中的通報正文的組合一樣,將各個文本字符串按需組合起來。
因為SQL語句要求各個關鍵字用空格符號分隔,所以在文本字符串與日期參數(shù)連接時注意空格符號的使用。
聯(lián)系客服