国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

如何在Excel中使用VBA編程

2014-01-13 03:08:10蘇子偉
軟件工程 2014年1期
關(guān)鍵詞:運(yùn)算符賦值語(yǔ)句

蘇子偉

利用Excel軟件處理大量數(shù)據(jù)的過程中,分離有些需要的數(shù)據(jù)是比較困難的,并且Excel中的宏函數(shù)并不能很容易、很純粹地解決這些問題。這時(shí)使用VBA進(jìn)行數(shù)據(jù)處理就是最佳的選擇。VBA本身與Excel的結(jié)合是無縫的,且提供了大量豐富的函數(shù)。用VBA操縱表格的過程簡(jiǎn)單,并且效率極高。

一、下面從六個(gè)方面說明VBA編程語(yǔ)言的結(jié)構(gòu)

1.運(yùn)算符

(1)賦值運(yùn)算符: =

(2)數(shù)學(xué)運(yùn)算符:&(字符連接符)、+(加)、-(減)、*(乘)、

/(除)、Mod(取余)、\(整除)、-(負(fù)號(hào))、^(指數(shù))

(3)邏輯運(yùn)算符:Not(非)、And(與)、Or(或)、Xor(異或)、Eqv(相等)、Imp(隱含)

(4)關(guān)系運(yùn)算符:= (相等)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is

(5)位運(yùn)算符:Not(邏輯非)、And(邏輯與)、Or(邏輯或)、Xor(邏輯異或)、Eqv(邏輯等)、Imp(隱含)

2.數(shù)據(jù)類型

下面列舉了一些常用類型及其所占的字節(jié)空間。

3.VBA的變量

4.VBA中的流程控制

(1)判斷結(jié)構(gòu)

(2)循環(huán)結(jié)構(gòu)

5.函數(shù)和過程的聲明與使用

函數(shù)和過程都是為了實(shí)現(xiàn)一個(gè)特定的機(jī)能而寫的獨(dú)立的模塊代碼。函數(shù)的聲明采用Function、End Function,而過程使用Sub和End Sub來表示。二者形式上很相像,但是函數(shù)與過程也有一些區(qū)別。

首先,Sub過程定義時(shí)無需定義返回值類型,而Function聲明一般需要用“As 數(shù)據(jù)類型”定義函數(shù)返回值類型。

其次,Sub過程中沒有對(duì)過程名賦值的語(yǔ)句,而Function實(shí)現(xiàn)中一定有對(duì)函數(shù)名賦值的語(yǔ)句。

再次,Sub與Function的調(diào)用方式不同。調(diào)用Sub過程是一個(gè)獨(dú)立的語(yǔ)句,而調(diào)用Function函數(shù)只是表達(dá)式的一部分。Sub過程不會(huì)用名字返回一個(gè)值,而Function函數(shù)一般會(huì)有一個(gè)返回值。

例子:

6.VBA中的注釋

注釋語(yǔ)句是用來說明程序中某些語(yǔ)句或函數(shù)實(shí)現(xiàn)了什么樣的功能,提供了什么樣的接口,使用者應(yīng)該怎么使用的一種輔助性文字。VBA中注釋語(yǔ)句有兩種標(biāo)識(shí)方法。

(1)單引號(hào) 例如:this is compare function.

(2)Rem 例如:Rem this is compare function.

這樣注釋語(yǔ)句就會(huì)變成綠色,區(qū)別于代碼字體的顏色。

二、一些經(jīng)常使用的VBA操作

三、一個(gè)根據(jù)表格數(shù)據(jù)自動(dòng)生成代碼的例子

下面表格中的Message列是代碼中用到的整形變量,ID(Hex)列列出了該整形變量的值。String列是通過整形變量能索引到的字符串。這樣程序中只要使用Message列的變量就能找出相應(yīng)的字符串信息。如果有新的變量要追加,只需要在No.6的后面添加一行,重新運(yùn)行生成代碼的宏(CreateMessagefile),代碼就會(huì)自動(dòng)生成,維護(hù)起來非常的方便。

下面是例子的代碼實(shí)現(xiàn)。

Sub writeheader(obj As Variant, str As String)

obj.WriteLine ("/********************************")

obj.WriteLine (" file name : " & str)

obj.WriteLine (" author : zzzz")

obj.WriteLine (" Create date :" & Date)

obj.WriteLine ("********************************/")

End Sub

Sub CreateMessagefile()

Dim fso_h As Object

Dim fname_h As String

Dim col_message As Long

Dim col_ID_hex As Long

Dim col_string As Long

col_message = 3

col_ID_hex = 4

col_string = 5

'file name

fname_h = "MessageInfo.h"

