六、在vba中使用函数(公式)

您所在的位置:网站首页 沃尔玛的客服电话是多少 六、在vba中使用函数(公式)

六、在vba中使用函数(公式)

2023-12-24 18:30| 来源: 网络整理| 查看: 265

自己熟悉excel工作表中的函数公式,本节主要处理如何在vba中使用函数,分两种:工作表函数和vba函数:(1)在vba中使用工作表函数,必须使用前缀Application.WorksheetFunction.(2)大部分工作表函数在vba中与在工作表中的用法相同;(2)一些工作表函数在vba中不实用。例如:Concatenate 函数就不实用,因为在vba 中可以使用 & 运算符来连接多个文本值。(2)一些工作表函数在vba中用法略有差异,如vlookup;(3)vba函数可不要前缀直接调用,但若需寻找,在 Application.WorksheetFunction找不到,需要使用vba.前缀找(了解vba函数的分类后可逐级找,分类见附录)

一、在vba中使用工作表函数  问题导入:“使用工作表函数”文件,做成查询系统,完成以下功能:      (1)输入准考证号,获得相关信息;      (2)填充统计信息。  处理:(1)先考虑问题(2),在工作表界面可直接用“counta()”函数查找某表某列的非空数据个数,填充到“共导入__名考生”中;     (2)在vba界面,用已有知识解决此问题,可写for循环,逐一判断每个单元格是否为空"" " "后,统计非空个数;     (3)步骤(2)太麻烦,探索VBA中函数解决:Sheet1.Range("D26") = Application.WorksheetFunction.CountA(Sheet2.Range("a:a")) - 1     (4)对工作表进行for循环,k=k+application·····解决完整     (5)类似解决男生统计人数:Sheet1.Range("D27") = Application.WorksheetFunction.CountIf(Sheet2.Range("f:f"), "男")

     (6)考虑问题(1),用vlookup函数求学号对应姓名信息,转为vba中函数解决,其余信息类似处理:      Sheet1.Range("D14") = Application.WorksheetFunction.VLookup(Sheet1.Range("D9"), Sheet2.Range("a:f"), 5, "false")     (7)将步骤(6)进行for循环出现严重问题,不在当前表找不到时,程序报错对话框(工作表界面是返回N/A)停止运行     (8)在进入for循环前加语句“On Error Resume Next”,解决报错对话框问题

     (9)“地区”格较麻烦,应填入sheets(i).name,但由于有"on error resume next",总是填入最后一张表的name,因此应考虑“找到数据”时的for循环停止机制     (10)找到数据时Sheet1.Range("D14")会被填充,可以此判断是否找到了数据,即 if Sheet1.Range("D14")"" then exit for    end if      (11)Sheet1.Range("D14")可能残留前次查询数据,因此需在for循环前将其清空。注意填充操作前均需考虑先清空目标单元格。

二、使用vba函数(1)以文本函数left为例,演示在vba中的调用过程:vba-->strings-->left,了解vba函数的分类;(2)演示“DEMO-2-根据部门列创建工作表(最终完成版)”,输入“e”或“99999”,分别报错“类型不匹配”及“溢出”,讲解变量类型的声明及范围;(3)演示如果不声明“iCol”变量类型,运行仍会报错,因inputbox返回text类型值,而iCol作为后面for循环的参数应是integer;(4)若不声明变量类型,可通过“iCol = iCol * 1”或“iCol =Val( iCol )强制转换为integer类型,但仍无法解决输入“e”报错的问题;(5)增加判断语句“If VBA.Information.IsNumeric(iCol) = False or iCol< 1 Then  MsgBox ("请输入正确的数字")  Exit Sub  End If"

(6)重点掌握vba函数中的文本函数:instr,split(7)InStr([start, ]string1, string2[, compare]),返回 string2在string1中最先出现的位置,找不到返回“0”,规避了WorksheetFunction.find()函数找不到报错的问题;                如“”“DEMO-3-VBA函数”中提取指定位置的字符:Sheet1.Range("b2") = Left(Sheet1.Range("a2"), InStr(Sheet1.Range("a2"), "@") - 1)

(8)Split(expression[, delimiter[, limit[, compare]]]),“delimiter”为指定分隔符,若不输入则默认为空格符“ ”分割,返回一个下标从零开始的一维数组,它包含指定数目的子字符串。(9)用“DEMO-3-VBA函数“演示,用工作表的文本函数进行提取很麻烦,但split进行文本提取很方便,如“Range("b2") = Split(Range("a2"), "-")(2)”得到"2015",而         Range("b2") = Split(Range("a2"), "-")(2) & "年" & Split(Range("a2"), "-")(3) & "周",可得到“2015年37周"。 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3