学习Excel技术,关注微信公众号: excelperfect 下面的自定义函数:CountBlock函数,可以根据提供的一个或多个分隔符进行查找,得到这些分隔符将字符串分隔成的文本块数。...CountBlock函数的代码: ' ---------------------------------------- '参数strText:给出的文本字符串 '参数strDelimiter:文本字符串中的分隔符...函数来源于《VBA代码库07:功能强大的字符替换函数》。...其中的iCountString函数来源于《VBA实用小程序54:计算字符串中指定子字符串出现的次数》。 上述测试代码及结果如图1所示。 ?...图2 CountBlock函数很巧妙,它没有像通常那样遍历,而是将文本字符串中不同的分隔符统一转换成分隔符参数中的第1个分隔符,然后通过计算这个分隔符的数量来得出分隔的块数。
示例:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...。现在需要统计数量总和,如C列所示。...采用的VBA代码如下: Option Explicit Option Base 1 Sub RegExpDemo() Dim objRegEx As Object Dim...Cells(Rows.Count, "B").End(xlUp)) strTxt = objRegEx.Replace(Trim(obj.Value2), "") '将匹配成功的字符串替换为空...这里的正则表达式\d+\*,是匹配星号字符(*)和它前面的数字。 延伸阅读 (1)Evaluate用法 Evaluate函数可以执行一些字符串表达式,并返回表达式的值。...可以将Evaluate函数用于以下场景: 在字符串中执行简单的数学运算。 示例:计算2 + 2 * 3,将结果存储在result变量中。
实现了二维表格转换为一维表格,反过来的功能偶尔也是会用到的: 首先在customUI.xml中增加代码: 回调函数: Sub rbbtnTarnsTable1To2(control As IRibbonControl) Call MShtWk.TarnsTable1To2 End Sub 函数实现...Exit Sub End If Set rng = Selection If rng.Columns.Count 3 Then MsgBox "只能处理3列数据...GoTo 0 If rngout Is Nothing Then Exit Sub Set rngout = rngout.Range("A1") '记录项目的行号、姓名的列号
EXCEL必备工具箱--跨表提取行功能,帮你从相同格式的多张表格中提取关键字一样的行到一个表中 EXCEL必备工具箱--强制读取VBA代码,绕过EXCEL安全机制,无论采用何种保护措施,都可以直接读出VBA...,方便复制时忽略隐藏内容,或者只复制显示的筛选结果 EXCEL必备工具箱--文本与数值转换功能,快速实现将文本格式的数字转换成数值,或将数值转换成文本格式 EXCEL必备工具箱--真正的四舍五入功能,屏幕上显示的数据就是实际运算的数据...EXCEL必备工具箱--选取内容转代码功能,获取ASCII码对应字符功能,方便VBA代码编写人员 EXCEL必备工具箱--添加函数功能,自定义函数让你如虎添翼 EXCEL必备工具箱--与EXCEL紧密结合的计算器...Excel必备工具箱在线帮助关于使用了“禁用宏就关闭文档功能”出现问题的解决 EXCEL必备工具箱--区域文本重排功能,圆你用excel写大段文章的梦想 Excel必备工具箱--汉字转拼音功能,将汉字批量转换成拼音...EXCEL必备工具箱--轻松隐藏/取消隐藏工作表Excel必备工具箱--按工作簿汇总功能,将多个文档相同位置的数据加到一起 EXCEL必备工具箱--从文本中逐个挑出数值功能,众里寻她千百度,文本堆中挑出数
默认从Excel中复制的数据,(如果是复制到Word这类支持表格的软件,会复制表格过去,这个时候还可以进一步转换为文本),列与列之间是使用Tab连接,上一行与下一行是使用换行符连接。...,检查如果输入的是文本newline,就会把连接符替换为真正的换行符。...Next '将列单元格的Text连接起来,并存放到arrStr中 arrStr(iRow) = VBA.Join...(arrCols, strColChar) Next '将连接后每一行的内容连接起来 str = VBA.Join...'复制文本到剪贴板 SetClipText str End If End Sub SetClipText函数是一个比较常用的函数,所以可以放到VBAProject
对这些报表类型的数据合并,还不同于简单的工作薄合并那样,每个工作表里存放的都是标准的流水式记录单数据。无法简单地将复制粘贴的工作用代码自动化实现。 ? 类似报表形式的原始数据结构 ?...当遇上一列有多条记录时,结果表以横向展开的方式存放 功能操作指引 前面描述到的业务场景,用代码实现,其实大部分会一点VBA的人,应该都可以写出来,达到能用的水准。...按提示选择新建新表还是覆盖现有表 转换后的结果表,原数据中一个工作表转换为一条记录(后期再优化父子表结构的转换可转换多条记录,更符合数据分析场景使用),另加上文件名和工作表名两列以示区分数据来源。...转换后的结果表 隐藏的细节处理部分 前面说到,报表格式转标准数据源格式,知道了思路,基本可以自己简单写几句VBA代码得到想要的结果。...前提条件是数据量不大的情况下可接受 读取Excel文件,若使用COM的方式来读取,大批量文件处理来说,肯定会有性能瓶颈,所以Excel催化剂一开始就不打算用原生的Excel的VBA对象模型来操作,改换为使用不依赖于
Excel VBA操作MySQL之七——从文本文件导入数据和数据导出至文本文件演示如何从文本文件导入数据到MySQL数据库,并将数据导出至文本文件。...Excel VBA操作MySQL之十二——获取数据库模式信息演示如何获取有关MySQL数据库模式的信息,如表格结构、列信息等。...Excel VBA操作MySQL之十四——AppendChunk、GetChunk存取文本和图片二进制数据介绍如何使用Excel VBA处理MySQL数据库中的文本和图片二进制数据。...将示例中的服务器地址、数据库名称、用户名和密码替换为自己的MySQL数据库信息。然后,你可以在打开连接之后执行各种数据库操作了。...以下是创建数据库和表格的示例代码:首先,确保已经建立了与MySQL数据库的连接(如前面示例所示),然后可以使用以下代码创建数据库和表格。
前面说过了二维表转一维表,现在来看看一维表转二维表。 1、需求: 将1个一维表格转换为二维表格: ? 2、实现方法: 数据透视表 要实现这个方法,其实熟练数据透视表的处理起来是非常的简单的: ?...SQL语句 会SQL语句的处理起来也很简单,只要明白SQL语句就可以: transform sum(数据) select 项目 from [Sheet1$] group by 项目 pivot 姓名...VBA代码实现 使用VBA代码来实现自然也是没有问题的,使用字典来分别记录行和列的序号,然后输出到1个二维数组就可以: Sub TarnsTable2() Dim drow As Object...Cells.Rows.Count, 1).End(xlUp).Row arr = Range("A1").Resize(i_row, 3).Value '记录项目的行号、姓名的列号...i = 0 To drow.Count - 1 result(i + 2, 1) = tmp(i) Next tmp = dcol.keys() '列
在VBA代码中调用加解密函数方法 说到重点,VBA开发者可能更多场景还要回到自己在VBA代码中想要调用其他语言开发好的函数,例如此篇的自定义函数。...总结 在我过往发表的众多自定义函数里,大部分直接照搬了.Net Framework类库里的函数,让其能够在Excel环境以自定义函数的形式来使用,当中也收到许多反馈说能用自定义函数的人都自己写VBA代码...,不会写代码的人也没必要用自定义函数,文件分发出问题等等如此这般的回复。...第32波-空行空列批量插入和删除 第33波-报表形式数据结构转标准数据源 第34波-提取中国身份证信息、农历日期转换相关功能 第35波-Excel版最全单位换算,从此不用到处百度找答案 第36波-新增序列函数用于生成规律性的循环重复或间隔序列...Excel催化剂 Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。
具体操作1、VBA数组的定义方法下面是几种数组常用的定义方法,一维数组的定义、二维数组的定义直接赋值定义、调用Array函数定义、调用Excel工作表内存数组''''''''''''直接定义给数组赋值'...arr2(2, 2) '读取arr1数组的第2行第2列的数值End Sub2、数组的赋值和计算'读取单元格数据到数组,进行计算,再赋值给单元格Sub arr_calculate()Dim arr ...",") '查看筛选的结果End Sub5、数组维度的转换(Transpose)'数组维数的转换 '一维转二维Sub arr_tranpose1()arr = Array(10, "vba", 2, "...b", 3)arr1 = Application.Transpose(arr)MsgBox arr1(2, 1) '转换后的数组是1列多行的二维数组End Sub '二维数组转一维 '注意:在转置时只有...数组还是很强大的,通过对单元格区域数据的读取,赋值给数组,再利用数组函数或者调用Excel内置函数进行相关处理。
用于匹配字符串的Excel VBA正则表达式函数 要在Excel中使用正则表达式,需要创建自己的函数。...2.默认情况下,该函数区分大小写。要忽略文本大小写,将参数match_case设置为FALSE。因为VBA Regexp的限制,不支持不区分大小写的模式。...[^1-3]将匹配不是1、2或3(即从1到3的任何数字)的任何单个字符。 在电话号码列表中,假设要查找没有国家代码的电话号码。...使用双否定(-)将逻辑值强制转换为1和0。 使用SUM函数将结果数组中的1和0相加。...,而无需将任何VBA代码添加到他们的工作簿中,因为在外接程序安装过程中,这些函数可以顺利集成到Excel中。
标签:VBA实用代码 一个单元格区域内有一组数字,这些数字中存在多个相同的数字,想要将这些数字中的唯一值提取出来并组合成一串数字文本,如下图1所示。...图1 可以使用VBA编写自定义函数来实现,代码如下: Function ConcatenateUnique(ByRef rngRange As Range, _ Optional ByVal...ConcatenateUnique = strAnswer End Function 这个函数仅将指定单元格区域中的唯一值使用可选的格式字符串连接起来。...如果未指定格式字符串,则被视为字符串(@)。此函数在每个值之间插入分隔符字符串,默认分隔符设置为” ”。 这段代码来自strugglingtoexcel.com。...通常,我们会考虑使用Dictionary对象,在连接符合要求的值之前获取唯一列表。然而,这段代码另辟蹊径,使用了VBA中的InStr函数,在连接之前检查是否已将值添加到结果中,如果没有则添加。
VBA再写个简单的测试代码又会发现奇怪的地方: Sub TestNullString() Dim str As String Debug.Print str, str = "", str...这里只能进行猜测了,VBA在比较2个字符串的时候,可能是先读取长度,如果都为0,则判断为相同了,""和vbNullString在使用LEN函数的时候,返回的都是0。 那么,它们2个不同之处在哪里呢?...API String类型参数传递 从帮助文件中知道,vbNullString 值为 0 的字符串,如果真的传递0过去,很明显也是不行的,数据类型就不对,所以这个只是一个标志,VBA编译器会具体去处理这种情况...VBA会帮使用者将VBA的String类型首先从Unicode转换为ANSI编码,然后取出转换后的Char数组的第一个地址,再将这个地址传递给了API,API如果有返回值,VBA就会做一个相反的操作,测试代码...67244 新建文本文档.txt - 记事本 0 新建文本文档.txt - 记事本 67244 这里声明了一个FindWindowByPtr函数,只是把FindWindow的参数由String
为何要使用正则表达式 正则表达式在字符串处理中,是一大利器,从复杂的杂乱的字符串内容中,提取出有用的符合要求的信息,仅使用Excel自带的文本处理函数如LEFT/RIGHT/MID/SUBSTITUTE...相对其他非Excel环境来说,只是简单的一个自定义函数即可调用,无需找各种编程环境来实现,实用性方面还是很强。 DotNet版的正则表达式和VBA版有何不同?...RegexMatch函数用法示例 RegexMatchs函数 相对RegexMatch仅返回一个匹配值,此函数返回的是所有匹配值,并可控制是按列还是按行的方式返回多值 ?...第32波-空行空列批量插入和删除 第33波-报表形式数据结构转标准数据源 第34波-提取中国身份证信息、农历日期转换相关功能 第35波-Excel版最全单位换算,从此不用到处百度找答案 第36波-新增序列函数用于生成规律性的循环重复或间隔序列...插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。
本次的练习是:如下图1所示,使用公式拆分列A中的字符串,从中返回列B中的字符串。...图1 你的公式应该处理任意长度的字符串和任意长度的数字——不仅仅是图1中所显示的长度。此外,不应该使用任何辅助单元格、中间公式或命名区域,或者VBA。 如何使用公式获得结果?...1.动态地将字符串分成单个字符: MID(A2,ROW(A$1:INDEX(A:A,LEN(A2))),1) 返回: {"M";"o";"n";"a";"c";"o";"7";"1";"9";"0";"...A";"u";"s";"t";"r";"a";"l";"i";"a";"1";"4";"8";"4"} 2.使用CODE函数将单个字符转换Excel用来表示每个数字/字母的特定数字: CODE({"M"...这会将这些TRUE和FALSE值转换为数值1和0。
也只是醉了,这样的功能,随便一个VBA学习者都能写得出来。...StringJoinIf函数参数 TextSplit 前面是拼接字符串,此函数相反是拆分字符串,TextSplit返回一个值,返回的值由最后参数控制, TextSplits返回所有值,返回结果可按行或按列排列...其他简单文本处理函数示例 提取替换函数 分别对常用的数字、中文、英文作了单独的函数封装,在第25波的文本处理功能时也有过相应的实现,不过那不是自定义函数,对原始数据有破坏作用,一般建议用函数新开一列来处理数据更为合适...替换指定字符串函数参数说明 总结 一口气发布了众多的文本处理函数,可想而知,日常文本处理过程的繁杂程度,函数越多,效率越高。较Excel的挤牙膏式的新增函数速度,不要想有多大的提升空间。...第32波-空行空列批量插入和删除 第33波-报表形式数据结构转标准数据源 第34波-提取中国身份证信息、农历日期转换相关功能 第35波-Excel版最全单位换算,从此不用到处百度找答案 第36波-新增序列函数用于生成规律性的循环重复或间隔序列
也就是说: [A1:A6].Select 等同于: Evaluate("A1:A6").Select 这样,上文中的第一段代码可简化为: MsgBox [SUM(A1:A6)] 这些括号,就像是VBA中的单元格...还有一个“秘密”就是,也可以在定义的单元格区域名称中使用EVALUATE,因此有一些方法可以在不使用VBA的情况下访问单元格公式中EVALUATE的功能。...Evaluate的基本功能如下: 1.将数学表达式字符串转换为值。 2.将一维和二维字符串数组转换为它们的等效数组。 3.能够处理工作表单元格可以处理的任何公式。 真的,它可以做单元格能做的任何事情!...它包含工作表单元格的所有功能,而“该单元格”包含在VBA命令中。事实上,它甚至可以做单元格不能做的事:可以返回整个数组。...'允许一个文本框里包含另一个文本框要用的公式 Private Sub TextBox1_Change() On Error Resume Next TextBox2.Value = Evaluate
标签:VBA 下图1所示是一个常见的需求,在多个列中放置着每个月份的数据,需要将月份移到单个列中,同时保留报表中的所有描述性信息。...图2 这可以使用一个简单的VBA程序来实现。首先,需要两个数组,一个将保存原始数据,另一个将新格式化的数据放在其中。...在此之后,需要循环遍历15列(3个描述性列和12个数字列)。将ar变量中这15列转换为输出变量var中的5列数据集,然后将数据输出到Output工作表。...For j=4 To 15 这是第4列(Jan)到第15列(Dec)。 接下来的两行是计数器和使变量var动态的语句。...这是一个运行速度非常快的过程。最后一步是转置: sh.
区域的选择及地址的格式,在VBA的写作过程中,经常不能够将程序写死,需要保留一定的灵活性,因此再用Selection.Address就可以动态地告诉程序,从而给出较大的变动余地。...变量的定义,VBA中可以使用未定义的变量,但是推荐对其进行预先定义,定义的方法是Dim加变量名加As加变量类,比如在示例里面,将currentCell界定为Range。...VBA提供数组动态变动的方法,因此在变量的时候,无需对长度进行定义,比如Dim string0。...单元格的定位函数是非常重要的,一般来说,Cells和Offset是比较常用的,因为Excel中绝对位置发生不一致,因此Offset是一定相对定位的方法,意思即为向行和列分别一定多少。...字符串操作函数,字符串的操作是无比重要的,比如在本例中,使用了Split函数来分割字符串,形成字符串数组。 数字操作函数,Sgn是一个非常有用的函数,它会告诉你数据的正负号,在数据操作中,非常有用。
其中特殊点在于数字可以表示为数值和文本还种,文本型数字不能进行计算汇总,需转换为数值,而身份证类的数字,最好保存为文本,防止15位数据有效性原因丢失数据精度。...正则匹配与替换 在字符串处理的世界中,没有比正则表达式处理更合适的了,若想从各种奇葩的文本字符串中找寻想要的信息,最好还是静下心来,学习掌握下正则表达式....替换匹配字符 此处为把匹配到的文本,替换为【正则替换参数】,若留空将进行删除操作,替换为空字符就是删除了原匹配到的内容。...替换功能会把所有匹配到的内容组都进行替换,和上面保留匹配字符的仅取首次匹配到的内容不同。如上例中,匹配中文,替换为空,将只剩下【B】字。 正则查询 ?...只需鼠标双击Pattern内容列的对应行位置,即可把内容保存到剪切板内,写正则自定义函数时可粘贴出来使用。 ?
领取专属 10元无门槛券
手把手带您无忧上云