現(xiàn)有9個(gè)班級(jí)的學(xué)生成績(jī)表,包括三門課的成績(jī):

要求在Excel中畫出每個(gè)班級(jí)每科平均成績(jī)柱狀圖。

如果單純的用Excel整理數(shù)據(jù)很是麻煩,一共九個(gè)班級(jí),每個(gè)班級(jí)都要求三門課的平均成績(jī),費(fèi)時(shí)費(fèi)力。

可以借助Access數(shù)據(jù)庫(kù)將數(shù)據(jù)統(tǒng)計(jì)出來(lái),然后回到Excel進(jìn)行成圖。

第一步:將數(shù)據(jù)直接粘貼到Access數(shù)據(jù)庫(kù)

復(fù)制Excel表格中的學(xué)生成績(jī)數(shù)據(jù)→打開已有的Access數(shù)據(jù)庫(kù)→創(chuàng)建表→粘貼保存

第二步:創(chuàng)建查詢,統(tǒng)計(jì)數(shù)據(jù)

創(chuàng)建→查詢?cè)O(shè)計(jì)→寫語(yǔ)句→運(yùn)行:

select 班級(jí),avg(語(yǔ)文),avg(英語(yǔ)),avg(數(shù)學(xué)) from 表1 group by 班級(jí)

運(yùn)行結(jié)果:

第三步:復(fù)制到Excel表格中,進(jìn)行成圖

點(diǎn)擊左上角→右鍵復(fù)制→打開Excel表格→粘貼→成圖

粘貼到Excel表格中:

成圖:

點(diǎn)擊插入→圖表→柱狀圖

結(jié)果:

其實(shí),在實(shí)際工作中有很多問(wèn)題是可以通過(guò)Access數(shù)據(jù)庫(kù)與Excel表格結(jié)合來(lái)解決的,這樣很能夠節(jié)省時(shí)間,雖然在Excel表格當(dāng)中也提供了很多函數(shù)能夠分組求得我們想要的結(jié)果,但是步驟繁瑣。

能通過(guò)這種結(jié)合的方式可以很好的解決不同的難題,一個(gè)是利用了Access數(shù)據(jù)庫(kù)處理數(shù)據(jù)的優(yōu)勢(shì),一個(gè)是利用了Excel表格成圖的優(yōu)勢(shì),兩個(gè)優(yōu)勢(shì)結(jié)合,必然事半功倍。

VB程序自動(dòng)數(shù)據(jù)處理Access數(shù)據(jù)庫(kù)與Excel表格數(shù)據(jù)

VB程序設(shè)計(jì)比較容易學(xué)習(xí),一些非計(jì)算機(jī)專業(yè)的人士也能夠輕松學(xué)好VB程序設(shè)計(jì),VB程序設(shè)計(jì)來(lái)應(yīng)付你日常工作中的問(wèn)題,是完全可以勝任的,有一些比較復(fù)雜的數(shù)據(jù)需要進(jìn)行處理運(yùn)算,如果單純的有表格或者數(shù)據(jù)庫(kù),整個(gè)操作是相當(dāng)麻煩的,不僅浪費(fèi)了時(shí)間,還容易出錯(cuò),下面來(lái)介紹一下利用VB程序如何讀取Access數(shù)據(jù)庫(kù)中的數(shù)據(jù)與Excel表格中的數(shù)據(jù)。

VB程序讀取Excel表格數(shù)據(jù)

首先打開VB6.0程序設(shè)計(jì),打開后是這個(gè)界面:

這是一個(gè)空的程序窗口,我們還沒添加任何控件和代碼,我們先不細(xì)介紹VB6.0的界面,我們現(xiàn)在只用到它的按鈕控件,就是上面圈起來(lái)的東東。它在里面叫做“commandbutton”,我們雙擊它,它就跳到我們的窗口界面了:

再來(lái)繼續(xù)雙擊,就可以編寫代碼啦:

其實(shí)和Access數(shù)據(jù)庫(kù)與Excel表格的VBA宏是差不多的,只不過(guò)語(yǔ)法上略有差別,VB6.0可以很靈活的去做一個(gè)小的軟件程序,而VBA宏只能作為插件使用。

