』[杂谈八卦]excel学习记录本(转载)
访问数:2416 回复数:97
作者: 发表日期:2010-11-26 20:05:58
1.Sub 空值替换为0()
2.’
3.’ 空值替换为0 Macro
4.’ 宏由 wy 录制,时间: 2009-4-13
5.’
6.’ 快捷键: Ctrl+d
7.’
8.Dim lastRow As Long
9.Dim nowRow As Long
10.Dim lastColumn As Long
11.Dim nowColumn As Long
12.Dim r As Long
13.Dim c As Long
14.
15.
16.Dim nowWorksheet As Integer
17.
18.’ 准确返回当前工作表已经使用的最后一行的行号, ActiveSheet.UsedRange.Row 这句返回的是已经使用区域中第一行的行号, activesheet.UsedRange.Rows.Count 返回的是当前工作表已经使用区域的行数
19.lastRow = ActiveSheet.UsedRange.row - 1 + ActiveSheet.UsedRange.Rows.Count
20.nowRow = ActiveSheet.UsedRange.row
21.lastColumn = ActiveSheet.UsedRange.column - 1 + ActiveSheet.UsedRange.Colum .Count
22.nowColumn = ActiveSheet.UsedRange.column
23.
24.For r = nowRow To lastRow
25.
For c = nowColumn To lastColumn
26.
If Len(Trim(ActiveSheet.Cells(r, c).Value)) = 0 Then
27.
ActiveSheet.Cells(r, c).Value = 0
28.
29.
30.Next r
31.
32.End Sub
http://fengzi-nest.javaeye.com/blog/366980
作者: 回复日期:2010-11-26 20:06:00
高端 2
作者: 回复日期:2010-11-26 20:12:00
加油~
作者: 回复日期:2010-11-26 20:13:00
迷茫?这是啥? 4
作者: 回复日期:2010-11-27 11:07:00
要查看 Microsoft Office Excel 2007 中的可用图案,请按照下列步骤操作:
在“开始”选项卡上,单击“单元格”组中的“格式”。然后,单击“设置单元格格式”。
在“设置单元格格式”对话框中,单击“填充”选项卡。
“图案”下拉列表中将显示可用图案。以下宏中使用的图案(引用的变量名称为 xlGray16)是第一行右数第五个图案。
以下宏将当前选定区域的图案隔行设置为 xlGray16。
回到顶端
Visual Basic 过程示例
Sub ShadeEveryOtherRow()
Dim Counter As Integer
’For every row in the current selection...
For Counter = 1 To Selection.Rows.Count
’If the row is an odd number (within the selection)...
If Counter Mod 2 = 1 Then
’Set the pattern to xlGray16.
Selection.Rows(Counter).Interior.Pattern = xlGray16
End Sub
注意:只能对选定区域中的行运行该宏。如果在运行该宏后添加了任何新数据行,则必须选定所有新数据行并运行该宏。
http://su ort.microsoft.com/kb/213616
作者: 回复日期:2010-11-27 11:19:00
使用 VBA 代码计算选定单元格
要计算所选内容中的单元格的个数,并将结果显示在消息框中使用以下过程:
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 &am item(s) selected
End Sub
http://su ort.microsoft.com/kb/213507
作者: 回复日期:2010-11-27 12:41:00
刚才用DATEIF函数,同样的公式在另一个表里老出错,经人点拨,发现原来是日期格式输入错误,excel认的日期连接符是 - 不是 .
作者: 回复日期:2010-11-27 12:52:00
INDIRECT函数返回文本字符串所指定的引用,就是用文本描述单元格(或单元格区域)的名称.
它有两个参数,第一个为引用,第二个为类型.其中第二个参数可省(此时为A1样式引用).
INDIRECT(a" am 5*(ROW()-1)+COLUMN()-1)
公式先用ROW()得到当前单元格的行号,用COLUMN()函数得到当前单元格的列号,再用5*(ROW()-1)+COLUMN()-1得到一个数值与字符A连接成一个单元格地址.
假定当前单元格为C5,公式结果:
=INDIRECT(a" am 5*(5-1)+3-1)
=INDIRECT(a" am 22)
=A22
54
作者: 回复日期:2010-11-29 12:30:00
Selection.Find(What:=bm, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColum , SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True
What:=bm,查找的内容;(要搜索的数据。可为字符串或任意 Microsoft Excel 数据类型。)
After:=ActiveCell,找到该内容后激活内容所在的单元格;(表示搜索过程将从其之后开始进行的单元格。此单元格对应于从用户界面搜索时的活动单元格的位置。请注意:After 必须是区域中的单个单元格。要记住搜索是从该单元格之后开始的;直到此方法绕回到此单元格时,才对其进行搜索。如果不指定该参数,搜索将从区域的左上角的单元格之后开始。)
LookIn:=xlValues,(信息类型。)
LookAt:=xlPart,(可为以下 XlLookAt 常量之一:xlWhole 或 xlPart)
SearchOrder:=xlByColum ,(可为以下 XlSearchOrder 常量之一:xlByRows 或 xlByColum )
SearchDirection:=xlNext,(搜索的方向)
MatchCase:=False,(如果为 True,则搜索区分大小写。默认值为 False。)
SearchFormat:=False,(只在已经选择或***了双字节语言支持时适用。如果为 True,则双字节字符只与双字节字符匹配。如果为 False,则双字节字符可与其对等的单字节字符匹配。)
该段代码的意思是:查找bm(这里bm应该是一个表达式),找到该内容,激活其所在的单元格,然后选择性黏贴(SkipBlanks:=True,则不将剪贴板上区域中的空白单元格粘贴到目标区域中。默认值为 False
作者: 回复日期:2010-11-29 12:32:00
Colum (H:H).Select
Selection.Replace What:= &am Chr(63) &am , Replacement:=, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
作者: 回复日期:2010-11-29 12:45:00
如图,在Excel的单元格格式中定义小数位数与使用四舍五入函数ROUND的“求和”结果是有区别的,同样的数据,求和后居然得出了不同的结果。再观察A列和B列,不难发现这两列的结果是一致的,也就是说B列并没有真正实现四舍五入,只是把小数位数隐藏了。但是CD两列的结果是相同的,说明使用函数能实现真正的四舍五入。
所以,虽然,Excel的单元格格式中允许定义小数位数,但如果采用这种四舍五入的方法,在财务运算中常常会出现误差,而这是财务运算所不允许的。
在Excel提供的“数学与三角函数”中提供了函数:ROUND(number,num_digits),它的功能就是根据指定的位数将数字四舍五入。这个函数有两个参数,分别是number和num_digits,其中number就是将要进行四舍五入的数字,num_digits则是希望得到数字的小数点后的位数。
作者: 回复日期:2010-12-2 23:45:00
本示例为设置密码窗口 (1)
If A lication.I utBox(请输入密码:) = 1234 Then
[A1] = 1 ’密码正确时执行
Else: MsgBox 密码错误,即将退出! ’此行与第2行共同设置密码
End If
本示例为设置密码窗口 (1)
X = MsgBox(是否真的要结帐?, vbYesNo)
If X = vbYes Then
Close
本示例为设置工作表密码
ActiveSheet.Protect Pa word:=641112 ’ 保护工作表并设置密码
ActiveSheet.U rotect Pa word:=641112 ’撤消工作表保护并取消密码
作者: 回复日期:2010-12-2 23:46:00
’本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容
For Each w In Workbooks
If w.Name ThisWorkbook.Name Then
w.Close SaveChanges:=True
End If
Next w
’每次打开工作簿时,本示例都最大化 Microsoft Excel 窗口。
A lication.WindowState = xlMaximized
’本示例显示活动工作表的名称。
MsgBox The name of the active sheet is &am ActiveSheet.Name
’本示例保存当前活动工作簿的副本。
ActiveWorkbook.SaveCopyAs C:\TEMP\XXXX.XLS
’下述过程激活工作簿中的第四张工作表。
Sheets(4).Activate
’下述过程激活工作簿中的第1张工作表。
Worksheets(1).Activate
’本示例通过将 Saved 属性设为 True 来关闭包含本段代码的工作簿,并放弃对该
工作簿的任何更改。
ThisWorkbook.Saved = True
ThisWorkbook.Close
’本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自
动进行重新计算。
Worksheets(1).EnableCalculation = False
’下述过程打开 C 盘上名为 MyFolder 的文件夹中的 MyBook.xls 工作簿。
Workbooks.Open (C:\MyFolder\MyBook.xl quot;)
’本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值。
MsgBox Worksheets(Sheet1).Range(A1).Value
作者: 回复日期:2010-12-2 23:49:00
本示例显示活动工作簿中每个工作表的名称
For Each ws In Worksheets
MsgBox ws.Name
Next ws
本示例向活动工作簿添加新工作表 , 并设置该工作表的名称?
Set NewSheet = Worksheets.Add
NewSheet.Name = current Budget
本示例将新建的工作表移到工作簿的末尾
’Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Move After:=Sheets(Sheets.Count)
End Sub
本示例将新建工作表移到工作簿的末尾
’Private Sub A _WorkbookNewSheet(ByVal Wb As Workbook, _
ByVal Sh As Object)
Sh.Move After:=Wb.Sheets(Wb.Sheets.Count)
End Sub
本示例新建一张工作表,然后在第一列中列出活动工作簿中的所有工作表的名称。
Set NewSheet = Sheets.Add(Type:=xlWorksheet)
For i = 1 To Sheets.Count
NewSheet.Cells(i, 1).Value = Sheets(i).Name
Next i
作者: 回复日期:2010-12-2 23:51:00
本示例将第十行移到窗口的最上面?
Worksheets(Sheet1).Activate
ActiveWindow.ScrollRow = 10
当计算工作簿中的任何工作表时,本示例对第一张工作表的 A1:A100 区域进行排序
’Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Worksheets(1)
.Range(a1:a100).Sort Key1:=.Range(a1)
End With
End Sub
本示例显示工作表 Sheet1 的打印预览。
Worksheets(Sheet1).PrintPreview
本示例保存当前活动工作簿?
ActiveWorkbook.Save
本示例保存所有打开的工作簿,然后关闭 Microsoft Excel。
For Each w In A lication.Workbooks
w.Save
Next
A lication.Quit
下例在活动工作簿的第一张工作表前面添加两张新的工作表?
Worksheets.Add Count:=2, Before:=Sheets(1)
本示例设置 15 秒后运行 my_Procedure 过程,从现在开始计时。
A lication.OnTime Now + TimeValue(00:00:15), my_Procedure
本示例设置 my_Procedure 在下午 5 点开始运行。
A lication.OnTime TimeValue(17:00:00), my_Procedure
本示例撤消前一个示例对 OnTime 的设置。
A lication.OnTime EarliestTime:=TimeValue(17:00:00), _
Procedure:=my_Procedure, Schedule:=False
作者: 回复日期:2010-12-2 23:52:00
每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度。
’Private Sub Worksheet_Calculate()
Colum (A:F).AutoFit
End Sub
本示例使活动工作簿中的计算仅使用显示的数字精度。
ActiveWorkbook.PrecisionAsDi layed = True
本示例将工作表 Sheet1 上的 A1:G37 区域剪下,并放入剪贴板。
Worksheets(Sheet1).Range(A1:G37).Cut
Calculate 方法
计算所有打开的工作簿、工作簿中的一张特定的工作表或者工作表中指定区域的单元
格,如下表所示:
’要计算 ’依照本示例
所有打开的工作簿 ’ A lication.Calculate (或只是 Calculate
指定工作表 ’计算指定工作表Sheet1 Worksheets
(Sheet1).Calculate
指定区域 ’Worksheets(1).Rows(2).Calculate
本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自动
进行重新计算。
Worksheets(1).EnableCalculation = False
本示例计算 Sheet1 已用区域中 A 列、B 列和 C 列的公式。
Worksheets(Sheet1).UsedRange.Colum (A:C).Calculate
本示例更新当前活动工作簿中的所有链接?
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
本示例设置第一张工作表的滚动区域?
Worksheets(1).ScrollArea = a1:f10
本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿。
Set NewBook = Workbooks.Add
fName = A lication.GetSaveAsFilename
Loop Until fName False
NewBook.SaveAs Filename:=fName
本示例打开 Analysis.xls 工作簿,然后运行 Auto_Open 宏。
Workbooks.Open ANALYSIS.XLS
ActiveWorkbook.RunAutoMacros xlAutoOpen
本示例对活动工作簿运行 Auto_Close 宏,然后关闭该工作簿。
With ActiveWorkbook
.RunAutoMacros xlAutoClose
.Close
End With
作者: 回复日期:2010-12-2 23:53:00
在本示例中,Microsoft Excel 向用户显示活动工作簿的路径和文件名称。
’Sub UseCanonical()
Di lay the full path to user.
MsgBox ActiveWorkbook.FullNameURLEncoded
End Sub
本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)。
MsgBox ActiveWorkbook.FullName
本示例关闭 Book1.xls,并放弃所有对此工作簿的更改。
Workbooks(BOOK1.XLS).Close SaveChanges:=False
本示例关闭所有打开的工作簿。如果某个打开的工作簿有改变,Microsoft Excel
将显示询问是否保存更改的对话框和相应提示。
Workbooks.Close
本示例在打印之前对当前活动工作簿的所有工作表重新计算?
’Private Sub Workbook_BeforePrint(Cancel As Boolean)
For Each wk In Worksheets
wk.Calculate
Next
End Sub
本示例对查询表一中的第一列数据进行汇总,并在数据区域下方显示第一列数据的总
和。
Set c1 = Sheets(" heet1).QueryTables(1).ResultRange.Colum (1)
c1.Name = Column1
c1.End(xlDown).Offset(2, 0).Formula = =sum(Column1)
本示例取消活动工作簿中的所有更改?
ActiveWorkbook.RejectAllChanges
本示例在商业问题中使用规划求解函数,以使总利润达到最大值。SolverSave 函数
将当前问题保存到活动工作表上的某一区域。
Worksheets(Sheet1).Activate
SolverReset
SolverOptio Precision:=0.001
SolverOK SetCell:=Range(TotalProfit), _
MaxMinVal:=1, _
ByChange:=Range(C4:E6)
SolverAdd CellRef:=Range(F4:F6), _
Relation:=1, _
FormulaText:=100
SolverAdd CellRef:=Range(C4:E6), _
Relation:=3, _
FormulaText:=0
SolverAdd CellRef:=Range(C4:E6), _
Relation:=4
SolverSolve UserFinish:=False
SolverSave SaveArea:=Range(A33)
本示例隐藏 Chart1、Chart3 和 Chart5。
Charts(Array(Chart1, Chart3, Chart5)).Visible = False
当激活工作表时,本示例对 A1:A10 区域进行排序。
’Private Sub Worksheet_Activate()
Range(a1:a10).Sort Key1:=Range(a1), order:=xlAscending
End Sub
本示例更改 Microsoft Excel 链接。
ActiveWorkbook.ChangeLink c:\excel\book1.xl quot;, _
c:\excel\book2.xl quot;, xlExcelLinks
本示例启用受保护的工作表上的自动筛选箭头?
ActiveSheet.EnableAutoFilter = True
ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
作者: 回复日期:2010-12-2 23:55:00
看起来好复杂
作者: 回复日期:2010-12-3 15:48:00
=MIN(IF(E2:E65536=,ROW(2:65536))) {=MIN(IF(E2:E65536=,ROW(2:65536)))} 这两个运算的结果不同,为什么结果不一样
===================================
最佳***
不是你想的那么简单,不光是加大括号的区别,这个大括号不是说你在公式前后加上去就可以的,是要在输入完=MIN(IF(E2:E65536=,ROW(2:65536)))后,按ctrl+shift+enter 3键组合结束输入的,这时候系统会把这个公式当做数组公式来运行。
对于你的这个例子,电脑首先会把e2:e65536中的值1个1个的进行判断,如果是空则代入对应的2到65536的值,否则代入false,这样就产生了有65535个值的数组,下一步是min()在刚才得到的数组中返回最小值,false不参与运算,所以就返回了e2:e65536中的第一个为空单元格的行数.
而如果不加ctrl+shift+ente的公式,则电脑只会对E2进行判断,会返回错误值.对我有帮助
0回答时间:2010-11-30 16:05 | 我来评论 | 检举
回答者: levi_wzh 来自团队 OfficeR | 八级采纳率:32%
作者: 回复日期:2010-12-3 15:51:00
统计一列中不同数据的个数
求A1:A100范围内不重复数据的个数,某个数重复多次出现只算一个。有两种计算方法:
一是利用数组公式:
=SUM(1/COUNTIF(A1:A100,A1:A100))
输入完公式后按Ctrl+Shift+Enter键,让它自动加上数组公式符号{}。
二是利用乘积求和函数:
=SUMPRODUCT(1/COUNTIF(A1:A100,A1:A100))
作者: 回复日期:2010-12-3 17:20:00
一般只用excel加减乘除的人飘过1
作者: 回复日期:2010-12-3 19:56:00
MID函数的作用是返回文本字符串中从指定位置开始的特定数目的字符(该数目由用户指定)。
语法
MID(text,start_num,num_chars)
Text
是包含要提取字符的文本字符串。
Start_num
是文本中要提取的第一个字符的位置。文本中第一个字符的 start_num 为 1,以此类推。
Num_chars
指定希望 MID 从文本中返回字符的个数。
举例来说,如果在单元格中输入“=MID(Computer Fa quot;,1,8) ”,得到的结果就是“Computer”。
在生活中有很多例子可以用到MID函数,最常见的就是单位人员调查表中的通过***号码得出生日的例子。
首先在调查表中输入所有人员的***号码,注意一定要使用文本类型。
然后在需要显示生日的单元格中输入公式“=19" am MID(A2,7,2)年" am MID(A2,9,2)月" am MID(A2,11,2)日”,其中A2是指A2单元格中的内容,用户应当根据实际情况进行输入,单击回车键后,生日就自动计算出来了。
作者: 回复日期:2010-12-3 20:07:00
1. 在下面的语句中,变量 intX 与 intY 被声明为 Variant 类型 ;只有 intZ 被声明为 Integer 类型。
Dim intX, intY, intZ As Integer
在使用以下方法给ro和col取值时,当前位应在Cells(1,1)上,否则ro和col的值可能不对(MS Excel 2003):
Cells(1, 1).Select
ro = ActiveCell.CurrentRegion.Rows.Count
col = ActiveCell.CurrentRegion.Colum .Count
2. Excel Macro(宏)自定义函数中数组参数的传递,数组在函数中以传入的数组大小再定义数组,可以用如下例子说明(数组的下标定义一定要一样,即下标均为从1或0开始-即都使用或不使用Option Base 1):
Dim arr1(1), arr2(3), intLine as Integer
intLine=5
arr1(0)=1
arr1(1)=2
arr2(0)=5
call testfunction (intLine, arr1(), arr2())
......
Function testfunction(byVal intLine as Integer, arr1(),arr2()) ’数组参数一定是 byRef(默认值) 定义的,所以在函数中数组的改动会传出函数。
Dim arr3() as variant, intIndex as Integer
intIndex =ubound(arr1()) ’得到传入数组的维数
intIndex = intIndex+2
ReDim Preserve arr1(intIndex) ’重新定义数组,Preserve可以保持原值不丢失
ReDim arr3(intIndex)
End Function
3. 自动运行的宏:只需将宏的名改为Auto_Open即可。如果在打开时,不想运行自动宏,则先打开Excel,在“文件”中打开此Excel文件时,同时按住Shift,(不可直接双击文件管理中的Excel文件打开);或在“工具”- 宏- 安全性中设定安全级别。
4. 如何使用宏来去掉Excel文件里的宏:
Sub RmvMacro()
Dim Wk As Workbook, File As String
File = d:\testing
Set Wk = ActiveWorkbook
Wk.Sheets.Copy ’复制当前文件到一个新的文件,其中宏不会复制过去
A lication.Di layAlerts = False ’不显示警告信息(当有重复文件名等警告信息,直接覆盖)
ActiveWorkbook.Close savechanges:=True, Filename:=File ’将新文件存储为指定文件名
Wk.Close savechanges:=False ’原文件放弃改动并退出
End Sub
作者: 回复日期:2010-12-3 23:27:00
FormulaR1C1是公式输入方法
有中括号是相对于选定单元格的相对偏移量,-为向左或向上偏移,正数为右或下偏移。
无中括号为相对于选定单元格的绝对偏移量,没有负数
R和C待变“行”和“列”
如:选定单元格为C8
R[-1]C[-1]为B7单元格,行列都-1,R[1]C[2]为E9单元格,行+1,列+2
R1C1代表A1单元格,R5C6代表F5单元格
清楚了吗?
例:C1单元格为=A1+B1
Range(C1).FormulaR1C1 = =RC[-2]+RC[-1]
例:C1单元格为=A2+E3
Range(C1).FormulaR1C1 = =R[1]C[-2]+R[2]C[2]
作者: 回复日期:2010-12-3 23:32:00
从***号码中自动生成性别和生日
生成性别:(其中E2是***号码所在列)
双击性别所在列的第二行,然后输入下面公式,然后按ENTER键;再利用下拉方式将公式复制到该列的其他行中即可
=CHOOSE(MOD(IF(LEN(E2)=18,MID(E2,17,1),IF(LEN(E2)=15,RIGHT(E2,1),)),2)+1,女,男)
提取出生日期:(其中E2是***号码所在列)
双击出生日期所在列的第二行,然后输入下面公式,然后按ENTER键;再利用下拉方式将公式复制到该列的其他行中即可
=DATE(MID(E2,7,4),MID(E2,11,2),MID(E2,13,2))
计算年龄:(其中C3是出生日期所在列)
双击年龄所在列的第二行,然后输入下面公式,然后按ENTER键;再利用下拉方式将公式复制到该列的其他行中即可
=YEAR(NOW())-YEAR(C3)
作者: 回复日期:2010-12-4 15:36:00
[A65536].End(xlUp).row
在1995-2006年,excel工作簿包含65536行,但现在的office 2007中工作簿包含1048576行。[A65536]就是A列的最后一行的意思,这段话的意思就是,从A列最后一行向上找,找到有数据的行为止。
,该对象代表包含源区域的区域尾端的单元格。等同于按键 End+ 向上键、End+ 向下键、End+ 向左键或 End+ 向右键。Range 对象,只读。
expre ion.End(Direction)
expre ion
必需。 该表达式返回“应用于”列表中的对象之一。
Direction
XlDirection 类型,必需。所要移动的方向。
XlDirection 可为 XlDirection 常量之一。
xlDown
xlToRight
xlToLeft
xlUp
示例
本示例选定包含单元格 B4 的区域中 B 列顶端的单元格。
Range(B4).End(xlUp).Select
本示例选定包含单元格 B4 的区域中第 4 行尾端的单元格。
Range(B4).End(xlToRight).Select
本示例将选定区域从单元格 B4 延伸至第四行最后一个包含数据的单元格。
Worksheets(Sheet1).Activate
Range(B4, Range(B4).End(xlToRight)).Select
作者: 回复日期:2010-12-4 16:04:00
%CELL(info_type,reference)
Info_type
为一个文本值,指定所需要的单元格信息的类型。下面列出 info_type 的可能值及相应的结果。
Info_type 返回
addre quot; 引用中第一个单元格的引用,文本类型。
col 引用中单元格的列标。
color 如果单元格中的负值以不同颜色显示,则为 1,否则返回 0。
content quot; 引用中左上角单元格的值:不是公式。
filename 包含引用的文件名(包括全部路径),文本类型。如果包含目标引用的工作表尚未保存,则返回空文本 ()。
format 与单元格中不同的数字格式相对应的文本值。下表列出不同格式的文本值。如果单元格中负值以不同颜色显示,则在返回的文本值的结尾处加“-”;如果单元格中为正值或所有单元格均加括号,则在文本值的结尾处返回“()”。
如果单元格中为正值或全部单元格均加括号,则为 1,否则返回 0。
" refix 与单元格中不同的“标志前缀”相对应的文本值。如果单元格文本左对齐,则返回单引号 (’);如果单元格文本右对齐,则返回双引号 ();如果单元格文本居中,则返回插入字符 (^);如果单元格文本两端对齐,则返回反斜线 (\);如果是其他情况,则返回空文本 ()。
" rotect 如果单元格没有锁定,则为 0;如果单元格锁定,则为 1。
row 引用中单元格的行号。
type 与单元格中的数据类型相对应的文本值。如果单元格为空,则返回“b”。如果单元格包含文本常量,则返回“l”;如果单元格包含其他内容,则返回“v”。
width 取整后的单元格的列宽。列宽以默认字号的一个字符的宽度为单位。
Reference
表示要获取其有关信息的单元格。如果忽略,则在 info_type 中所指定的信息将返回给最后更改的单元格。下表描述 info_type 为“format”,以及引用为用内置数字格式设置的单元格时,函数 CELL 返回的文本值。
如果 Microsoft Excel 的格式为 CELL 返回值
常规 G
0 F0
#,##0 ,0
0.00 F2
#,##0.00 ,2
$#,##0_);($#,##0) C0
$#,##0_);[Red]($#,##0) C0-
$#,##0.00_);($#,##0.00) C2
$#,##0.00_);[Red]($#,##0.00) C2-
0% P0
0.00% P2
0.00E+00 S2
# ?/? 或 # ??/?? G
yy-m-d 或 yy-m-d h:mm 或 dd-mm-yy D4
d-mmm-yy 或 dd-mmm-yy D1
d-mmm 或 dd-mmm D2
mmm-yy D3
dd-mm D5
h:mm AM/PM D7
h:mm: AM/PM D6
h:mm D9
h:mm: D8
如果 CELL 公式中的 info_type 参数为“format”,而且以后又用自定义格式设置了单元格,则必须重新计算工作表以更新 CELL 公式。
说明
函数 CELL 用于与其他电子表格程序兼容。
示例
如果您将示例复制到空白工作表中,可能会更易于理解该示例。
操作方法
创建空白工作簿或工作表。
请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。
按 Ctrl+C。
在工作表中,选中单元格 A1,再按 Ctrl+V。
若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
数据
5-Mar
TOTAL
公式 说明(结果)
=CELL(row,A20) 单元格 A20 的行号 (20)
=CELL(format, A2) 第一个字符串的格式代码(D2,请参见上面的信息)
=CELL(content quot;, A3) 单元格 A3 的内容 (TOTAL)
作者: 回复日期:2010-12-4 16:41:00
Excel Home
论坛不错,另外微软官方帮助也不错。
club.excelhome.net
官方excel培训
http://office.microsoft.com/zh-cn/training/CR006183114.a x?CTT=97
作者: 回复日期:2010-12-4 17:47:00
写在this workbook上的程序,你打开工作簿程序就依功能自行执行。写入新插入的模块中的程序,除了少数程序像Sub Auto_Open()或Sub Auto_Close()等。除非你呼叫它,否则它是不会自行执行的。
作者: 回复日期:2010-12-4 19:30:00
插入一个模块,作为存储宏的容器。
--------------------------------------------------------------------------------
接下来做第二重要的事:在开始编写宏之前,需要先想好将宏保存在哪里。还记得模块吗?模块是存储宏的容器,它通过一个名为 VBA 项目的更大的容器附加到工作簿中。您需要在“Visual Basic 编辑器”(而不是电子表格)的“插入”菜单上选择“模块”,在编辑器中添加一个新模块。随后,“Visual Basic 编辑器”的主窗口内便会显示一个空白的模块窗口。
作者: 回复日期:2010-12-4 19:35:00
一个Do...Loop 循环,计算数据区域内的行数,直到遇到空行才停止。
--------------------------------------------------------------------------------
假设您要计算某一数据区域的行数,该数据区域可能很小,有时也可能非常大。这时您就需要使用 Do...Loop 循环。此类循环可以根据需要多次执行一个操作,无论该区域内的行数如何,它都会进行计算。另一种情况是,假设您要对包含不同行数的两个数据区域执行同一个操作,那么也需要使用 Do...Loop 循环。该循环可根据需要为每一个区域运行多次。循环如何知道需要执行多少次?您会告诉它。当循环遇到特定的数据(例如空白行或某些特殊文本)时,它便会停止运行。
您可以使用 While 条件或 Until 条件来指定 Do...Loop 循环何时停止。只要某个条件为真(或者在某个条件成立之前),循环不会停止。因此,对于在第一列中找到一个空白单元格便会停止的循环,您可以使用 While 条件,如下所示:
这里使用了 While 条件,因此只要受试单元格不是空白单元格,循环将一直运行。受试行为 x,(x,1) 是该行中的第一个单元格。符号 同时使用时表示“不等于”。之间不包含任何内容的一对引号则表示空白单元格。
如果希望循环在找到包含数字 365 的单元格之前一直运行,则可使用 Until 条件。无论使用哪种方式,都可以告诉循环如何知道何时停止。
作者: 回复日期:2010-12-4 21:56:00
STEP 1 :打开你的excel;
STEP 2 :菜单栏:工具-宏-Visual Basic 编辑器;
STEP 3 :Visual Basic 编辑器菜单栏: 插入-模块
STEP 4 :贴入下面这段函数
Function Countcolor(col As Range, countrange As Range)
Dim icell As Range
A lication.Volatile
For Each icell In countrange
If icell.Interior.ColorIndex = col.Interior.ColorIndex Then
Countcolor = Countcolor + 1
Next icell
End Function
Function Sumcolor(col As Range, sumrange As Range)
Dim icell As Range
A lication.Volatile
For Each icell In sumrange
If icell.Interior.ColorIndex = col.Interior.ColorIndex Then
Sumcolor = A lication.Sum(icell) + Sumcolor
Next icell
End Function
STEP 5 :保存并关闭Visual Basic 编辑器
STEP 6 :使用函数 countcolor(所要统计的颜色所在单元格,统计的区域)
sumcolor(所要统计的颜色所在单元格,统计的区域)
///若是字体颜色
Function Sumfontcolor(col As Range, sumrange As Range)
Dim icell As Range
A lication.Volatile
For Each icell In sumrange
If icell.Font.ColorIndex = col.Font.ColorIndex Then
Sumfontcolor = A lication.Sum(icell) + Sumfontcolor
Next icell
End Function
作者: 回复日期:2010-12-4 22:00:00
http://www.c logs.com/sharemeteor/archive/2005/08/19/218193.html使用C#自动生成Word2003文档(通过操作COM组件实现)
作者: 回复日期:2010-12-5 11:33:00
Sub test()
For l = 1 To 10
Dim arr(1 To 10)
For i = 1 To 10
arr(i) = Int(Rnd() * 11)
Loop Until A lication.Average(arr) = 8.5
Cells(l, 1).Resize(1, 10) = arr
Next
End Sub
=========
前提平均数是8.5,然后在随机生成一百个数。随机数必须在1-10之间的整数。
作者: 回复日期:2010-12-5 11:34:00
excelvba自定义右键快捷菜单2009-11-30 15:26快捷菜单,如下面的代码所示。 复制内容到剪贴板
代码:
#001
Sub Mycell()
#002
With A lication.CommandBars.Add(Mycell, msoBarPopup)
#003
With .Controls.Add(Type:=msoControlButton)
#004
.Caption = 会计凭证
#005
.FaceId = 9893
#006
End With
#007
With .Controls.Add(Type:=msoControlButton)
#008
.Caption = 会计账簿
#009
.FaceId = 284
#010
End With
#011
With .Controls.Add(Type:=msoControlPopup)
#012
.Caption = 会计报表
#013
With .Controls.Add(Type:=msoControlButton)
#014
.Caption = 月报
#015
.FaceId = 9590
#016
End With
#017
With .Controls.Add(Type:=msoControlButton)
#018
.Caption = 季报
#019
.FaceId = 9591
#020
End With
#021
With .Controls.Add(Type:=msoControlButton)
#022
.Caption = 年报
#023
.FaceId = 9592
#024
End With
#025
End With
#026
With .Controls.Add(Type:=msoControlButton)
#027
.Caption = 凭证打印
#028
.FaceId = 9614
#029
.BeginGroup = True
#030
End With
#031
With .Controls.Add(Type:=msoControlButton)
#032
.Caption = 账簿打印
#033
.FaceId = 707
#034
End With
#035
With .Controls.Add(Type:=msoControlButton)
#036
.Caption = 报表打印
#037
.FaceId = 986
#038
End With
#039
End With
#040
End Sub代码解析:
Mycell过程在Excel工作表中创建自定义的右键快捷菜单。
第2行代码,使用Add方法添加名称为“Mycell”命令栏,设置“Mycell”命令栏的Position属性为msoBarPopup,使“Mycell”命令栏为快捷菜单。关于Position参数的MsoBarPosition常数请参阅技巧83 。
第3行到第39行代码,使用Add方法在“Mycell”命令栏中添加菜单和菜单项,并设置其各项属性。
为了让自定义右键快捷菜单替换Excel默认的右键快捷菜单,并且只在右键单击Sheet1工作表时显示,需要在Sheet1工作表的BeforeRightClick事件中写入下面的代码。 复制内容到剪贴板
代码:
#001
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
#002
A lication.CommandBars(Mycell).ShowPopup
#003
Cancel = True
#004
End Sub
代码解析:
工作表的BeforeRightClick事件过程,在右键单击工作表时,将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示。
工作表BeforeRightClick事件语法如下:
Private Sub expre ion_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
参数expre ion是必需的,Worksheet类型对象。
参数Target 是可选的,右键单击发生时最靠近鼠标指针的单元格。
参数Cancel是可选的,当事件发生时为False。如果在事件过程中将Cancel参数设为True,则该过程执行结束之后不进行默认的右键单击操作。
第2行代码,使用ShowPopup方法将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示。
ShowPopup方法的语法如下:
expre ion.ShowPopup(x, y)
参数expre ion是必需的,返回一个CommandBar对象。
参数x是可选的,快捷菜单所在位置的 x 坐标。如果省略此参数,将使用当前光标位置的x坐标。
参数y是可选的,快捷菜单所在位置的y坐标。如果省略此参数,将使用当前光标位置的y坐标。
当用鼠标右键单击工作表中任意单元格时激活BeforeRightClick事件,此事件先于默认的右键单击操作。在使用ShowPopup方法显示“Mycell”命令栏后,将Cancel参数设置为True,过程执行结束之后不进行默认的右键单击操作,Excel右键快捷菜单就不会显示。
运行Mycell过程后,右键单击Sheet1工作表,在工作表中显示自定义右键快捷菜单,如图所示。
作者: 回复日期:2010-12-5 13:25:00
Sub qxyc()
For i = 1 To ThisWorkbook.Sheets.Count
Sheets(i).Visible = -1
Next
End Sub
=======
一次取消多个工作表的隐藏
作者: 回复日期:2010-12-5 13:29:00
Excel 宏循序渐进
http://www.cpcwedu.com/shiyongjinen/zixundongtai/200711/14-90946.html
这个和微软教程类似,入门看看不错
作者: 回复日期:2010-12-5 13:32:00
宏基础知识
--------------------------------------------------------------------------------
目的
操作方法
进入“Visual Basic 编辑器”
在“工具”菜单上,指向“宏”,然后单击“Visual Basic 编辑器”。
插入模块
在 Visual Basic 编辑器的“插入”菜单(而不是电子表格菜单)中,选择“模块”。
运行宏
单击“Sub MyMacroName()” 行,然后按 F5 运行您的宏。
三类循环宏
Do...Loop 循环、For Each...Next 循环和嵌套循环。
使 VBA 不区分大小写
在模块顶部其他所有宏之前的位置添加“Option Compare Text”。
在 Excel 中,以数字形式显示各列
在“工具”菜单上,单击“选项”,然后选择“常规”选项卡。选中“R1C1 引用样式”框。
处理宏的小窍门
--------------------------------------------------------------------------------
若要创建自己的代码示例,一种比较好的方法是先为该操作录制一个宏。在“工具”菜单上,指向“宏”并选择“录制新宏”。录制完新宏后,可在“Visual Basic 编辑器”中查看宏代码的运行情况。方法是,在“工具”菜单上,指向“宏”,然后选择“宏”,找到您所录制的宏。选中它并单击“编辑”以查看代码。
如果要复制宏然后修改副本,请务必重命名第二个宏,否则 Visual Basic 会不知所措,不知道该运行哪个宏。例如,如果宏为 Sub MyMacro(),则可复制整个宏并将其粘贴到“End Sub”行下。接下来,将副本的名称改为 MyMacro1,这样该宏就会变为类似 Sub MyMacroCopy() 这种样子。
如果要在 Microsoft Excel 主窗口中运行任何已有的宏,请使用上述方法打开“宏”对话框(或使用快捷键 Alt+F8),找到该宏,然后单击“运行”。
您可以为宏添加工具栏按钮。方法是,在“工具”菜单上,选择“自定义”。在“自定义”对话框中的“命令”选项卡上的“类别”下选择“宏”。在“命令”下,单击“自定义按钮”并将其拖动到 Excel 主窗口的现有工具栏中。接下来,右键单击新按钮并选择“指定宏”,以查看可用宏的列表。可以通过选择“更改按钮图像”(也可在单击右键后显示的菜单上找到)来更改新按钮的外观。
键盘快捷键
--------------------------------------------------------------------------------
处理宏时,使用这些快捷键可以节省时间:
Alt+F11:切换“Visual Basic 编辑器”。
Alt+F8:显示工作簿中可用宏的列表。
F5:在“Visual Basic 编辑器”中运行一个宏。
有关安全性的几点说明
--------------------------------------------------------------------------------
您可能已经注意到,来源未知的宏可能会损害您的计算机。默认情况下,Microsoft Office 应用程序附带的宏的安全级别为“高”,这是日常使用 Office 时的最佳设置,因为它有助于防止宏病毒扩散并可阻止恶意代码在您的计算机上运行。
在便于使用和增强安全之间,我们常常需要进行权衡。在本课程中,由于新宏不会受到安全检查,因此在这里不会涉及宏安全级别问题。要确认您的安全级别,请从“工具”菜单中选择“宏”,然后选择“安全性...”。
如果您选择运行宏,则需要采取措施,保护自己的安全。允许宏运行的最佳方式是对工作簿进行签名。在 Windows “开始”菜单“Microsoft Office”下的“Microsoft Office 工具”内有一个名为“VBA 项目的数字***”的特殊程序。使用此程序可创建用于对工作簿进行签名的自签名数字***。对包含代码的工作簿进行签名可使您在打开工作簿时信任自签名的***,同时又能将宏安全级别保持为“高”。
创建和使用 VBA 项目的数字***
--------------------------------------------------------------------------------
步骤
相关信息
运行“VBA 项目的数字***”程序
从 Windows 的“开始”菜单中,选择“Microsoft Office”,然后选择“Microsoft Office 工具”。
键入名称,然后按“确定”两次
在“您的***名称”部分,键入名称或希望作为***名称的任何其他值。
在“Visual Basic 编辑器”中,从“工具”菜单中选择“数字签名...”
单击“选择”按钮
选择您所创建的***,然后按“确定”两次
注意
如果修改 Visual Basic 项目(例如更改宏或添加新模块),则需要重新签署项目。
作者: 回复日期:2010-12-5 16:45:00
宏基础知识
--------------------------------------------------------------------------------
目的
操作方法
进入“Visual Basic 编辑器”
在“工具”菜单上,指向“宏”,然后单击“Visual Basic 编辑器”。
插入模块
在 Visual Basic 编辑器的“插入”菜单(而不是电子表格菜单)中,选择“模块”。
运行宏
单击“Sub MyMacroName()” 行,然后按 F5 运行您的宏。
三类循环宏
Do...Loop 循环、For Each...Next 循环和嵌套循环。
使 VBA 不区分大小写
在模块顶部其他所有宏之前的位置添加“Option Compare Text”。
在 Excel 中,以数字形式显示各列
在“工具”菜单上,单击“选项”,然后选择“常规”选项卡。选中“R1C1 引用样式”框。
处理宏的小窍门
--------------------------------------------------------------------------------
若要创建自己的代码示例,一种比较好的方法是先为该操作录制一个宏。在“工具”菜单上,指向“宏”并选择“录制新宏”。录制完新宏后,可在“Visual Basic 编辑器”中查看宏代码的运行情况。方法是,在“工具”菜单上,指向“宏”,然后选择“宏”,找到您所录制的宏。选中它并单击“编辑”以查看代码。
如果要复制宏然后修改副本,请务必重命名第二个宏,否则 Visual Basic 会不知所措,不知道该运行哪个宏。例如,如果宏为 Sub MyMacro(),则可复制整个宏并将其粘贴到“End Sub”行下。接下来,将副本的名称改为 MyMacro1,这样该宏就会变为类似 Sub MyMacroCopy() 这种样子。
如果要在 Microsoft Excel 主窗口中运行任何已有的宏,请使用上述方法打开“宏”对话框(或使用快捷键 Alt+F8),找到该宏,然后单击“运行”。
您可以为宏添加工具栏按钮。方法是,在“工具”菜单上,选择“自定义”。在“自定义”对话框中的“命令”选项卡上的“类别”下选择“宏”。在“命令”下,单击“自定义按钮”并将其拖动到 Excel 主窗口的现有工具栏中。接下来,右键单击新按钮并选择“指定宏”,以查看可用宏的列表。可以通过选择“更改按钮图像”(也可在单击右键后显示的菜单上找到)来更改新按钮的外观。
键盘快捷键
--------------------------------------------------------------------------------
处理宏时,使用这些快捷键可以节省时间:
Alt+F11:切换“Visual Basic 编辑器”。
Alt+F8:显示工作簿中可用宏的列表。
F5:在“Visual Basic 编辑器”中运行一个宏。
有关安全性的几点说明
--------------------------------------------------------------------------------
您可能已经注意到,来源未知的宏可能会损害您的计算机。默认情况下,Microsoft Office 应用程序附带的宏的安全级别为“高”,这是日常使用 Office 时的最佳设置,因为它有助于防止宏病毒扩散并可阻止恶意代码在您的计算机上运行。
在便于使用和增强安全之间,我们常常需要进行权衡。在本课程中,由于新宏不会受到安全检查,因此在这里不会涉及宏安全级别问题。要确认您的安全级别,请从“工具”菜单中选择“宏”,然后选择“安全性...”。
如果您选择运行宏,则需要采取措施,保护自己的安全。允许宏运行的最佳方式是对工作簿进行签名。在 Windows “开始”菜单“Microsoft Office”下的“Microsoft Office 工具”内有一个名为“VBA 项目的数字***”的特殊程序。使用此程序可创建用于对工作簿进行签名的自签名数字***。对包含代码的工作簿进行签名可使您在打开工作簿时信任自签名的***,同时又能将宏安全级别保持为“高”。
创建和使用 VBA 项目的数字***
--------------------------------------------------------------------------------
步骤
相关信息
运行“VBA 项目的数字***”程序
从 Windows 的“开始”菜单中,选择“Microsoft Office”,然后选择“Microsoft Office 工具”。
键入名称,然后按“确定”两次
在“您的***名称”部分,键入名称或希望作为***名称的任何其他值。
在“Visual Basic 编辑器”中,从“工具”菜单中选择“数字签名...”
单击“选择”按钮
选择您所创建的***,然后按“确定”两次
注意
如果修改 Visual Basic 项目(例如更改宏或添加新模块),则需要重新签署项目。
作者: 回复日期:2010-12-5 16:49:00
VBA里Range,cells,offset,end 的区别2007-11-24 18:10一.Range属性
1.选择单个单元格(例如A5)
Range(A5).Select
2.选择一个单元格区域(例如A6:A10)
Range(A6:A10).Select
3.选择一些不相邻的单元格(例如A1,B6,C8)
Range(A1,B6,C8).Select
4.选择一些不相邻的单元格和单元格区域(例如A11:D11,B7,C9)
Range(A11:D11,B7,C9).Select
二.Cells属性
1.选择单个单元格(例如A5)
Cells(5,1).Select
Cells(5,A).Select
2.选择一个单元格区域(例如A6:A10)
Range(Cells(6,1),Cells(10,1)).Select
3.选择工作表中的所有单元格
Cells.Select
三.Offset属性
1.选择单元格A1下面一行和右边三列的单元格
Range(A1).Offset(1,3).Select
2.选择单元格D15上面两行和左边一列的单元格
Range(D15).Offset(-2,-1).Select
3.选择同列单元格(上一行)
ActiveCell.Offset(-1,0).Select
4.重新选取区域
ActiveCell.Offset(2,2).Resize(2,4).Select
四.END属性(移动到连续有内容的单元格)
1.选择任何行的最后一个单元格
ActiveCell.End(xlToRight).Select
2.选择任何行的最前一个单元格
ActiveCell.End(xlToLeft).Select
3.选择任何列的最后一个单元格
ActiveCell.End(xlDown).Select
1.选择任何列的最前一个单元格
ActiveCell.End(xlUp).Select
作者: 回复日期:2010-12-5 17:02:00
[示例01] 赋值给某单元格
[示例01-01]
Sub test1()
Worksheets(Sheet1).Range(A5).Value = 22
MsgBox 工作表Sheet1内单元格A5中的值为 _
&am Worksheets(Sheet1).Range(A5).Value
End Sub
[示例01-02]
Sub test2()
Worksheets(Sheet1).Range(A1).Value = _
Worksheets(Sheet1).Range(A5).Value
MsgBox 现在A1单元格中的值也为 &am _
Worksheets(Sheet1).Range(A5).Value
End Sub
[示例01-03]
Sub test3()
MsgBox 用公式填充单元格,本例为随机数公式
Range(A1:H8).Formula = =Rand()
End Sub
[示例01-04]
Sub test4()
Worksheets(1).Cells(1, 1).Value = 24
MsgBox 现在单元格A1的值为24
End Sub
[示例01-05]
Sub test5()
MsgBox 给单元格设置公式,求B2至B5单元格区域之和
ActiveSheet.Cells(2, 1).Formula = =Sum(B1:B5)
End Sub
[示例01-06]
Sub test6()
MsgBox 设置单元格C5中的公式.
Worksheets(1).Range(C5:C10).Cells(1, 1).Formula = =Rand()
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例02] 引用单元格
Sub Random()
Dim myRange As Range
’设置对单元格区域的引用
Set myRange = Worksheets(Sheet1).Range(A1:D5)
’对Range对象进行操作
myRange.Formula = =RAND()
myRange.Font.Bold = True
End Sub
示例说明:可以设置Range对象变量来引用单元格区域,然后对该变量所代表的单元格区域进行操作。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例03] 清除单元格
[示例03-01]清除单元格中的内容(ClearContents方法)
Sub testClearContents()
MsgBox 清除指定单元格区域中的内容
Worksheets(1).Range(A1:H8).ClearContents
End Sub
[示例03-02]清除单元格中的格式(ClearFormats方法)
Sub testClearFormats()
MsgBox 清除指定单元格区域中的格式
Worksheets(1).Range(A1:H8).ClearFormats
End Sub
[示例03-03]清除单元格中的批注(ClearComments方法)
Sub testClearComments()
MsgBox 清除指定单元格区域中的批注
Worksheets(1).Range(A1:H8).ClearComments
End Sub
[示例03-04]清除单元格中的全部,包括内容、格式和批注(Clear方法)
Sub testClear()
MsgBox 彻底清除指定单元格区域
Worksheets(1).Range(A1:H8).Clear
End Sub
作者: 回复日期:2010-12-5 17:02:00
[示例04] Range和Cells
Sub test()
’设置单元格区域A1:J10的边框线条样式
With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
End Sub
示例说明:可用 Range(cell1, cell2) 返回一个 Range 对象,其中cell1和cell2为指定起始和终止位置的Range对象。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例05] 选取单元格区域(Select方法)
Sub testSelect()
’选取单元格区域A1:D5
Worksheets(Sheet1).Range(A1:D5).Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例06] 基于所选区域偏离至另一区域(Offset属性)
[示例06-01]
Sub testOffset()
Worksheets(Sheet1).Activate
Selection.Offset(3, 1).Select
End Sub
示例说明:可用Offset(row, column)(其中row和column为行偏移量和列偏移量)返回相对于另一区域在指定偏移量处的区域。如上例选定位于当前选定区域左上角单元格的向下三行且向右一列处单元格区域。
[示例06-02] 选取距当前单元格指定行数和列数的单元格
Sub ActiveCellOffice()
MsgBox 显示距当前单元格第3列、第2行的单元格中的值
MsgBox ActiveCell.Offset(3, 2).Value
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例07] 调整区域的大小(Resize属性)
Sub ResizeRange()
Dim numRows As Integer, numcolum As Integer
Worksheets(Sheet1).Activate
numRows = Selection.Rows.Count
numcolum = Selection.Colum .Count
Selection.Resize(numRows + 1, numcolum + 1).Select
End Sub
示例说明:本示例调整所选区域的大小,使之增加一行一列。
作者: 回复日期:2010-12-5 17:34:00
太高级了。。。我只知道Ctrl+D....
作者: 回复日期:2010-12-5 17:34:00
。。各种看不懂,揉脸。。
作者: 回复日期:2010-12-5 18:56:00
[示例08] 选取多个区域(Union方法)
Sub testUnion()
Dim rng1 As Range, rng2 As Range, myMultiAreaRange As Range
Worksheets(" heet1).Activate
Set rng1 = Range(A1:B2)
Set rng2 = Range(C3:D4)
Set myMultiAreaRange = Union(rng1, rng2)
myMultiAreaRange.Select
End Sub
示例说明:可用 Union(range1, range2, ...) 返回多块区域,即该区域由两个或多个连续的单元格区域所组成。如上例创建由单元格区域A1:B2和C3:D4组合定义的对象,然后选定该定义区域。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例09] 激活已选区域中的单元格
Sub ActivateRange()
MsgBox 选取单元格区域B2:D6并将C4选中
ActiveSheet.Range(B3:D6).Select
Range(C5).Activate
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例10] 选取指定条件的单元格(SpecialCells方法)
Sub SelectSpecialCells()
MsgBox 选择当前工作表中所有公式单元格
ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例11] 选取矩形区域(CurrentRegion属性)
’选取包含当前单元格的矩形区域
’该区域周边为空白行和空白列
Sub SelectCurrentRegion()
MsgBox 选取包含当前单元格的矩形区域
ActiveCell.CurrentRegion.Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例12] 选取当前工作表中已用单元格(UsedRange属性)
’选取当前工作表中已使用的单元格区域
Sub SelectUsedRange()
MsgBox 选取当前工作表中已使用的单元格区域 _
&am vbCrLf &am 并显示其地址
ActiveSheet.UsedRange.Select
MsgBox ActiveSheet.UsedRange.Addre End Sub
作者: 回复日期:2010-12-5 18:58:00
[示例13] 选取最边缘单元格(End属性)
’选取最下方的单元格
Sub SelectEndCell()
MsgBox 选取当前单元格区域内最下方的单元格
ActiveCell.End(xlDown).Select
End Sub
示例说明:可以改变参数xlDown以选取最左边、最右边、最上方的单元格。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例14]设置当前单元格的前一个单元格和后一个单元格的值
Sub SetCellValue()
MsgBox 将当前单元格中前面的单元格值设为我前面的单元格 &am vbCrLf _
&am 后面的单元格值设为我后面的单元格
ActiveCell.Previous.Value = 我前面的单元格
ActiveCell.Next.Value = 我后面的单元格
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例15]确认所选单元格区域中是否有公式(HasFormula属性)
Sub IfHasFormula()
If Selection.HasFormula = True Then
MsgBox 所选单元格中都有公式
Else
MsgBox 所选单元格中,部分单元格没有公式
End If
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例16] 公式单元格操作
[示例16-01]获取与运算结果单元格有直接关系的单元格
Sub CalRelationCell()
MsgBox 选取与当前单元格的计算结果相关的单元格
ActiveCell.DirectPrecedents.Select
End Sub
[示例16-02]追踪公式单元格
Sub Cal1()
MsgBox 选取计算结果单元格相关的所有单元格
ActiveCell.Precedents.Select
End Sub
Sub TrackCell()
MsgBox 追踪运算结果单元格
ActiveCell.ShowPrecedents
End Sub
Sub DelTrack()
MsgBox 删除追踪线
ActiveCell.ShowPrecedents Remove:=True
End Sub
作者: 回复日期:2010-12-5 19:07:00
44#作者:blueline_19
回复日期:2010-12-5 17:34:00
太高级了。。。我只知道Ctrl+D....45#作者:鱼_Ooo
回复日期:2010-12-5 17:34:00
。。各种看不懂,揉脸。。
===============================================
你们是文科生嘛,学这些也没用,要是有了啥电子表格方面的问题找我吧,我会尽力帮忙的~
作者: 回复日期:2010-12-5 19:14:00
[示例17] 复制单元格(Copy方法)
Sub CopyRange()
MsgBox 在单元格B7中写入公式后,将B7的內容复制到C7:D7內
Range(B7).Formula = =Sum(B3:B6)
Range(B7).Copy Destination:=Range(C7:D7)
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例18]获取单元格行列值(Row属性和Column属性)
Sub RangePosition()
MsgBox 显示所选单元格区域的行列值
MsgBox 第 &am Selection.Row &am 行 &am Selection.Column &am 列
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例19]获取单元格区域的单元格数及行列数(Rows属性、Colum 属性和Count属性)
Sub GetRowColumnNum()
MsgBox 显示所选取单元格区域的单元格数、行数和列数
MsgBox 单元格区域中的单元格数为: &am Selection.Count
MsgBox 单元格区域中的行数为: &am Selection.Rows.Count
MsgBox 单元格区域中的列数为: &am Selection.Colum .Count
End Sub
作者: 回复日期:2010-12-5 19:16:00
[示例20]设置单元格中的文本格式
[示例20-01] 对齐文本
Sub HorizontalAlign()
MsgBox 将所选单元格区域中的文本左右对齐方式设为居中
Selection.HorizontalAlignment = xlHAlignCenter
End Sub
Sub VerticalAlign()
MsgBox 将所选单元格区域中的文本上下对齐方式设为居中
Selection.RowHeight = 36
Selection.VerticalAlignment = xlVAlignCenter
End Sub
[示例20-02] 缩排文本(I ertIndent方法)
Sub Indent()
MsgBox 将所选单元格区域中的文本缩排值加1
Selection.I ertIndent 1
MsgBox 将缩排值恢复
Selection.I ertIndent -1
End Sub
[示例20-03] 设置文本方向(Orientation属性)
Sub ChangeOrientation()
MsgBox 将所选单元格中的文本顺时针旋转45度
Selection.Orientation = 45
MsgBox 将文本由横向改为纵向
Selection.Orientation = xlVertical
MsgBox 将文本方向恢复原值
Selection.Orientation = xlHorizontal
End Sub
[示例20-04]自动换行(WrapText属性)
Sub ChangeRow()
Dim i
MsgBox 将所选单元格设置为自动换行
i = Selection.WrapText
Selection.WrapText = True
MsgBox 恢复原状
Selection.WrapText = i
End Sub
[示例20-05]将比单元格列宽长的文本缩小到能容纳列宽大小(ShrinkToFit属性)
Sub AutoFit()
Dim i
MsgBox 将长于列宽的文本缩到与列宽相同
i = Selection.ShrinkToFit
Selection.ShrinkToFit = True
MsgBox 恢复原状
Selection.ShrinkToFit = i
End Sub
作者: 回复日期:2010-12-5 19:24:00
楼主 看这里 看这里
我做excel 的时候 经常有这样的数字
比如A1(1000,78,78)
然后A2(982,125,125)
然后A3 (1452,125,142)
然后我要把 每A1,A2,A3,....一直到A N 中 第一个逗号前面,第二个逗号前面,这些数值都提取出来,组成新的数列,
比如
B1 1000
B2 982
B3 1452
有么有啥好办法? 能很快搞定的?
作者: 回复日期:2010-12-5 19:35:00
51L,组成新的数列是要单独放起来吗,用mid函数提取吧
名称
Mid 从字符串中返回指定数目的字符。
编辑本段类别
字符串函数
编辑本段原形
MID(text,start_num,num_chars)
编辑本段参数
text 字符串表达式,从中返回字符。如果 text 包含 Null,则返回 Null。 start_num text 中被提取的字符部分的开始位置。如果 start 超过了 text 中字符的数目,Mid 将返回零长度 字符串 ()。 num_chars 要返回的字符数。如果省略或num_chars 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start_num到字符串结束的所有字符。 说明 要判断 text 中字符的数目,可使用 Len 函数。 下面的示例利用 Mid 函数返回字符串中从第四个字符开始的六个字符: Dim MyVar MyVar = Mid(VB脚本is fun!, 4, 6) ’MyVar 包含 Script。 注意 MidB 函数与包含在字符串中的字节数据一起使用。其参数不是指定字符数,而是字节数。 例: M=4100 A1=Mid(M,1,1) A1=4 A2=Mid(M,2,2) A2=10
作者: 回复日期:2010-12-5 19:50:00
谢谢,MID 函数我在使用
但是有个问题
比如A1(1000,78,78)
然后A2(982,125,125)
然后A3 (1452,125,142)
比如 MID (A1,1,4) 出来的数字 1000 ,正确
然后复制公式,到A2,A3 整个一列时候,
但是因为逗号前的数字有时候 3位,有时候4位,比如 A2 出来的数字 982, 不是我想要的数字。
因为如此整个表格做起来很费时间,请教大神有啥好办法
作者: 回复日期:2010-12-5 20:53:00
首先请别叫我大神= =让我想起来大婶了,不过是在学习而已。。。。
作者: 回复日期:2010-12-5 21:07:00
嗯 小杯可以的话帮帮忙吧 小女子这厢有礼了
事情是这样:
很多供货商的表格形式统一不起来
按照我的要求,货物的长宽高应该统统做清单的不同空格里头。
比如A1
但是供货商的清单就常常这样:
A1(1000,78,78)
A2(982,125,125)
A3 (1452,125,142)
所以搞的我很头大。。。
作者: 回复日期:2010-12-5 21:12:00
你这个难度好大,汗,琢磨了半天,弄出来了,先贴前两个,后面的卖个关子,把前两个弄懂了第三个原理一样
这是第一个
=MID(A1,2,FIND(,,A1,1)-2)
然后第二个
=MID(A1,FIND(,,A1,1)+1,FIND(,,A1,FIND(,,A1,1)+1)-FIND(,,A1,1)-1)
就是套嵌公式
如果格式不对或者为空的话会提示错误
把公式放到if里就好了
=IF(ISERR(公式),,公式)
公式的好处是不用宏,缺点是编起来费神,而且如果逗号增加,公式长度几何级增加
作者: 回复日期:2010-12-5 21:14:00
原理是找逗号,然后从逗号后取值,如果已经有了逗号,则再从逗号后接着找逗号,开始的参数是根据找到的逗号设定的
作者: 回复日期:2010-12-5 21:20:00
我拿笔记下,明天去单位试试 谢谢谢谢谢谢 感动的内牛满面
狠狠抱住 mua-
公式再麻烦,总比上千个数据简单。
而且上千个数据,错一个,我找错的找的都想掀桌子
小杯, 我简直爱上你了
作者: 回复日期:2010-12-5 21:20:00
=MID(A1,2,FIND(,,A1,1)-2)
===================
第一个参数是范围
第二个参数是从第二个开始找
第三个参数是返回的长度,其中的find是从a1的第一个字符找逗号,然后返回位置,再-2是去掉逗号和括号后正好可以得出第一个数据的长度
作者: 回复日期:2010-12-5 21:27:00
下面是用到的资料
http://office.microsoft.com/zh-cn/excel-help/HP005209089.a x
也应用于:
FINDB
FIND 用于查找其他文本字符串 (within_text) 内的文本字符串 (find_text),并从 within_text 的首字符开始返回 find_text 的起始位置编号。也可使用 SEARCH 查找其他文本字符串中的某个文本字符串,但是,FIND 和 SEARCH 不同,FIND 区分大小写并且不允许使用通配符。
FINDB 用于查找其他文本字符串 (within_text) 内的文本字符串 (find_text),并基于每个字符所使用的字节数从 within_text 的首字符开始返回 find_text 的起始位置编号。此函数用于双字节字符。也可使用 SEARCHB 查找其他文本字符串中的某个文本字符串。
语法
FIND(find_text,within_text,start_num)
FINDB(find_text,within_text,start_num)
Find_text
是要查找的文本。
Within_text
是包含要查找文本的文本。
Start_num
指定开始进行查找的字符。within_text 中的首字符是编号为 1 的字符。如果忽略 start_num,则假设其为 1。
提示
使用 start_num 可跳过指定数目的字符。例如,假定使用文本字符串“AYF0093.YoungMe A arel”,如果要查找文本字符串中说明部分的第一个“Y”的编号,则可将 start_num 设置为 8,这样就不会查找文本的序列号部分。FIND 将从第 8 个字符开始查找,而在下一个字符处即可找到 find_text,于是返回编号 9。FIND 总是从 within_text 的起始处返回字符编号,如果 start_num 大于 1,也会对跳过的字符进行计数。
说明
如果 find_text 是空文本 (),则 FIND 会匹配搜索串中的首字符(即:编号为 start_num 或 1 的字符)。
Find_text 中不能包含通配符。
如果 within_text 中没有 find_text,则 FIND 和 FINDB 返回错误值 #VALUE!。
如果 start_num 不大于 0,则 FIND 和 FINDB 返回错误值 #VALUE!。
如果 start_num 大于 within_text 的长度,则 FIND 和 FINDB 返回错误值 #VALUE!。
示例 1 (FIND)
如果您将示例复制到空白工作表中,可能会更易于理解该示例。
操作方法
创建空白工作簿或工作表。请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。按 Ctrl+C。在工作表中,选中单元格 A1,再按 Ctrl+V。若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
数据
Miriam McGovern
公式 说明(结果)
=FIND(M,A2) 上面字符串中第一个“M”的位置 (1)
=FIND(m,A2) 上面字符串中第一个“m”的位置 (6)
=FIND(M,A2,3) 从上面字符串的第三个字符开始查找的第一个“M”的位置 (8)
示例 2 (FIND)
如果您将示例复制到空白工作表中,可能会更易于理解该示例。
操作方法
创建空白工作簿或工作表。请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。按 Ctrl+C。在工作表中,选中单元格 A1,再按 Ctrl+V。若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
数据
Ceramic I ulators #124-TD45-87
Co er Coils #12-671-6772
Variable Resistors #116010
公式 说明(结果)
=MID(A2,1,FIND( #,A2,1)-1) 在上面第一个字符串中,抽取从第一个字符到“#”的文本 (Ceramic I ulators)
=MID(A3,1,FIND( #,A3,1)-1) 在上面第二个字符串中,抽取从第一个字符到“#”的文本 (Co er Coils)
=MID(A4,1,FIND( #,A4,1)-1) 在上面第三个字符串中,抽取从第一个字符到“#”的文本 (Variable Resistors)
示例 (FINDB)
在以下示例中,FIND 返回 2,因为空文本 () 位于字符串中的第二个位置,而 FINDB 返回 3,因为每个字符均按字节进行计数,而第一个字符包含 2 个字节,所以第二个字符从第三个字节开始。
=FIND( ,
) 等于 2
=FINDB( ,
) 等于 3
作者: 回复日期:2010-12-5 21:29:00
http://office.microsoft.com/zh-cn/excel-help/HP005209175.a x
MID
适用于: Microsoft Office Excel 2003
打印 全部显示全部隐藏
也应用于:
MIDB
MID 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。
MIDB 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。此函数用于双字节字符。
语法
MID(text,start_num,num_chars)
MIDB(text,start_num,num_bytes)
Text
是包含要提取字符的文本字符串。
Start_num
是文本中要提取的第一个字符的位置。文本中第一个字符的 start_num 为 1,以此类推。
Num_chars
指定希望 MID 从文本中返回字符的个数。
Num_bytes
指定希望 MIDB 从文本中返回字符的个数(按字节)。
说明
如果 start_num 大于文本长度,则 MID 返回空文本 ()。
如果 start_num 小于文本长度,但 start_num 加上 num_chars 超过了文本的长度,则 MID 只返回至多直到文本末尾的字符。
如果 start_num 小于 1,则 MID 返回错误值 #VALUE!。
如果 num_chars 是负数,则 MID 返回错误值 #VALUE!。
如果 num_bytes 是负数,则 MIDB 返回错误值 #VALUE!。
示例 (MID)
如果您将示例复制到空白工作表中,可能会更易于理解该示例。
操作方法
创建空白工作簿或工作表。请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。按 Ctrl+C。在工作表中,选中单元格 A1,再按 Ctrl+V。若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
数据
Fluid Flow
公式 说明(结果)
=MID(A2,1,5) 上面字符串中的 5 个字符,从第一个字符开始 (Fluid)
=MID(A2,7,20) 上面字符串中的 20 个字符,从第七个字符开始 (Flow)
=MID(A2,20,5) 因为要提取的第一个字符的位置大于字符串的长度,所以返回空文本 ()
示例 (MIDB)
=MIDB(
,1,6) 等于“
作者: 回复日期:2010-12-5 21:34:00
:心之微尘
回复日期:2010-12-5 21:20:00
我拿笔记下,明天去单位试试 谢谢谢谢谢谢 感动的内牛满面
狠狠抱住 mua-
公式再麻烦,总比上千个数据简单。
而且上千个数据,错一个,我找错的找的都想掀桌子
小杯, 我简直爱上你了
===================================
呵呵,不客气。我学excel就是想偷懒,以前单位供应上做验收都是手敲计算器,忙不过来就喊我帮忙,我感觉太麻烦。去了后联系供应商找了电子表单,写了几个简单的求和函数,节省了一半的劳动而且不会出错了,还有许多小地方,我都想搞成一键解决的
作者: 回复日期:2010-12-5 21:38:00
FIND函数区分大小写但不支持通配符,SEARCH函数支持通配符但不区分大小写
FIND函数:FIND用于查找在一个文本值中查找另一个文本值在原文本值当中的位置。此函
数适用于双字节字符,它区分大小写但不允许使用通配符。
FINDB函数:FINDB用于查找其他文本串内的文本串,并根据每个字符使用的字节数从查找值的首字符开始返回这个值在文本中的起始位置。
FIND、FINDB的区别在于,FIND是以字符数为单位返回起始的位置,FINDB是以字节数为单位返回起始的位置
实例:如果A1=我喜欢函数,则公式“=FIND(喜欢,A1,1)”返回2
实例:如果A1=我喜欢函数,则公式“=FINDB(函数,A1,1)”返回7。因为每个字符均按字节进行计算,而一个汉字为2个字节,所以第四个汉字“喜”从第7个字节开始。
如何在EXCEL中提取文本最后一个逗号后面的内容?
悬赏分:50 | 解决时间:2008-9-25 15:40 | 提问者:mathsdaniel | 检举
比如在“I have a book, too”和“I don’t have a dog, either”中分别把“too”和“either”提取出来,用一个函数。也就是最后一个逗号后面的字符数未知,怎么做啊??
最佳***
如果只有一个逗号,用楼上的公式,
也可以用这个公式 =MID(TRIM(A1),FIND(,,TRIM(A1))+1,LEN(TRIM(A1)))
否则用下面的公式
=MID(TRIM(A1),FIND($,SUBSTITUTE(TRIM(A1),,,$,LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1),,,))))+1,LEN(TRIM(A1)))
另外,如果字符串中,没有逗号会出错
http://zhidao.baidu.com/question/69564065.html
http://zhidao.baidu.com/question/172686269.html
作者: 回复日期:2010-12-6 11:36:00
[示例21]设置条件格式(FormatConditio 属性)
Sub FormatConditio ()
MsgBox 在所选单元格区域中将单元格值小于10的单元格中的文本变为红色
Selection.FormatConditio .Add Type:=xlCellValue, _
Operator:=xlLe Equal, Formula1:=10
Selection.FormatConditio (1).Font.ColorIndex = 3
MsgBox 恢复原状
Selection.FormatConditio (1).Font.ColorIndex = xlAutomatic
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例22]插入批注(AddComment方法)
Sub EnterComment()
MsgBox 在当前单元格中输入批注
ActiveCell.AddComment (Hello)
ActiveCell.Comment.Visible = True
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例23]隐藏/显示单元格批注
Sub CellComment()
MsgBox 切换当前单元格批注的显示和隐藏状态
ActiveCell.Comment.Visible = Not (ActiveCell.Comment.Visible)
End Sub
作者: 回复日期:2010-12-6 12:36:00
[示例24]改变所选单元格的颜色
Sub ChangeColor()
Dim iro As Integer
MsgBox 将所选单元格的颜色改为红色
iro = Selection.Interior.ColorIndex
Selection.Interior.ColorIndex = 3
MsgBox 将所选单元格的颜色改为蓝色
Selection.Interior.Color = RGB(0, 0, 255)
MsgBox 恢复原状
Selection.Interior.ColorIndex = iro
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例25]改变单元格的图案
Sub ChangePattern()
Dim p, pc, i
MsgBox 依Pattern常数值的顺序改变所选单元格的图案
p = Selection.Interior.Pattern
pc = Selection.Interior.PatternColorIndex
For i = 9 To 16
With Selection.Interior
.Pattern = i
.PatternColor = RGB(255, 0, 0)
End With
MsgBox 常数值 &am i
Next i
MsgBox 恢复原状
Selection.Interior.Pattern = p
Selection.Interior.PatternColorIndex = pc
End Sub
作者: 回复日期:2010-12-6 12:37:00
[示例26]合并单元格
Sub MergeCells()
MsgBox 合并单元格A2:C2,并将文本设为居中对齐
Range(A2:C2).Select
With Selection
.MergeCells = True
.HorizontalAlignment = xlCenter
End With
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例27]限制单元格移动的范围
Sub ScrollArea1()
MsgBox 将单元格的移动范围限制在单元格区域B2:D6中
ActiveSheet.ScrollArea = B2:D6
End Sub
Sub ScrollArea2()
MsgBox 解除移动范围限制
ActiveSheet.ScrollArea =
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例28]获取单元格的位置(Addre 属性)
Sub GetAddre ()
MsgBox 显示所选单元格区域的地址
MsgBox 绝对地址: &am Selection.Addre MsgBox 行的绝对地址: &am Selection.Addre (RowA olute:=False)
MsgBox 列的绝对地址: &am Selection.Addre (ColumnA olute:=False)
MsgBox 以R1C1形式显示: &am Selection.Addre (ReferenceStyle:=xlR1C1)
MsgBox 相对地址: &am Selection.Addre (False, False)
End Sub
作者: 回复日期:2010-12-6 12:38:00
[示例29]删除单元格区域(Delete方法)
Sub DeleteRange()
MsgBox 删除单元格区域C2:D6后,右侧的单元格向左移动
ActiveSheet.Range(C2:D6).Delete (xlShiftToLeft)
End Sub
小结
下面对Range对象的一些常用属性和方法进行简单的小结。
1、Activate与Select
试验下面的过程:
Sub SelectAndActivate()
Range(B3:E10).Select
Range(C5).Activate
End Sub
其结果如下图所示:
图05-01:Select与Activate
Selection指单元格区域B3:E10,而ActiveCell则是单元格C5;ActiveCell代表单个的单元格,而Selection则可以代表单个单元格,也可以代表单元格区域。
2、Range属性
可以使用A lication对象的Range属性引用Range对象,如
A lication.Range(“B2”) ‘代表当前工作表中的单元格B2
若引用当前工作表中的单元格,也可以忽略前面的A lication对象。
Range(“A1:D10”) ‘代表当前工作表中的单元格区域A1:D10
Range(“A1:A10,C1:C10,E1:E10”) ‘代表当前工作表中非连续的三个区域组成的单元格区域
Range属性也接受指向单元格区域对角的两个参数,如:
Range(“A1”,”D10”) ‘代表单元格区域A1:D10
当然,Range属性也接受单元格区域名称,如:
Range(“Data”) ‘代表名为Data的数据区域
Range属性的参数可以是对象也可以是字符串,如:
Range(“A1”,Range(“LastCell”))
3、单元格引用的快捷方式
可以在引用区域两侧加上方括号来快速引用单元格区域,如:
[B2]
[A1:D10]
[A1:A10,C1:C10,E1:E10]
[Data]
但其引用的是绝对区域。
4、Cells属性
可以使用Cells属性来引用Range对象。如:
ActiveSheet.Cells
A lication.Cells ‘引用当前工作表中的所有单元格
Cell(2,2)
Cell(2,”B”) ‘引用单元格B2
Range(Cells(1,1),Cells(10,5)) ‘引用单元格区域A1:E10
若想在一个单元格区域中循环时,使用Cells属性是很方便的。
也可以使用Cells属性进行相对引用,如:
Range(“D10:G20”).Cells(2,3) ‘表示引用单元格区域D10:G20中第2行第3列的单元格,即单元格F11
也可使用语句:Range(“D10”).Cells(2,3)达到同样的引用效果。
5、Offset属性
Offset属性基于当前单元格按所给参数进行偏移,与Cells属性不同的是,它基于0即基准单元格为0,如:
Range(“A10”).Cells(1,1)和Range(“A10”).Offset(0,0)都表示单元格A10
当想引用于基准单元格区域同样大小的单元格区域时,则Offset属性是有用的。
6、Resize属性
可使用Resize属性获取相对于原单元格区域左上角单元格指定大小的区域。
7、SpecialCells方法
SpecialCells方法对应于“定位条件”对话框,如图05-02所示:
图05-02:“定位条件”对话框
8、CurrentRegion属性
使用CurrentRegion属性可以选取当前单元格所在区域,即周围是空行和空列所围成的矩形区域,等价于“Ctrl+Shift+*”快捷键。
9、End属性
End属性所代表的操作等价于“Ctrl+方向箭”的操作,使用常量xlUp、xlDown、xlToLeft和xlToRight分别代表上、下、左、右箭。
10、Colum 属性和Rows属性
Colum 属性和Rows属性分别返回单元格区域中的所有列和所有行。
11、Areas集合
在多个非连续的单元格区域中使用Colum 属性和Rows属性时,只是返回第一个区域的行或列,如:
Range(“A1:B5,C6:D10,E11:F15”).Rows.Count
将返回5。
此时应使用Areas集合来返回区域中每个块的地址,如:
For Each Rng In Range(“A1:B5,C6:D10,E11:F15”).Areas
MsgBox Rng.Addre Next Rng
12、Union方法和Intersect方法
当想从两个或多个单元格区域中生成一个单元格区域时,使用Union方法;当找到两个或多个单元格区域共同拥有的单元格区域时,使用Intersect方法。
作者: 回复日期:2010-12-6 12:55:00
Excel之VBA编程常用语句300句
定制模块行为
(1) Option Explicit ’强制对模块内所有变量进行声明
Option Private Module ’标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示
Option Compare Text ’字符串不区分大小写
Option Base 1 ’指定数组的第一个下标为1
(2) On Error Resume Next ’忽略错误继续执行VBA代码,避免出现错误消息
(3) On Error GoTo ErrorHandler ’当错误发生时跳转到过程中的某个位置
(4) On Error GoTo 0 ’恢复正常的错误提示
(5) A lication.Di layAlerts=False ’在程序执行过程中使出现的警告框不显示
(6) A lication.ScreenUpdating=False ’关闭屏幕刷新
A lication.ScreenUpdating=True ’打开屏幕刷新
(7) A lication.Enable.CancelKey=xlDisabled ’禁用Ctrl+Break中止宏运行的功能
作者: 回复日期:2010-12-6 12:57:00
工作簿
(8) Workbooks.Add() ’创建一个新的工作簿
(9) Workbooks(“book1.xls”).Activate ’激活名为book1的工作簿
(10) ThisWorkbook.Save ’保存工作簿
(11) ThisWorkbook.close ’关闭当前工作簿
(12) ActiveWorkbook.Sheets.Count ’获取活动工作薄中工作表数
(13) ActiveWorkbook.name
’返回活动工作薄的名称
(14) ThisWorkbook.Name ‘返回当前工作簿名称
ThisWorkbook.FullName ‘返回当前工作簿路径和名称
(15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小
(16) A lication.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列
(17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化
作者: 回复日期:2010-12-6 12:58:00
工作表
(18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数
(19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性)
(20) Sheets(Sheet1).Name= “Sum” ’将Sheet1命名为Sum
(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ’添加一个新工作表在第一工作表前
(22) Activ