用過VB的人都應(yīng)該知道如何聲明變量,在VBA中聲明變量和VB中是完全一樣的!
使用Dim語句
Dim a as integer '聲明a為整型變量
Dim a '聲明a為變體變量
Dim a as string '聲明a為字符串變量
Dim a as currency ,b as currency ,c as currency '聲明a,b,c為貨幣變量
......
聲明變量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(當(dāng)前不支持)、Date、String(只限變長字符串)、String * length(定長字符串)、Object、Variant、用戶定義類型或?qū)ο箢愋汀?br /> 強(qiáng)制聲明變量
Option Explicit
說明:該語句必在任何過程之前出現(xiàn)在模塊中。
聲明常數(shù)
用來代替文字值。
Const
' 常數(shù)的默認(rèn)狀態(tài)是 Private。
Const My = 456
' 聲明 Public 常數(shù)。
Public Const MyString = "HELP"
' 聲明 Private Integer 常數(shù)。
Private Const MyInt As Integer = 5
' 在同一行里聲明多個(gè)常數(shù)。
Const MyStr = "Hello", MyDouble As Double = 3.4567
選擇當(dāng)前單元格所在區(qū)域
在EXCEL97中,有一個(gè)十分好的功能,他就是把鼠標(biāo)放置在一個(gè)有效數(shù)據(jù)單元格中,執(zhí)行該段代碼,你就可以將連在一起的一片數(shù)據(jù)全部選中。只要將該段代碼加入到你的模塊中。
Sub My_Select
Selection.CurrentRegion.Select
End sub
返回當(dāng)前單元格中數(shù)據(jù)刪除前后空格后的值
sub my_trim
msgbox Trim(ActiveCell.Value)
end sub
單元格位移
sub my_offset
ActiveCell.Offset(0, 1).Select'當(dāng)前單元格向左移動(dòng)一格
ActiveCell.Offset(0, -1).Select'當(dāng)前單元格向右移動(dòng)一格
ActiveCell.Offset(1 , 0).Select'當(dāng)前單元格向下移動(dòng)一格
ActiveCell.Offset(-1 , 0).Select'當(dāng)前單元格向上移動(dòng)一格
end sub
如果上述程序產(chǎn)生錯(cuò)誤那是因?yàn)閱卧癫荒芤苿?dòng),為了解除上述錯(cuò)誤,我們可以往
sub my_offset 之下加一段代碼 on error resume next

注意以下代碼都不再添加 sub “代碼名稱” 和end sub請自己添加!
給當(dāng)前單元格賦值
ActiveCell.Value = "你好。!"
給指定單元格賦值
例如:A1單元格內(nèi)容設(shè)為"HELLO"
Range("a1").value="hello"
又如:你現(xiàn)在的工作簿在sheet1上,你要往sheet2的A1單元格中插入"HELLO"
1.
sheets("sheet2").select
range("a1").value="hello"

2.
Sheets("sheet1").Range("a1").Value = "hello"
說明:
1.sheet2被選中,然后在將“HELLO"賦到A1單元格中。
2.sheet2不必被選中,即可“HELLO"賦到sheet2 的A1單元格中。
隱藏工作表
'隱藏SHEET1這張工作表
  sheets("sheet1").Visible=False
'顯示SHEET1這張工作表
  sheets("sheet1").Visible=True
打印預(yù)覽
有時(shí)候我們想把所有的EXCEL中的SHEET都打印預(yù)覽,請使用該段代碼,它將在你現(xiàn)有的工作簿中循環(huán),直到最后一個(gè)工作簿結(jié)束循環(huán)預(yù)覽。
Dim my As Worksheet
For Each my In Worksheets
my.PrintPreview
Next my
得到當(dāng)前單元格的地址
msgbox ActiveCell.Address
得到當(dāng)前日期及時(shí)間
msgbox date & chr(13) & time
保護(hù)工作簿
ActiveSheet.Protect
取消保護(hù)工作簿
ActiveSheet.Unprotect
給活動(dòng)工作表改名為 "liu"
ActiveSheet.Name = "liu"
打開一個(gè)應(yīng)用程序
AppActivate (Shell("C:WINDOWSCALC.EXE"))
增加一個(gè)工作表
Worksheets.Add
刪除活動(dòng)工作表
activesheet.delete
打開一個(gè)工作簿文件
Workbooks.Open FileName:="C:My DocumentsBook2.xls"
關(guān)閉活動(dòng)窗口
ActiveWindow.Close
單元格格式
選定單元格左對齊
Selection.HorizontalAlignment = xlLeft
選定單元格居中
Selection.HorizontalAlignment = xlCenter
選定單元格右對齊
Selection.HorizontalAlignment = xlRight
選定單元格為百分號(hào)風(fēng)格
Selection.Style = "Percent"
選定單元格字體為粗體
Selection.Font.Bold = True
選定單元格字體為斜體
Selection.Font.Italic = True
選定單元格字體為宋體20號(hào)字
With Selection.Font
.Name = "宋體"
.Size = 20
End With
With 語句
With 對象
.描述
End With
清除單元格
ActiveCell.Clear '刪除所有文字、批注、格式
返回選定區(qū)域的行數(shù)
MsgBox Selection.Rows.Count
返回選定區(qū)域的列數(shù)
MsgBox Selection.Columns.Count
返回選定區(qū)域的地址
Selection.Address
忽略所有的錯(cuò)誤
ON ERROR RESUME NEXT
遇錯(cuò)跳轉(zhuǎn)
on error goto err_handle
'中間的其他代碼
err_handle: ' 標(biāo)簽
'跳轉(zhuǎn)后的代碼
刪除一個(gè)文件
kill "c:1.txt"
定制自己的狀態(tài)欄
Application.StatusBar = "現(xiàn)在時(shí)刻: " & Time
恢復(fù)自己的狀態(tài)欄
Application.StatusBar = false
用代碼執(zhí)行一個(gè)宏
Application.Run macro:="text"
滾動(dòng)窗口到a1的位置
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
定制系統(tǒng)日期
Dim MyDate, MyDay
MyDate = #12/12/69#
MyDay = Day(MyDate)
返回當(dāng)天的時(shí)間
Dim MyDate, MyYear
MyDate = Date
MyYear = Year(MyDate)
MsgBox MyYear
inputbox<輸入框>
XX=InputBox ("Enter number of months to add")
得到一個(gè)文件名
Dim kk As String
kk = Application.GetOpenFilename("EXCEL (*.XLS), *.XLS", Title:="提示:請打開一個(gè)EXCEL文件:")
msgbox kk

