Excel-VBA-常用代码50例(共77页).doc
《Excel-VBA-常用代码50例(共77页).doc》由会员分享,可在线阅读,更多相关《Excel-VBA-常用代码50例(共77页).doc(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上Excel VBA 常用代码50例001。用命令按扭打印一个sheet1中B2:M30区域中的内容?我想在Sheet2中制件一个命令按扭, 打印表Sheet1中的B2:M30 区域中的内容?解答:可以将打印区域设为b2:m30,然后打印,如:sheets(sheet1).printarea=b2:m30sheets(sheet1).printout随手写的,你可以试试看。最简单的方法是:你先 录制宏,在录制宏过程中, 跑到页面设置里面, 把打印范围设置到你想要的范围。然后退出,停止录制宏, 你就可以得到一些代码!002。能否对一列中的文字统一去掉最后一个字?这些文字不
2、统一,有些字数多,有些字数少。如何处理?我用&-不行解答:=REPLACE(A1,LEN(A1),1, )(在过渡列进行)003.能否根据单元格数值自动标记序号?各位大佬,一工作表有两列,“序号”及“金额”,能否将金额不等于0的行自动标上序号呢?如无现成的函数,应怎样设置?解答:Dim xuhao As Integerxuhao = 1Range(b2).SelectDo While Selection If Selection 0 Then ActiveCell.Previous.Value = xuhao xuhao = xuhao + 1 End If ActiveCell.Offset
3、(1, 0).Range(a1).SelectLoop004.求教自定义函数查询了一些自定义函数的例子都是单变量的。自定义函数能否建立“(As Range) As Interger”的函数,应该可以的,请各位大师赐教!请以“x2”为例,万分感谢!(该用For Each .Next,就是还不知道如何引用Range中的每个值,请高手指点。)解答:参数使用Range而函数值为Integer是可以的用for each next循环思路也是对的,应该这样作:dim rg as rangedim ivalue as integerfor each rg in 参数区域ivalue=ivalue+rg.va
4、luenext函数ivalue大概意思如此,但没有加入防错处理,你自己先试试看,有问题在问。又问:试了一天,还是不行。Public Function x2(rng As Range) As IntegerDim rng As RangeDim ivalue As IntegerFor Each rng In rng.Rangeivalue = ivalue + rng.value 2Nextx2 = ivalueEnd Function还望您的帮助。解答:Public Function SUMX2(rng As Range) As Integer 你的错误有几项: 1.函数名不能使用单元格位址
5、的形式,否则在工作表中引用函数产生歧义,excel以为你引用单元格 2.参数名与内部变量名冲突,rng本来是定义参数,在过程中不应出现重名变量 3.rng已被定义为range对象变量,实际意义是一range引用,不能再用rng.Range引用,range的range属性是什么呢,没有吧 函数我已经给你改了,基本能用 Dim rg As Range Dim ivalue As Integer For Each rg In rng ivalue = ivalue + rg.value 2 Next SUMX2 = ivalueEnd Function结果:调试成功!,非常感谢!005.判断字符串的
6、包含性用什么命 令“abcdefg”是否包含“abc”?解答:If VBA.InStr(1, abcdefg, abc) 0 Then MsgBox 包含006.利用背景实现套打的解决方案利用背景套打主要在于数据打印位置的确定,关键就是要使图片和实物之间的尺寸保持一致,这里我引入一个中间参照物空白表(只有表格线的表)。具体操作以套打支票为例说明: (1)将支票扫描成图片。 (2)打印一个空白表,使其与支票尺寸一致(需反复调整打印,也可行、列分别打印)。 (3)用“画图”的缩放功能调整图片大小,导入excel作背景,并使其与空白表大小一致(亦需反复调整导入,每次均用原图缩放,再另存为一个文件)。
7、 (4)根据图片背景调整好单元格,填入数据后套打支票,效果是匹配度达99%。 (5)由于每次都是用原图缩放,故可取得缩放比例作为参数,再套打其他表格时,即可直接依参数缩放图片。 思路:因为空白表=支票,图片=空白表,所以图片=支票。 该方案已证实可行。007.宏放在worksheet和sheet及模块中各有什么区别?解答:放在this workbook或sheet中的宏与模块中的宏的主要区别是book或sheet中的过程函数只能是对象所专有的,不能在对象之外的任何地方调用(很显然不能声明Public过程,否则编译报错),而模块中声明Public过程函数可以在任何地方使用。008.关于excel
8、问题在excel中如何用公式实现单元格内容递增?如: AB12 AB13 AB14 . AB100条件是无法确定储存格中的内容的前面有多少个字符,也就是,可能是2个,也可能是3个,或者更多。解答:為什麼要用公式呢?如 A1 = AB12 ,只要你向下拉的複制就可以。公式可参考 (条件是 AB12 不可以是 AB02, 处理 0 为首的文字 有困难,亦不可以只有英文字)A1 = AB12A2 = LEFT(A1,LEN(A1)-SUM(LEN(A1)-LEN(SUBSTITUTE(A1,0,1,2,3,4,5,6,7,8,9,) & RIGHT(A1,SUM(LEN(A1)-LEN(SUBSTI
9、TUTE(A1,0,1,2,3,4,5,6,7,8,9,)+1(A1 = AB12公式=LEN(SUBSTITUTE(A1,0,1,2,3,4,5,6,7,8,9,)答案看到的是 4 ,但其實它回傳一個數組 4,3,3,4,4,4,4,4,4,4公式=LEN(A1)-LEN(SUBSTITUTE(A1,0,1,2,3,4,5,6,7,8,9,)答案看到的是 0 ,但其實它回傳一個數組 0,1,1,0,0,0,0,0,0,0公式=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,0,1,2,3,4,5,6,7,8,9,) 是將 0,1,1,0,0,0,0,0,0,0 加總= 2)009
10、.给数组公式、VBA爱好者泼点冷水。数组公式、VBA威力巨大,在某些情形下提高效率非常明显,但各有其弱点。数组公式在大数据的时候,运行速度慢得无法忍受。比如,我日常需要编制得几个报表,原始数据有48万行,2030列,用数组根本无法操作。倒是利用数据透视表及其他一些组合功能,可谓神速。而VBA主要适用与日常比较固定的一些工作,对于一些临时性工作而言,缺乏灵活性,有杀鸡用牛刀之嫌疑。因此,根据我个人多年工作经验的体会,能熟练地灵活运用EXCEL基本功能和常用函数,就可以高效地完成大部分日常工作。我比较常用地东西有:数据透视表,数据有效性,ctrl+enter,index ,match,indire
11、ct,offset,if,vlookup,下拉列表框,绝对引用与相对引用,编辑选择性粘贴(数值、乘除、转置等),图表,条件格式,定义名称,分列,填充等。相反观点:数据透视表的计算是excel中内置的,同样的计算次数速度与数组公式是一样的,数组公式计算慢有两个因素,一是公式的编写不合理,另一个主要的原因是数组公式要对所有的引用数据进行计算,不管这些数据是否有效。VBA应该是最灵活的,在VBA中结合数组公式是可以达到最佳目的的,可用VBA先分析出数组公式要用的有效引用区域,在辅助表中进行数组计算(这个速度比用VBA直接分析计算要快得多),再将结果记入需要的单元格中,然后删除辅助表。其实你说的那些基
12、本操作均可用VBA来做的,速度比手工做要快。010.从式子抽取一小式子的问题?b1=sum(a1:a10)+(10+20)/4,怎么从中取出(10+20)/4或其结果(即5)?用evaluate、get.cell都不能取出。解答:定义X=get.formula($B$1)得到B1的公式,再用MID、Right等函数截取011.or可以用数组应用?有一个工作表,数据上万行,其中一列是我要分析的数值,数值比如为:0111,0112,0113,0114,0115,0116,0117中的任何一个。我要统计除0111,0113,0115之外的数据。公式:sum(if(or(sheet!A2:A1111=
13、0111,sheet!a2:a1111=0113,sheet!a2:a1111=0115),1,0),可是统计数字和我筛选相加的不一样,用if层层选,可以。请问原因?解答:数组公式中用*、+代替AND、ORsum(if(sheet!A2:A1111=0111)+(sheet!a2:a1111=0113)+(sheet!a2:a1111=0115),1,0)012.countif表达式的格式请问:我想找A1:A15中,值不为空的数目,用countif命令怎么写呢?解答1:应为counta(a1:a15)。countif为找a1:a15中,特定值的数目。解答2:=ROWS(A1:A15)*COLU
14、MNS(A1:A15)-COUNTIF(A1:A15,)=ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTBLANK(A1:A15)解答3:直接用count(a1:a15)不是更好吗!013.删除字符串中某个字符的函数是什么?删除字符串中某个字符的函数是什么?举例:字符串“i love you a!想删除a字面,应该用什么函数实现?还有就是在字符串中某个位置加入某个字符用什么函数呢?解答:如果有一定的规律,可以用Replace函数。例如:在A1单元格已有的字符串”中加入个5变为“”。可以这样做:=replace(a1,5,5)另一方法:用CONCATENATE函数。例如:a
15、5单元格里的数据是“asdfhjkl,在另外的单元格了输入下面的函数CONCATENATE(LEFT(A5,4),l,RIGHT(A5,4),得到的结果就是”asdflhjkl,然后用“选择性粘贴,粘贴数值”粘贴回a5单元格就可以了。014.两表合一实例 问题提出:怎样把两个表(有相同的字段)怎样合并成一个表? 思路:用CountIf()函数对表1进行判断,如果其值为0,则表示没以重复,再将表2中和表1不重复的数据复制到表1中,从而实现两表合一。解题的方法:Sub dd()b = Sheets(2).a1.CurrentRegion.Rows.Count + 1 判断表2的行数For i =
16、3 To ba = Sheets(1).a1.CurrentRegion.Rows.Count + 1判断表1的行数c = Sheets(2).a1.CurrentRegion.Columns.Count判断表2的列数If Application.WorksheetFunction.CountIf(Sheets(1).b1:b1000, Sheets(2).Cells(i, 2) = 0 ThenSheets(2).Range(Sheets(2).Cells(i, 1), Sheets(2).Cells(i, c).Copy Sheets(1).Cells(a, 1)将表2中与表1不重复的数据
17、复制到表1中End IfNextEnd Sub015.有没有办法把加载宏内置到Excel文件里?因为用了 Networkdays 函数,用到了分析工具库,但是还要发给别人,怎么办?解答:试试在Thisworkbook中写如下语句:Private Sub Workbook_Open() Application.RegisterXLL Filename:= _ Office安装路径OfficeLibraryAnalysisANALYS32.XLLEnd Sub又问:Office安装路径怎么写呀?大家不一定都装在C盘上。解答:试试:Application.Path & LibraryAnalysis
18、ANALYS32.XLL046.如何在userform上显示最大化与最小化按钮解答:利用APIOption ExplicitPrivate Declare Function GetWindowLong Lib user32 Alias GetWindowLongA (ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function FindWindow Lib user32 Alias FindWindowA (ByVal lpClassName As String, ByVal lpWindowName As
19、String) As LongPrivate Declare Function SetWindowLong Lib user32 Alias SetWindowLongA (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const GWL_STYLE = (-16)Private Const WS_THICKFRAME As Long = &H40000 (恢复大小)Private Const WS_MINIMIZEBOX As Long = &H20000 (最小化)Priv
20、ate Const WS_MAXIMIZEBOX As Long = &H10000 (最大化)Private Sub UserForm_Initialize() Dim hWndForm As Long Dim IStyle As Long hWndForm = FindWindow(ThunderDFrame, Me.Caption) IStyle = GetWindowLong(hWndForm, GWL_STYLE) IStyle = IStyle Or WS_THICKFRAME 还原 IStyle = IStyle Or WS_MINIMIZEBOX 最小化 IStyle = IS
21、tyle Or WS_MAXIMIZEBOX 最大化 SetWindowLong hWndForm, GWL_STYLE, IStyleEnd Sub017.这个判断代码怎么写在A列输入日期,如果所输入日期为1月1日或5月1日则B列相关单元格+1,其他日期+0,这要用到什么函数?代码怎么写?谢谢!解答:用IF函数或用Worksheet_Change事件Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If IsDate(Target) Then If (Month(Target) = 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Excel VBA 常用 代码 50 77
限制150内