寫讀取Excel表格數(shù)據(jù)的程序,其實(shí)讀取的代碼基本是固定的,只要大家把這個(gè)固定的程序代碼直接復(fù)制進(jìn)去就好,根本不用自己親自動(dòng)手去敲代碼的。

大家可以看一下這些代碼,都表示什么意思呢?

我們來(lái)看定義的內(nèi)容:

Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlSheet1 As Excel.Worksheet

這幾個(gè)定義都是固定的模式,我們使用VB程序?qū)xcel表格數(shù)據(jù)進(jìn)行讀取時(shí),都要對(duì)Excel進(jìn)行定義,這樣VB程序才能夠識(shí)別出所要讀取的文件。

Set xlApp = CreateObject("Excel.Application")

是建立Excel文件用的,它表示建立一個(gè)Excel對(duì)象,對(duì)象建立完了之后,我們就可以打開指定的文件了,就是下面這個(gè):

Set xlBook = xlA("F:\報(bào)表運(yùn)行表.xls") xlA = True//表示讓對(duì)象可見,就是在讀取的時(shí)候,我們能看到文件的打開, Set xlSheet1 = xlBook.Worksheets("表1")//表示要讀取文件中的哪個(gè)表,這里面是讀取"表1" xlS表示激活要讀取的表,只有激活了,才能保證操作在當(dāng)前表進(jìn)行

以上都是固定的模式,大家可以復(fù)制即可,不用敲代碼。

緊接著,F(xiàn)or i = 4 To 89....Next i就是我們讀取數(shù)據(jù)和處理數(shù)據(jù)的過(guò)程了,具體要根據(jù)實(shí)現(xiàn)什么樣的功能,來(lái)編寫程序。

再往下還是固定的模式,就是讀取完文件內(nèi)容后,要把文件關(guān)閉掉,要不它會(huì)始終占據(jù)內(nèi)存的:

xlBook.Close xlA Set xlApp = Nothing

上面就是關(guān)閉文件,釋放對(duì)象的過(guò)程。

MsgBox "good job"

就是程序運(yùn)行完之后會(huì)彈出小的對(duì)話框,對(duì)話框顯示的文字就是“good job”,當(dāng)然也可以顯示“程序已經(jīng)運(yùn)行完畢”,比較靈活。

代碼寫完之后,我們來(lái)運(yùn)行程序,就是點(diǎn)擊這個(gè)小三角號(hào):

運(yùn)行之后,會(huì)彈出:

可以看到,這窗體上面只有一個(gè)按鈕,我們要想運(yùn)行我們剛剛寫的代碼,只需要點(diǎn)擊上面這個(gè)按鈕就可以啦,就是點(diǎn)擊“Command1”。

VB程序讀取Access數(shù)據(jù)庫(kù)數(shù)據(jù)

下面再來(lái)看看VB如何操作Access數(shù)據(jù)庫(kù),其實(shí)VB操作Access數(shù)據(jù)庫(kù)的代碼理簡(jiǎn)單,看看下面這個(gè)就知道啦:

可以看到,前三行是定義:

Dim conn As New ADODB.Connection Dim strConn As String Dim sql As String

是固定的模式,直接復(fù)制進(jìn)去即可。

strConn = "Provider=micro;Data Source=D:\0基礎(chǔ)資料\da;

這條語(yǔ)句是讀取路徑,找到文件的位置,也是固定的模式,只要把文件名改了即可。

再往下是一條查詢語(yǔ)句:

sql2 = " select b.* into yj1 from (select jh,min(rqx) as rqx1 from yjs07 group by jh) a left join yjs07 b on and a.rqx1=b.rqx) "

這條查詢語(yǔ)句就是我們要實(shí)現(xiàn)的復(fù)雜操作,當(dāng)然我們?cè)诔绦蚶锩婵梢陨习贄l的查詢語(yǔ)句,只要遇到同樣的工作,我們可以直接運(yùn)行程序即可。

再往下:

conn.Open strConn conn.Execute (sql1)

這兩條語(yǔ)句就是執(zhí)行我們前面寫的的查詢語(yǔ)句啦,也是固定的,只要把查詢語(yǔ)句的名稱改了就好。

Set conn = Nothing//這是釋放文件,用完了要關(guān)掉。