打開zoom對話框
Application.Dialogs(xlDialogZoom).Show

激活字體對話框
Application.Dialogs(xlDialogActiveCellFont).Show

打開另存對話框
Dim kk As String
kk = Application.GetSaveAsFilename("excel (*.xls), *.xls")
Workbooks.Open kk

 


1 excle快捷鍵大全
對工具欄進(jìn)行操作的快捷鍵
激活菜單欄,F(xiàn)10,Alt
選定前一個(gè)或下一個(gè)工具欄,Ctrl+Tab或Ctrl+Shift+Tab
選定工具欄中的下一個(gè)或前一個(gè)按鈕或菜單,Tab或Shift+Tab(當(dāng)某個(gè)工具欄被激活時(shí))
打開選定的菜單,Enter
運(yùn)行選按鈕的操作,Enter
在選定的文本框中輸入文本,Enter
在對話框中使用的快捷鍵
取消當(dāng)前任務(wù),Esc
單擊相應(yīng)命令,Alt+下劃線字母
單擊選定的按鈕,Enter
在選項(xiàng)中前移,Tab
在選項(xiàng)后移,Shift+Tab
在選項(xiàng)卡中前移,Ctrl+Tab
在選項(xiàng)卡中后移,Ctrl+Shift+Tab
刷新“另存為”或“打開”對話框,F5
插入、刪除和復(fù)制選定區(qū)域的快捷鍵
復(fù)制選定區(qū)域,Ctrl+C
粘貼選定區(qū)域,Ctrl+V
剪切選定區(qū)域,Ctrl+X
清除選定區(qū)域的內(nèi)容,Delete
插入空白單元格,Ctrl+Shift+加號(hào)
刪除選定區(qū)域,Ctrl+-
撤消最后一次操作,Ctrl+Z
使用“office助手”需要用到的快捷鍵
關(guān)閉“office助手”提供的消息,Esc
通過“office助手”獲取幫助信息,F1
顯示下一項(xiàng)提示,Alt+N
顯示前一項(xiàng)提示,Alt+B
在向?qū)е酗@示或隱藏“office助手”,空格鍵
對窗口進(jìn)行操作的快捷鍵
切換到下一個(gè)程序,Alt+Tab
切換到前一個(gè)程序,Alt+Shift+Tab
顯示windwos“開始”菜單,Ctrl+Esc
關(guān)閉活動(dòng)工作薄窗口,Ctrl+W
恢復(fù)活動(dòng)工作薄窗口,Ctrl+F5
切換到下一個(gè)工作薄窗口,Ctrl+F6
切換到前一個(gè)工作薄窗口,Ctrl+Shift+F6
執(zhí)行“移動(dòng)”命令(菜單欄中的工作薄圖標(biāo)菜單),Ctrl+F7
運(yùn)行“大小”命令(菜單欄中的工作薄圖標(biāo)菜單),Ctrl+F8
將工作薄窗口最小化為圖標(biāo),Ctrl+F9
最大化或恢復(fù)工作薄窗口,Ctrl+F10
在“打開”或“另存為”對話框中更新可見的文件,F5
使用對話框進(jìn)行操作的快捷鍵
切換到對話框中的下一個(gè)選項(xiàng)卡,Ctrl+Tab或Ctrl+PageDown
切換到對話框中的前一個(gè)選項(xiàng)卡,Ctrl+Shift+Tab或Ctrl+PageUp
移動(dòng)到下一個(gè)選項(xiàng)或選項(xiàng)組,Tab
移動(dòng)到前一個(gè)選項(xiàng)或選項(xiàng)組,Shift+Tab
在活動(dòng)下拉列表框的選項(xiàng)間移動(dòng),或在選項(xiàng)組選項(xiàng)間移動(dòng),方向鍵
招待活動(dòng)按鈕的操作,或選定或清除當(dāng)前復(fù)選框,空格鍵
取消命令或關(guān)閉對話框,Esc
在文本框中進(jìn)行操作的快捷鍵
移動(dòng)到內(nèi)容的開始,Home
移動(dòng)到內(nèi)容的最后,End
向左或向右移動(dòng)一個(gè)字符,左右方向鍵
向左或向右移動(dòng)一個(gè)字,Ctrl+左右方向鍵
選定從插入點(diǎn)到開始的輸入內(nèi)容,Shift+Home
選定從插入點(diǎn)到最后的輸入內(nèi)容,Shift+End
選定或取消左面的一個(gè)字符,Shift+左方向鍵
選定或取消右面的一個(gè)字符,Shift+右方向鍵
選定或取消左面的一個(gè)字,Ctrl+Shift+左方向鍵
選定或取消右面的一個(gè)字,Ctrl+Shift+右方向鍵
在工作表和工作薄中選定單元格、列、行或?qū)ο蟮目旖萱I
選定當(dāng)前單元格周圍的區(qū)域,Ctrl+Shift+*(星號(hào))
將選定區(qū)域擴(kuò)展一個(gè)單元格寬度,Shift+方向鍵
將選定區(qū)域擴(kuò)展到與活動(dòng)單元格同一行或同一列的最后一個(gè)非空白單元格,Ctrl+Shift+方向鍵
將選定區(qū)域擴(kuò)展到行首,Shift+Home
將選定區(qū)域擴(kuò)展到工作表的開始,Ctrl+Shift+Home
將選定區(qū)域擴(kuò)展到工作表的最后一個(gè)包含數(shù)據(jù)的單元格,Ctrl+Shift+End
選定整列,Ctrl+空格鍵
選定整行,Shift+空格鍵
選定整個(gè)工作表,Ctrl+A
若已選定多個(gè)單元格,則只選定其中的活動(dòng)單元格,Shift+Backspace
將選定區(qū)域向下擴(kuò)展一屏,Shift+PageDown
將選定區(qū)域向上擴(kuò)展一屏,Shift+PageUp
在選定一個(gè)對象時(shí),選定工作表上的所有對象,Ctrl+Shift+空格鍵
在隱藏對象、顯示對象與對象占位符之間切換,Ctrl+6
顯示或隱藏“常用”工具欄,Ctrl+7
分級(jí)顯示數(shù)據(jù)的快捷鍵
取消行或列分組,Alt+Shift+左方向鍵
對行或列分組,Alt+Shift+右方向鍵
顯示或隱藏分級(jí)顯示符號(hào),Ctrl+8
隱藏選定行,Ctrl+9
取消隱藏選定行,Ctrl+Shift+(
隱藏選定列,Ctrl+0
取消隱藏選定列,Ctrl+Shift+)
編輯單元格的快捷鍵
完成單元格輸入,Enter
取消單元格輸入,Esc
重復(fù)單元格一次操作,F4或Ctrl+Y
在單元格中折行,Alt+Enter
刪除插入點(diǎn)左邊的字符或刪除選定區(qū)域,Backspace
刪除插入點(diǎn)右邊的字符或刪除選定區(qū)域,Delete
向上下左右移動(dòng)一個(gè)字符,方向鍵
移到行首,Home
移到行尾,End
編輯單元格批注,Shift+F2
由行或列標(biāo)志創(chuàng)建名稱,Ctrl+Shift+F3
向下填充,Ctrl+D
向右填充,Ctrl+R
用當(dāng)前輸入項(xiàng)填充選定的單元格區(qū)域,Ctrl+Enter
完成單元格輸入并在選定區(qū)域中下移,Enter
完成單元格輸入并在選定區(qū)域中上移,Shift+Enter
完成單元格輸入并在選定區(qū)域中右移,Tab
完成單元格輸入并在選定區(qū)域中左移,Shift+Tab
在單元格或編輯欄中使用的快捷鍵
鍵入公式,=(等號(hào))
取消單元格或編輯欄中的輸入項(xiàng),Esc
編輯當(dāng)前單元格,F2
編輯活動(dòng)單元格并清除其內(nèi)容,或在編輯時(shí)刪除前一個(gè)字符,Backspace
將名稱粘貼到公式中,F3
定義名稱,Ctrl+F3
計(jì)算所有打開工作薄中的所有工作表,F9
計(jì)算活動(dòng)工作表,Shift+F9
輸入“自動(dòng)求和”公式,Alt+=(等號(hào))
輸入日期,Ctrl+;
輸入時(shí)間,Ctrl+Shift+:
插入超級(jí)鏈接,Ctrl+K
完成單元格輸入,Enter
將當(dāng)前單元格上方單元格中的數(shù)值復(fù)制到當(dāng)前單元格或編輯欄,Ctrl+Shift+(雙引號(hào))
將當(dāng)前單元格上方單元格中的公式復(fù)制到當(dāng)前單元格或編輯欄,Ctrl+'(單引號(hào))
在顯示單元格值與單元格公式間轉(zhuǎn)換,Ctrl+`(撇號(hào))
輸入數(shù)組公式,Ctrl+Shift+Enter
鍵入有效函數(shù)名后,顯示公式選項(xiàng)板,Ctrl+A
鍵入有效函數(shù)名后,為該函數(shù)插入變量名和括號(hào),Ctrl+Shift+A
顯示“記憶式鍵入”列表,Ctrl+下方向鍵
快捷鍵與數(shù)據(jù)格式設(shè)置
顯示“樣式”命令,Alt+'(單引號(hào))
顯示“單元格”命令,Ctrl+1
應(yīng)用常規(guī)數(shù)字格式,Ctrl+Shift+~
應(yīng)用帶兩個(gè)小數(shù)位的“貸幣”格式,Ctrl+Shift+$
應(yīng)用不帶小數(shù)位的“百分比”格式,Ctrl+shift+%
應(yīng)用帶兩個(gè)小數(shù)位的“科學(xué)記數(shù)”數(shù)字格式,,Ctrl+shift+^
應(yīng)用年月日“日期”格式,Ctrl+shift+#
應(yīng)用小時(shí)和分鐘“時(shí)間”格式,并表明上午或下午,Ctrl+shift+@
應(yīng)用外邊框,Ctrl+shift+&
取消選定單元格區(qū)域中的所有邊框,Ctrl+shift+_
應(yīng)用或取消字體加粗格式,Ctrl+B
應(yīng)用或取消字體傾斜格式,Ctrl+I
應(yīng)用或取消字體下劃線格式,Ctrl+U
應(yīng)用或取消刪除線格式,Ctrl+5
隱藏行,Ctrl+9
取消隱藏行,Ctrl+Shift+(
隱藏列,Ctrl+0
取消隱藏列,Ctrl+Shift+)

使用 Excel 2003 工作表的 VBA 示例 
 

適用范圍:
Microsoft Office Excel 2003
摘要:尋找能夠?yàn)?Excel 工作表增加額外功能的宏。只需稍加練習(xí),您就可以擴(kuò)展這些程序,使其適合您自己的應(yīng)用程序。
本頁內(nèi)容

引言

導(dǎo)出帶有逗號(hào)和引號(hào)分隔符的文本文件

計(jì)算包含公式、文本或數(shù)字的單元格數(shù)量

使用 Saved 屬性確定工作簿是否已發(fā)生更

合并數(shù)據(jù)列

數(shù)組中的總行數(shù)和總列數(shù)

結(jié)論
引言
本文介紹幾個(gè) Microsoft Visual Basic for Applications (VBA) 宏,您可以使用這些宏為 Microsoft Office Excel 2003 工作簿和工作表增加額外的功能。這些宏將為您的應(yīng)用程序提供新的功能或增強(qiáng)現(xiàn)有的功能。閱讀示例的同時(shí),您應(yīng)該尋找擴(kuò)展這些宏的方法,以適合您自己的情況。

導(dǎo)出帶有逗號(hào)和引號(hào)分隔符的文本文件
Excel 沒有自動(dòng)將數(shù)據(jù)導(dǎo)出為文本文件的菜單命令,因此導(dǎo)出的文本文件同時(shí)帶有逗號(hào)和引號(hào)分隔符。例如,沒有命令能自動(dòng)創(chuàng)建包含以下內(nèi)容的文本文件:
"Text1","Text2","Text3"

但是,您可以使用 VBA 宏在 Excel 中創(chuàng)建該功能。這種文件格式是在諸如 Microsoft Office Access 2003 和 Microsoft Office Word 2003 之類的應(yīng)用程序中導(dǎo)入文本數(shù)據(jù)時(shí)常見的格式。
您可以在如下所示的 VBA 宏中使用 Print 語句,導(dǎo)出同時(shí)帶有逗號(hào)和引號(hào)分隔符的文本文件。要使該程序正常運(yùn)行,必須在運(yùn)行該程序之前選擇包含數(shù)據(jù)的單元格。
使用以下示例之前,請執(zhí)行以下步驟:
1. 打開一個(gè)新工作簿。
2. 在“工具”菜單中,指向“宏”,然后單擊“Visual Basic 編輯器”(或者簡單地按下 ALT+F11 組合鍵)。在“Visual Basic 編輯器”中,單擊“插入”菜單,然后單擊“模塊”。
3. 將以下示例代碼鍵入或粘貼到模塊中:
Sub QuoteCommaExport()
Dim DestFile As String
Dim FileNum As Integer
Dim ColumnCount As Integer
Dim RowCount As Integer
' 提示用戶指定目標(biāo)文件名。
DestFile = InputBox("Enter the destination filename" & _
Chr(10) & "(with complete path and extension):", _
"Quote-Comma Exporter")
' 獲取下一個(gè)可用的文件句柄編號(hào)。
FileNum = FreeFile()
' 關(guān)閉錯(cuò)誤檢查功能。
On Error Resume Next
' 嘗試打開目標(biāo)文件以供輸出。
Open DestFile For Output As #FileNum
' 如果出現(xiàn)錯(cuò)誤,則報(bào)告錯(cuò)誤并結(jié)束程序。
If Err <> 0 Then
MsgBox "Cannot open filename " & DestFile
End
End If
' 打開錯(cuò)誤檢查功能。
On Error GoTo 0
' 循環(huán)選擇的每一行。
For RowCount = 1 To Selection.Rows.Count
' 循環(huán)選擇的每一列。
For ColumnCount = 1 To Selection.Columns.Count
' 將當(dāng)前單元格中的文本寫入到文件中,文本用引號(hào)括起來。
Print #FileNum, """" & Selection.Cells(RowCount, _
ColumnCount).Text & """";
' 檢查單元格是否位于最后一列。
If ColumnCount = Selection.Columns.Count Then
' 如果是,則寫入一個(gè)空行。
Print #FileNum,
Else
' 否則,則寫入一個(gè)逗號(hào)。
Print #FileNum, ",";
End If
' 開始 ColumnCount 循環(huán)的下一個(gè)迭代。
Next ColumnCount
' 開始 RowCount 循環(huán)的下一個(gè)迭代。
Next RowCount
' 關(guān)閉目標(biāo)文件。
Close #FileNum
End Sub

4. 運(yùn)行該宏之前,請選擇要導(dǎo)出的數(shù)據(jù),然后在“工具”菜單中指向“宏”并單擊“宏”。
5. 選擇 QuoteCommaExport 宏,然后單擊“運(yùn)行”。

計(jì)算包含公式、文本或數(shù)字的單元格數(shù)量
在 Excel 中,您可以對包含公式、文本或數(shù)字的工作表中的單元格數(shù)量進(jìn)行計(jì)算,方法是使用“定位條件”對話框選擇單元格,然后運(yùn)行計(jì)算所選單元格數(shù)量的宏。例如,當(dāng)您需要設(shè)置表格以確定合計(jì)列的每一行是否都包含公式而不用手動(dòng)檢查每一行時(shí),此方法可能很有用。
選擇單元格
要選擇公式、文本或數(shù)字,請執(zhí)行以下步驟:
1. 在“編輯”菜單中,單擊“定位”,然后單擊“定位條件”。
2. 在“定位條件”對話框中,要選擇所有公式,請單擊“公式”并確保選中“數(shù)字”、“文本”、“邏輯值”以及“錯(cuò)誤”復(fù)選框。要選擇文本,請選擇“常量”選項(xiàng),然后僅單擊并選中“文本”復(fù)選框。要選擇數(shù)字,請選擇“常量”選項(xiàng),然后僅單擊并選中“數(shù)字”復(fù)選框。
計(jì)算所選單元格數(shù)量的 VBA 代碼
要計(jì)算所選的單元格數(shù)量并在消息框中顯示計(jì)算結(jié)果,請使用以下程序:
Sub Count_Selection()
Dim cell As Object
Dim count As Integer
count = 0
For Each cell In Selection
count = count + 1
Next cell
MsgBox count & " item(s) selected"
End Sub

您可以將此程序指定給一個(gè)命令按鈕,這樣,當(dāng)您單擊該按鈕時(shí),將顯示所選項(xiàng)的數(shù)量。

使用 Saved 屬性確定工作簿是否已發(fā)生更改
可以通過檢查工作簿的 Saved 屬性來確定工作簿是否已發(fā)生更改。根據(jù)工作簿是否發(fā)生了更改,Saved 屬性將返回 True 或 False 值。
注意:用戶除了可以通過“事件”設(shè)置 Saved 屬性外,還可以通過代碼將其設(shè)置為 True 或 False。本節(jié)包含的示例宏說明了如何在這兩種情況下使用 Saved 屬性。
工作表中的各種情況(例如存在可變函數(shù))都可能會(huì)影響 Saved 屬性?勺兒瘮(shù)是指工作表中每次發(fā)生更改時(shí)都會(huì)重新計(jì)算的函數(shù),而不管發(fā)生的更改是否影響到這些函數(shù)。某些常見的可變函數(shù)包括 RAND()、NOW()、TODAY() 和 OFFSET()。
如果活動(dòng)工作簿包含未保存的更改,第一個(gè)宏將顯示如下消息:
Sub TestForUnsavedChanges()
If ActiveWorkbook.Saved = False Then
MsgBox "This workbook contains unsaved changes."
End If
End Sub

下一個(gè)宏將關(guān)閉包含示例代碼的工作簿并放棄對工作簿所做的所有更改:
Sub CloseWithoutChanges()
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

下一個(gè)宏將關(guān)閉包含示例代碼的工作簿并放棄對工作簿所做的所有更改:
Sub CloseWithoutChanges()
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

下面的示例宏也將關(guān)閉工作簿并放棄更改:
Sub CloseWithoutChanges()
ThisWorkbook.Close SaveChanges:=False
End Sub


合并數(shù)據(jù)列
在 Excel 中,可以使用宏合并兩個(gè)相鄰列中的數(shù)據(jù)并在包含數(shù)據(jù)的右側(cè)列中顯示結(jié)果,完全不需要手動(dòng)設(shè)置公式。本節(jié)包含的示例宏就可以實(shí)現(xiàn)此功能。
Sub ConcatColumns()
Do While ActiveCell <> "" ' 一直循環(huán),直到活動(dòng)單元格為空。
ActiveCell.Offset(0, 1).FormulaR1C1 = _
ActiveCell.Offset(0, -1) & " " & ActiveCell.Offset(0, 0)
ActiveCell.Offset(1, 0).Select
Loop
End Sub

要使用宏,請執(zhí)行以下步驟:
1. 打開包含數(shù)據(jù)的工作簿。
2. 按 ALT+F11 組合鍵激活“Visual Basic 編輯器”。
3. 在“插入”菜單中,單擊“模塊”以插入一個(gè)模塊。在模塊的代碼窗口中鍵入上面的宏。
4. 單擊“文件”菜單中的“關(guān)閉并返回到 Microsoft Excel”。
5. 選擇包含要合并的數(shù)據(jù)的工作表。
6. 單擊要合并的右側(cè)數(shù)據(jù)列的第一個(gè)單元格。例如,如果單元格 A1:A100 和 B1:B100 包含數(shù)據(jù),則單擊單元格 B1。
7. 在“工具”菜單中,指向“宏”并單擊“宏”。選擇 ConcatColumns 宏并單擊“運(yùn)行”。
注意:可以用語句 ActiveCell.Offset(0, 1).Formula 替換語句 ActiveCell.Offset(0, 1).FormulaR1C1。如果僅使用文本和數(shù)字(不包含公式),那么兩個(gè)語句的效果相同。第一個(gè)語句末尾使用的 R1C1 表示第一行的第一列,這是 Excel 幫助主題中大多數(shù)示例使用的形式。

數(shù)組中的總行數(shù)和總列數(shù)
在 Excel 中,可以使用數(shù)組來計(jì)算和操作工作表中的數(shù)據(jù),還可以使用宏將某個(gè)范圍內(nèi)的單元格中的值存儲(chǔ)到一個(gè)數(shù)組中。本節(jié)中的示例宏代碼將在一個(gè)矩形單元格區(qū)域中添加一行和一列,以包含該區(qū)域中每一行和每一列中的單元格總數(shù)。
具體的步驟是,代碼從活動(dòng)工作表上活動(dòng)單元格周圍的當(dāng)前單元格區(qū)域中讀取數(shù)據(jù)。宏將這些數(shù)據(jù)存儲(chǔ)在一個(gè)數(shù)組中,計(jì)算每一行和每一列中的單元格總數(shù),然后將輸出顯示在工作表中。數(shù)組的大小由當(dāng)前區(qū)域中的單元格數(shù)量決定。
注意:此宏不會(huì)在工作表中添加任何公式,因此如果該范圍內(nèi)的單元格總數(shù)有變化,則必須重新運(yùn)行宏。
使用以下示例之前,請執(zhí)行以下步驟:
1. 打開一個(gè)新工作簿。
2. 在“工具”菜單中,指向“宏”,然后單擊“Visual Basic 編輯器”(或者簡單地按下 ALT+F11 組合鍵)。在“Visual Basic 編輯器”中的“插入”菜單中,單擊“模塊”。
將以下示例代碼鍵入或粘貼到模塊中:
Sub TotalRowsAndColumns()
' 此宏假定您已從
' 要計(jì)算單元格總數(shù)的矩形區(qū)域內(nèi)
' 選擇了一個(gè)單元格或一組單元格。行和列的單元格總數(shù)將出現(xiàn)在
' 當(dāng)前區(qū)域下面的行和右側(cè)的列中。
Dim r As Integer
Dim c As Integer
Dim i As Integer
Dim j As Integer
Dim myArray As Variant
' 將 myArray 聲明為變量將使數(shù)組可以接收
' 一組單元格。此時(shí),數(shù)組將自動(dòng)轉(zhuǎn)換為
' 以下標(biāo) myArray(1,1) 開始的數(shù)組。
' 指當(dāng)前所選單元格周圍的區(qū)域。
With Selection.CurrentRegion
r = .Rows.Count
c = .Columns.Count
' 重新計(jì)算總行數(shù)和總列數(shù)并將結(jié)果存儲(chǔ)到數(shù)組中。
myArray = .Resize(r + 1, c + 1)
' 在下面的嵌套循環(huán)中,變量 i 跟蹤
' 行號(hào),變量 j 跟蹤
' 列號(hào)。j 在可用列中每循環(huán)一次,
' i 就遞增一,而 j
' 則重新從一到 c 循環(huán)一次。
For i = 1 To r
For j = 1 To c
' 行 i 的總數(shù)
myArray(i, c + 1) = myArray(i, c + 1) + myArray(i, j)
' 列 j 的總數(shù)
myArray(r + 1, j) = myArray(r + 1, j) + myArray(i, j)
' 總計(jì)
myArray(r + 1, c + 1) = myArray(r + 1, c + 1) + myArray(i, j)
Next j
Next i
' 將數(shù)組返回工作表,數(shù)組中現(xiàn)在包含一個(gè)
' 新行和一個(gè)新列,用于存儲(chǔ)總數(shù)。
.Resize(r + 1, c + 1) = myArray
End With
End Sub

3. 突出顯示要求和區(qū)域中的一個(gè)單元格,在“工具”菜單中,指向“宏”并單擊“宏”。
4. 選擇 TotalRowsAndColumns 宏,然后單擊“運(yùn)行”。
注意:要執(zhí)行與本示例中的運(yùn)算類似的運(yùn)算,可以修改宏代碼。例如,要對選定范圍內(nèi)的單元格中包含的值進(jìn)行減法、乘法或除法運(yùn)算,可以更改數(shù)學(xué)運(yùn)算符。

結(jié)論
本文介紹了各種 VBA 宏,使用這些宏可以減少使用工作表所需的工作量。此外,您還可以修改本文介紹的大多數(shù)宏以擴(kuò)展它們的功能。始終記住可以在工具或提示庫中添加更多宏,您將會(huì)受益匪淺。


VBA系列講座(1):VBA是什么?
 

1.1 VBA是什么
  直到90年代早期,使應(yīng)用程序自動(dòng)化還是充滿挑戰(zhàn)性的領(lǐng)域.對每個(gè)需要自動(dòng)化的應(yīng)用程序,人們不得不學(xué)習(xí)一種不同的自動(dòng)化語言.例如:可以用EXCEL的宏語言來使EXCEL自動(dòng)化,使用WORD BASIC使WORD自動(dòng)化,等等.微軟決定讓它開發(fā)出來的應(yīng)用程序共享一種通用的自動(dòng)化語言--------Visual Basic For Application(VBA),可以認(rèn)為VBA是非常流行的應(yīng)用程序開發(fā)語言VASUAL BASIC 的子集.實(shí)際上VBA是"寄生于"VB應(yīng)用程序的版本.VBA和VB的區(qū)別包括如下幾個(gè)方面:
  1. VB是設(shè)計(jì)用于創(chuàng)建標(biāo)準(zhǔn)的應(yīng)用程序,而VBA是使已有的應(yīng)用程序(EXCEL等)自動(dòng)化
  2. VB具有自己的開發(fā)環(huán)境,而VBA必須寄生于已有的應(yīng)用程序.
  3. 要運(yùn)行VB開發(fā)的應(yīng)用程序,用戶不必安裝VB,因?yàn)閂B開發(fā)出的應(yīng)用程序是可執(zhí)行文件(*.EXE),而VBA開發(fā)的程序必須依賴于它的"父"應(yīng)用程序,例如EXCEL.
  盡管存在這些不同,VBA和VB在結(jié)構(gòu)上仍然十分相似.事實(shí)上,如果你已經(jīng)了解了VB,會(huì)發(fā)現(xiàn)學(xué)習(xí)VBA非?.相應(yīng)的,學(xué)完VBA會(huì)給學(xué)習(xí)VB打下堅(jiān)實(shí)的基礎(chǔ).而且,當(dāng)學(xué)會(huì)在EXCEL中用VBA創(chuàng)建解決方案后,即已具備在WORD ACCESS OUTLOOK FOXPRO PROWERPOINT 中用VBA創(chuàng)建解決方案的大部分知識(shí).
  * VBA一個(gè)關(guān)鍵特征是你所學(xué)的知識(shí)在微軟的一些產(chǎn)品中可以相互轉(zhuǎn)化.
  * VBA可以稱作EXCEL的“遙控器”.
  VBA究竟是什么?更確切地講,它是一種自動(dòng)化語言,它可以使常用的程序自動(dòng)化,可以創(chuàng)建自定義的解決方案.
   此外,如果你愿意,還可以將EXCEL用做開發(fā)平臺(tái)實(shí)現(xiàn)應(yīng)用程序.
1.2 EXCEL環(huán)境中基于應(yīng)用程序自動(dòng)化的優(yōu)點(diǎn)
  也許你想知道VBA可以干什么?使用VBA可以實(shí)現(xiàn)的功能包括:
  1. 使重復(fù)的任務(wù)自動(dòng)化.
  2. 自定義EXCEL工具欄,菜單和界面.
  3. 簡化模板的使用.
  4. 自定義EXCEL,使其成為開發(fā)平臺(tái).
  5. 創(chuàng)建報(bào)表.
  6. 對數(shù)據(jù)進(jìn)行復(fù)雜的操作和分析.
  用EXCEL作為開發(fā)平臺(tái)有如下原因:
  1. EXCEL本身功能強(qiáng)大,包括打印,文件處理,格式化和文本編輯.
  2. EXCEL內(nèi)置大量函數(shù).
  3. EXCEL界面熟悉.
  4. 可連接到多種數(shù)據(jù)庫.
  用其他語言開發(fā)應(yīng)用程序,一半的工作是編寫一些基本功能的模塊,包括文件的打開和保存,打印,復(fù)制等.而用EXCEL作為開發(fā)平臺(tái),則由于EXCEL已經(jīng)具備這些基本功能,你要做的只是使用它.
1.3 錄制簡單的宏
  在介紹學(xué)習(xí)VBA之前,應(yīng)該花幾分鐘錄制一個(gè)宏。
  新術(shù)語:“宏”,指一系列EXCEL能夠執(zhí)行的VBA語句。
  以下將要錄制的宏非常簡單,只是改變單元格顏色。請完成如下步驟:
  1)打開新工作簿,確認(rèn)其他工作簿已經(jīng)關(guān)閉。
  2)選擇A1單元格。調(diào)出“常用”工具欄。
  3)選擇“工具”—“宏”—“錄制新宏”。
  4)輸入“改變顏色”作為宏名替換默認(rèn)宏名,單擊確定,注意,此時(shí)狀態(tài)欄中顯示“錄制”,特別是“停止錄制”工具欄也顯示出來。替換默認(rèn)宏名主要是便于分別這些宏。
  ★ 宏名最多可為255個(gè)字符,并且必須以字母開始。其中可用的字符包括:字母、數(shù)字和下劃線。宏名中不允許出現(xiàn)空格。通常用下劃線代表空格。
  5)選擇“格式”的“單元格”,選擇“圖案”選項(xiàng)中的紅色,單擊“確定”。
  6)單擊“停止錄制”工具欄按鈕,結(jié)束宏錄制過程。
  ※ 如果“停止錄制”工具欄開始并未出現(xiàn),請選擇“工具”—“宏”—“停止錄制”。
  錄制完一個(gè)宏后就可以執(zhí)行它了。
1.4 執(zhí)行宏
  當(dāng)執(zhí)行一個(gè)宏時(shí),EXCEL按照宏語句執(zhí)行的情況就像VBA代碼在對EXCEL進(jìn)行“遙控”。但VBA的“遙控”不僅能使操作變得簡便,還能使你獲得一些使用EXCEL標(biāo)準(zhǔn)命令所無法實(shí)現(xiàn)的功能。而且,一旦熟悉了EXCEL的“遙控”,你都會(huì)奇怪自己在沒有這些“遙控”的情況下,到底是怎么熬過來的。要執(zhí)行剛才錄制的宏,可以按以下步驟進(jìn)行:
  1)選擇任何一個(gè)單元格,比如A3。
  2)選擇“工具”—“宏”—“宏”,顯示“宏”對話框。
  3)選擇“改變顏色”,選擇“執(zhí)行”,則A3單元格的顏色變?yōu)榧t色。試著選擇其它單元格和幾個(gè)單元格組成的區(qū)域,然后再執(zhí)行宏,以便加深印象。
1.5 查看錄制的代碼
  到底是什么在控制EXCEL的運(yùn)行呢?你可能有些疑惑.好,讓我們看看VBA的語句吧.
  1)選擇“工具”—“宏”—“宏”,顯示“宏”對話框。
  2)單擊列表中的“改變顏色”,選擇“編輯”按鈕。
  此時(shí),會(huì)打開VBA的編輯器窗口(VBE)。關(guān)于該編輯器,以后再詳細(xì)說明,先將注意力集中到顯示的代碼上。代碼如下:(日期和姓名會(huì)有不同)
Sub 改變顏色()

’ 改變顏色 Macro
’ xw 記錄的宏 2000-6-10


With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
將來會(huì)十分熟悉這種代碼,雖然現(xiàn)在它們看上去像一種奇怪的外語。學(xué)習(xí)VBA或編程語言在某種程度上比較像在學(xué)習(xí)一種外語。
Sub 改變顏色():這是宏的名稱。
中間的以“ ’”開頭的五行稱為“注釋”,它在錄制宏時(shí)自動(dòng)產(chǎn)生。
以With 開頭到End With 結(jié)束的結(jié)構(gòu)是With結(jié)構(gòu)語句,這段語句是宏的主要部分。注意單詞“selection”,它代表“突出顯示的區(qū)域”(即:選定區(qū)域)。With Selection.Interior :它讀作“選擇區(qū)域的的內(nèi)部”.這整段語句設(shè)置該區(qū)域內(nèi)部的一些“屬性”。
其中:
.ColorIndex = 3: 將該內(nèi)部設(shè)為紅色。注意:有一小圓點(diǎn),它的作用在于簡化語句,小圓點(diǎn)代替出現(xiàn)在With后的詞,它是With結(jié)構(gòu)的一部分。另外:紅色被數(shù)字化為3.(紅色警戒是否可稱作:3號(hào)警戒,嗯?)有興趣的話,你將3改為其他數(shù)字試試看。
.Pattern = xlSolid:設(shè)置該區(qū)域的內(nèi)部圖案。由于是錄制宏,所以,雖然你并未設(shè)置這一項(xiàng),宏仍然將其記錄下來(因?yàn)樵?ldquo;圖案”選項(xiàng)中有此一項(xiàng),只是你為曾設(shè)置而已)。xlSolid表示純色。
.PatternColorIndex = xlAutomatic:表示內(nèi)部圖案底紋顏色為自動(dòng)配色。
End With:結(jié)束With 語句。
End Sub:整個(gè)宏的結(jié)束語
1.6 編輯錄制的代碼
   在上一節(jié),我們錄制了一個(gè)宏并查看了代碼,代碼中有兩句實(shí)際上并不起作用。哪兩句?現(xiàn)在,在宏中作一個(gè)修改,刪除多余行,直到和下面代碼相同:
Sub 改變顏色()

’ 改變顏色 Macro
’ xw 記錄的宏 2000-6-10


With Selection.Interior
.ColorIndex = 3
End With
End Sub
  完成后,在工作表中試驗(yàn)一下。你會(huì)發(fā)現(xiàn)結(jié)果和修改前的狀況一樣。在With 語句前加入一行:
Range("A5").Select
  試著運(yùn)行該宏,則無論開始選擇哪個(gè)單元格,宏運(yùn)行結(jié)果都是使A5單元格變紅.
  現(xiàn)在可以看到,編輯錄制的宏同樣非常簡單。需要編輯宏是因?yàn)橐韵氯齻(gè)方面的原因。一:在錄制中出錯(cuò)而不得不修改。二:錄制的宏中有多余的語句需要?jiǎng)h除,提高宏的運(yùn)行速度。三:希望增加宏的功能。比如:加入判斷或循環(huán)等無法錄制的語句。
1.7 錄制宏的局限性
  希望自動(dòng)化的許多EXCEL過程大多都可以用錄制宏來完成.但是宏記錄器存在以下局限性.通過宏記錄器無法完成的工作有:
  1)錄制的宏無判斷或循環(huán)能力.
  2)人機(jī)交互能力差,即用戶無法進(jìn)行輸入,計(jì)算機(jī)無法給出提示.
  3)無法顯示EXCEL對話框.
  4)無法顯示自定義窗體.
1.8 小結(jié)
  本學(xué)時(shí)中,你已經(jīng)掌握了VBA的一些基礎(chǔ)知識(shí),你會(huì)錄制宏、編輯宏而且了解了錄制宏的局限性.你很努力.并且已經(jīng)為將來學(xué)習(xí)VBA甚至VB等編程語言打下了基礎(chǔ).關(guān)鍵是你已經(jīng)了解了一個(gè)謎底,就是說,你了解了什么是編程.下面是些小練習(xí),做完后才可以去玩喲.
  思考:
  1)VBA只能用于EXCEL嗎?
  2)VBA是基于哪種語言?
  3)說說EXCEL和VBA的關(guān)系.
  4)為什么要用宏?