fname_h = ThisWorkbook.Path & "\" & fname_h

'open header file

Set fso_h = CreateObject("Scripting.File

SystemObject")

Set obj_h = fso_h.CreateTextFile(fname_h, True, False)

'to write comment header of the function

writeheader obj_h, "MessageInfo.h"

'to guard multi-include header file

Dim multi_str As String

multi_str = "__LOG_INFORMATION_H__"

obj_h.WriteLine ("#ifndef " & multi_str)

obj_h.WriteLine ("#define " & multi_str)

obj_h.WriteLine ("")

Cells(65536, 2).Select

Selection.End(xlUp).Select

Row_num = ActiveCell.Row

For i = 3 To Row_num

obj_h.WriteLine ("#define " & Cells(i, col_message).Value & " " & "0x" & Cells(i, col_ID_hex).Value)

Next i

obj_h.WriteLine ("")

obj_h.WriteLine ("typedef struct msg_info")

obj_h.WriteLine ("{")

obj_h.WriteLine (Chr$(9) & "unsigned int msg_val;")

obj_h.WriteLine (Chr$(9) & "char * pMsg;")

obj_h.WriteLine ("}msg_info;")

obj_h.WriteLine ("")

obj_h.WriteLine ("msg_info MsgInfoTotal[] = {")

For i = 3 To Row_num

obj_h.WriteLine (Chr$(9) & "{" & Cells(i, col_message).Value & ", " & """" & Cells(i, col_string).Value & """" & "},")

Next i

obj_h.WriteLine ("};")

obj_h.WriteLine ("")

obj_h.WriteLine ("#endif")

obj_h.Close

MsgBox ("It is over to make Message information!")

End Sub

以上代碼運(yùn)行后,會(huì)在和excel相同的目錄下生成文件MessageInfo.h,即我們需要自動(dòng)生成的文件。

自動(dòng)生成的MessageInfo.h代碼如下所示:

/*************************************************

file name : MessageInfo.h

author : zzzz

Create date :2013/12/20

**************************************************/

#ifndef __LOG_INFORMATION_H__

#define __LOG_INFORMATION_H__

#define msg_inf_1 0xC01A0001

#define msg_inf_2 0xC01B0002

#define msg_inf_3 0xD0120005

#define msg_inf_4 0xD0130006

#define msg_inf_5 0xD0140007

#define msg_inf_6 0xD0150008

typedef struct msg_info

{

unsigned int msg_val;

char * pMsg;

}msg_info;

msg_info MsgInfoTotal[] = {

{msg_inf_1, "file param error!"},

{msg_inf_2, "file logic error!"},

{msg_inf_3, "disk error!"},

{msg_inf_4, "no memory error!"},

{msg_inf_5, "function call failure!"},

{msg_inf_6, "array overflow!"},

};

#endif

本文通過VBA編程中的一個(gè)例子,使VBA的初學(xué)者對(duì)VBA的應(yīng)用能有一個(gè)初步的認(rèn)識(shí),進(jìn)而在工作學(xué)習(xí)中處理表格數(shù)據(jù)時(shí)能多一種解決思路。當(dāng)然,想要精通VBA還需要讀者去深入地學(xué)習(xí)其相關(guān)的知識(shí)點(diǎn),多學(xué),多練,多總結(jié),從而利用VBA工具更高效地處理數(shù)據(jù)。

猜你喜歡
運(yùn)算符賦值語(yǔ)句
關(guān)于1 1/2 … 1/n的一類初等對(duì)稱函數(shù)的2-adic賦值
L-代數(shù)上的賦值
老祖?zhèn)魇诨具\(yùn)算符
重點(diǎn):語(yǔ)句銜接
強(qiáng)賦值幺半群上的加權(quán)Mealy機(jī)與加權(quán)Moore機(jī)的關(guān)系*
精彩語(yǔ)句
利用賦值法解決抽象函數(shù)相關(guān)問題オ
C++運(yùn)算符重載剖析
如何搞定語(yǔ)句銜接題
表達(dá)式求值及符號(hào)推導(dǎo)
新乐市| 西林县| 南漳县| 南投县| 克什克腾旗| 缙云县| 永济市| 昆明市| 卓资县| 平乐县| 平乡县| 闽侯县| 资阳市| 曲沃县| 都昌县| 松滋市| 天等县| 绵阳市| 彭水| 基隆市| 乌鲁木齐县| 建平县| 衡阳市| 浏阳市| 石台县| 河津市| 山西省| 博乐市| 淳化县| 南丹县| 永清县| 西华县| 图们市| 滦南县| 武陟县| 微博| 靖安县| 甘洛县| 密云县| 句容市| 七台河市|