再往下就是MsgBox "good job",就是和上面操作Excel表格一樣,程序運(yùn)行完了之后會(huì)彈出一個(gè)對(duì)話框:

其實(shí)非計(jì)算機(jī)專業(yè)的人士也能夠很好的學(xué)會(huì)編程,只要掌握技巧是很容易掌握的,小編身邊有不少非計(jì)算機(jī)專業(yè)的人都在學(xué)習(xí)編程,只要掌握了編程,手頭的工作會(huì)變的如此輕松。

VB程序存取Excel數(shù)據(jù)實(shí)例講解

先來(lái)看一個(gè)VB程序存取Excel表格數(shù)據(jù)的例子,我們要把“sheet1”表中一班的學(xué)生語(yǔ)文成績(jī)用VB程序存取到“sheet2”表里面去。

首先打開安裝好的VB6.0程序,然后保存到一個(gè)指定的文件夾下面,這樣我們就有了一個(gè)空的VB程序,我們雙擊按鈕控件,按鈕控件就會(huì)自動(dòng)跳到窗體上面:

在進(jìn)入代碼窗口之前我們簡(jiǎn)單把這個(gè)控件設(shè)計(jì)成好看的樣式,點(diǎn)擊屬性窗口圖標(biāo),就會(huì)彈出一個(gè)屬性窗口,在這個(gè)窗口下,就能對(duì)我們的按鈕進(jìn)行設(shè)計(jì)啦:

然后點(diǎn)擊按鈕控件,在右邊的屬性窗口找到“Caption”字樣,它就是控件要顯示的名字,我們可以任意修改,改完后的效果是這樣的:

再來(lái)改一下它的色彩吧,這樣看起來(lái)漂亮些,就改成下面這樣吧:

可以看到按鈕變顏色,如果選上色彩后,沒有變色,那一定有一個(gè)選項(xiàng)沒選,就是下面這個(gè)要點(diǎn)Style選項(xiàng)的第二個(gè)類型,就允許我們對(duì)控件的色彩進(jìn)行改變:

好了,繼續(xù)雙擊這個(gè)設(shè)計(jì)完的按鈕吧,這樣就進(jìn)入到編寫代碼的窗口了,就是下面這個(gè)樣子:

先把昨天的固定代碼復(fù)制過(guò)來(lái),就是讀取Excel表格數(shù)據(jù)固定引用的代碼,在代碼窗口的開始部分:

Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlSheet1 As Excel.Worksheet Dim xlSheet2 As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlA("F:\成績(jī)表.xlsx") xlA = True Set xlSheet1 = xlBook.Worksheets("Sheet1") xlS

上面的"F:\成績(jī)表.xlsx"和"Sheet1"是我們要讀取數(shù)據(jù)的目標(biāo)文件和目標(biāo)表,一定要和我們的數(shù)據(jù)一致。

在代碼窗口的結(jié)尾部分是這些固定的代碼:

xlBook.Close xlA Set xlApp = Nothing

MsgBox "主人,黑貓警長(zhǎng)向您報(bào)告,程序已運(yùn)行完畢"

MsgBox后面的內(nèi)容是可以隨便修改的。

準(zhǔn)備的代碼都已經(jīng)完工,就等著在上面中間的空白部分去實(shí)現(xiàn)我們要實(shí)現(xiàn)的工作,我們的目標(biāo)是要把“sheet1”表中一班的學(xué)生語(yǔ)文成績(jī)自動(dòng)存取到“sheet2”表里面去。

我們先來(lái)把“sheet1”表中一班的數(shù)據(jù)讀到變量里面去:

m = 1 For i = 2 To 121【一共有121條學(xué)生數(shù)據(jù)】 If Trim(i, "a")) = "一班" Then【條件判定】 gs = gs + 1【記錄一班學(xué)生數(shù)量】 a1(m) = xlS(i, "a")【讀班級(jí)】 b1(m) = xlS(i, "b")【讀姓名】 c1(m) = xlS(i, "c")【讀語(yǔ)文成績(jī)】 m = m + 1 End If Next i

我們已經(jīng)讀完數(shù)據(jù)啦,下面我們來(lái)把從“sheet1”表中讀取的一班數(shù)據(jù)寫到“sheet2”表中去:

m = 1 For i = 2 To gs【gs表示一班的學(xué)生人數(shù)】 xlS(i, "a")= a1(m) 【寫班級(jí)】 xlS(i, "b")= b1(m) 【寫姓名】 xlS(i, "c")= c1(m) 【寫語(yǔ)文成績(jī)】 m = m + 1 Next i

這樣,我們的程序就差不多啦,不過(guò)還要修改幾處,就是前面要加上變量的定義,否則程序就會(huì)報(bào)錯(cuò),定義加在前面即可:

Dim a1(1 To 50), b1(1 To 50), c1(1 To 50)//【定義數(shù)組,裝數(shù)據(jù)用的】 Dim gs, i, m//【定義變量】

最后,編完的程序是這樣的:

來(lái)點(diǎn)擊上面的小三角運(yùn)行吧,運(yùn)行之后是這樣的:

點(diǎn)擊按鈕,看看有什么反應(yīng):

直接彈出這個(gè)文件啦,程序瞬間完成了我們的工作,問(wèn)是否保存呢,我們點(diǎn)擊取消就行,文件就會(huì)打開著,之后我們?cè)俦4妗?/p>

點(diǎn)完取消會(huì)彈出這個(gè)信息框:

就是我們?cè)诔绦蚶锩孀龅奶崾拘畔?,告訴我們工作已經(jīng)完成。

VB程序操縱Access數(shù)據(jù)庫(kù)

先來(lái)創(chuàng)建一個(gè)空的VB程序,當(dāng)然也可以用昨天做好現(xiàn)成的,只不過(guò)我們?cè)谂赃呍偌右粋€(gè)“按鈕控件”而已,我們按照昨天的設(shè)置,對(duì)今天新加的這個(gè)按鈕顯示的內(nèi)容“Caption”改成“逆天操縱Access”,和背景色“BackColor”改成“粉色”,以及字體改成“楷體”和字體大小改成“小四”號(hào),完成了相應(yīng)的設(shè)置之后,就是下面這個(gè)樣子:

可以看到這個(gè)窗體多了一個(gè)按鈕,雙擊它進(jìn)入到編寫代碼窗口:

可以看到,上面的代碼就是我們昨天編寫的存取Excel文件數(shù)據(jù)用的代碼,下面這個(gè)模塊是空的:

Private Sub Command2_Click() End Sub

我們需要編寫程序代碼,前半部分是固定模式的代碼:

Dim conn As New ADODB.Connection//【定義一個(gè)數(shù)據(jù)庫(kù)連接】 Dim strConn As String//【定義一個(gè)字符串變量存放數(shù)據(jù)庫(kù)所在路徑】

前半部分一切搞定,再來(lái)看后半部分:

Set conn = Nothing//【工作完成后釋放數(shù)據(jù)庫(kù)連接】 MsgBox "您的程序運(yùn)行完畢"//【彈出消息框示意工作已經(jīng)完成】

中間開始寫我們要實(shí)現(xiàn)具體工作的代碼。

現(xiàn)在就對(duì)下面這個(gè)學(xué)生成績(jī)表,求三門成績(jī)的總分放在新的字段中:

寫代碼:

Dim sql1, sql2 As String//【定義兩個(gè)字符串,用來(lái)裝查詢語(yǔ)句】 strConn = "Provider=micro;Data Source=F:\1文章\個(gè)人數(shù)據(jù)庫(kù).accdb"//【讀取數(shù)據(jù)庫(kù)所在路徑】 sql1 = "alter table xscj add column 總分?jǐn)?shù) float"//【增加一個(gè)“總分?jǐn)?shù)”字段的語(yǔ)句】 sql2 = "update xscj set 總分?jǐn)?shù)=yy+yw+sx"//【算三門總分的語(yǔ)句】 conn.Open strConn//【打開數(shù)據(jù)庫(kù)】 conn.Execute (sql1)//【執(zhí)行語(yǔ)句1】 conn.Execute (sql2)//【執(zhí)行語(yǔ)句2】 conn.Close//【關(guān)閉數(shù)據(jù)庫(kù)】

好了,寫完了,放在程序里面就是這樣的:

運(yùn)行之后,就是這樣了:

點(diǎn)擊下面新增加的這個(gè)按鈕,就是剛剛我們編寫代碼的控件,程序就開始運(yùn)行:

可以看到,我們剛剛編寫的程序瞬間運(yùn)行完成,點(diǎn)擊確定,來(lái)看看我們的數(shù)據(jù)庫(kù)里面有什么變化吧:

總分算出來(lái)了,并且還在我們的數(shù)據(jù)庫(kù)里面增加了一個(gè)字段,就是我們?cè)诔绦蚶锩嬉呀?jīng)添加的。其實(shí),這是最簡(jiǎn)單的,只有更復(fù)雜的工作才會(huì)動(dòng)用我們?nèi)ゾ幊绦?,所以先把?jiǎn)單的學(xué)會(huì),復(fù)雜的自然而然慢慢就學(xué)會(huì)。

Access數(shù)據(jù)庫(kù)對(duì)字段進(jìn)行分類查詢

有時(shí),我們想要對(duì)數(shù)據(jù)庫(kù)中的某類數(shù)據(jù)進(jìn)行分類整理,使得結(jié)果一目了然,下面這個(gè)學(xué)生成績(jī)表的總分,我們已經(jīng)算出來(lái)了,我們想要很直觀的表達(dá)哪個(gè)學(xué)生三門的平均成績(jī)及格啦,哪些沒有及格:

那么有什么方法可以實(shí)現(xiàn)呢?下面我們來(lái)看看這兩種方法:

一是使用update語(yǔ)句對(duì)字段進(jìn)行更新修改

第一步,進(jìn)入設(shè)計(jì)視圖,新建一個(gè)字段,字段名是成績(jī)分類

回到數(shù)據(jù)表視圖吧。

第二步,創(chuàng)建一個(gè)查詢,寫查詢語(yǔ)句:

update xscj set 成績(jī)分類='及格' where 總分?jǐn)?shù)>=180

運(yùn)行結(jié)果:

第三步,再創(chuàng)建一個(gè)查詢,查詢語(yǔ)句為:

update xscj set 成績(jī)分類='及格' where 總分?jǐn)?shù)<180

運(yùn)行結(jié)果:

再來(lái)看看第二種方法

二是使用iif函數(shù)直接對(duì)表進(jìn)行查詢

創(chuàng)建一個(gè)查詢,查詢語(yǔ)句為:

select 姓名,iif(總分?jǐn)?shù)<180,'不及格','及格') as 平均成績(jī) from xscj

運(yùn)行結(jié)果:

第一種方法以前接觸過(guò),就是對(duì)已有的學(xué)生成績(jī)表進(jìn)行更新查詢,也就是對(duì)原表進(jìn)行了增加字段的改動(dòng),這里面我們使用的是update語(yǔ)句,這個(gè)語(yǔ)句有固定的語(yǔ)法格式:

update 表名 set 字段名 where 條件

第二種方法中的iif函數(shù),我們并不經(jīng)常接觸到,但是這個(gè)函數(shù)對(duì)我們平常是非常有用的,它能夠在不修改表的情況下,查詢出我們想要的結(jié)果,它實(shí)際并沒有對(duì)原來(lái)存在的學(xué)生成績(jī)表進(jìn)行改動(dòng)。

所以,兩種方法,當(dāng)需要改動(dòng)時(shí),我們用第一種方法,當(dāng)不需要對(duì)原表進(jìn)行改動(dòng)時(shí),我們選擇第二種方法,你記住這個(gè)iff函數(shù)的語(yǔ)法格式:

【iif(條件,結(jié)果1,結(jié)果2)】,當(dāng)條件滿足時(shí),即為真時(shí),那么就返回結(jié)果1,否則返回結(jié)果2,上面的查詢表示當(dāng)總分?jǐn)?shù)滿足小于180分的時(shí)候,我們就返回“不及格”的結(jié)果,否則返回“及格”的結(jié)果。

喜歡的讀者請(qǐng)關(guān)注、轉(zhuǎn)發(fā)!

1.《excel如何運(yùn)行vb、excel如何加密》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《excel如何運(yùn)行vb、excel如何加密》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/keji/3223472.html