计算机规定1个二进制叫做位bit,8个bit叫做Byte,在VBA中,能操作的最小单元就是Byte。 可是很多时候,为了节约空间,很多程序都是利用bit位来代表某些信息的,比如ZIP压缩后的数据。...在VBA中,位操作符主要有 And 运算符 Eqv 运算符 Imp 运算符 Not 运算符 Or 运算符 Xor 运算符 这些操作符一般都用在IF语句的条件判断上,And和Or用的是最多的,这种用法比较好理解...主要讲讲位操作,很多语言都有移位的操作,但是VBA却没有,不过可以利用位操作符来实现移位函数。 首先需要明白,作为一个整数,左移和右移造成了什么改变。...Dim flag As Boolean '是否要把第32位转换为1 For i = 1 To num '判断第31位是否=1 If V >=...Else flag = False End If V = V * 2 Next If flag Then
对Office文件读取和写入custom.xml,就是读取和写入ZIP文件,读取ZIP文件并解压缩可以查看前面文章VBA解压缩ZIP。...读取custom.xml步骤: 使用类模块CPKZip的功能,将custom.xml读取并解压 然后转换编码 再使用类模块CXML对数据进行处理 最后输出到Excel Private Const CUSTOMUI_NAME...'不存在的时候插入一个默认模板 If MsgBox("文件中没有customUI.xml,是否插入一个模板?"...tabs>" & _ "" & _ "" Else...Exit Sub End If Else '将读取到customUI.xml Byte数组,编码UTF8转换为UCS2
如PowerQuery里的逆透视功能,行列转置功能,标题行提升功能等。...将模板文件内的PowerQuery查询使用替换的方式,将其引用的文件路径替换为当次循环引用文件。...dotNET与VBA在Excel对象模型上的差别 在dotNET脚本中,引用Excel对象模型,理论上可以替代VBA的脚本,但本轮测试发现,在dotNET上的Excel对象模型,貌似未能有最全的开放给VBA...所以本来预期全程由dotNET脚本来完成的文件路径替换操作,最终不得不再次启用VBA代码的方式,让dotNET脚本调用其VBA代码,实现没有接口方法的情况下仍然可以控制PowerQuery对象模型的操作...同样地使用COM接口,在我们数据处理环节还是可接受的,并没有像业务系统那般存在大量并发性,需忍受COM接口通信的缓慢,在数据处理环节,能够按时准确性完成任务即可。
在VBA开发网抓程序中,会用到xmlhttp/winHttp.winHttprequest.5.1等组件,当时笔者也是这样进入了网抓领域的,这些都是非常过时的东西,在.Net的开发中,有大量的更好用的轮子使用...,在Excel催化剂开发过程中,也会用到,在此向大家简单分享,希望对VBA转VSTO开发群体有所帮助。...,微软造得不够易用,就有其他开发者在其基础上做封装,做更简单的轮子出来,所以这也是VBA转VSTO的一大优势,可以用上专业程序员世界的大量轮子,而VBA几乎没有什么轮子可用,只有零散的一些小代码片段。...Github上的RestSharp HtmlAgilityPack类库 此类库对于解释html页面特别好用,类似于python的Beautifulsoup4那样,可以将网页的html格式,转换为xml格式...网络爬虫和反爬虫,是一股正邪交锋的战场,在笔者2011年左右玩VBA爬虫,和如今炙手可热全民爬虫的环境已不同,普通爬虫程序已经没有什么可作为了,也就是说,参加了那些培训班速成出来的,也只能呵呵了。
业务场景 大量的数据分散在零散的Excel表格中,需要对其进行合并汇总,才能做分析工作。...转换后的结果表 隐藏的细节处理部分 前面说到,报表格式转标准数据源格式,知道了思路,基本可以自己简单写几句VBA代码得到想要的结果。...前提条件是数据量不大的情况下可接受 读取Excel文件,若使用COM的方式来读取,大批量文件处理来说,肯定会有性能瓶颈,所以Excel催化剂一开始就不打算用原生的Excel的VBA对象模型来操作,改换为使用不依赖于...总结 当大量的数据未能以标准的数据表结构存放时,必要给后续的分析工作带了许多麻烦。 而现实中又不能保证所有数据生成都有专门的系统来操作。...插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。
在上个世界末推出的Excel5.0(那时还没有office这个产品套件)就已经支持VBA了,那可是在Win32下(一种基于dos的shell,并不属于真正的操作系统)。...所以,如果某一个系统要求将数据转换为表格和图表,那么这项任务交给Excel来完成是再合适不过了。 3. Excel的集成方案演化 在不同的时期,Excel的集成方案也不尽相同。...在Python语言中,支持Excel文件格式的库非常多,如非常著名的openpyxl、xlsxwriter等。通过这些库,可以在不依赖Excel环境的情况下,生成xlsx格式的文件。...当发布时,会将上面的代码转换为使用相应数据库(如MySQL、SQL Server)的特定编程语言(如JavaScript、Java等)的代码。这么做的好处如下: 1....用Python替代VBA 目前微软官方还没有将Python作为VBA的替代品,倒是将JavaScript作为了另外一个选择(office.js),不过可以利用xlwings做一个折中。
前面说过了二维表转一维表,现在来看看一维表转二维表。 1、需求: 将1个一维表格转换为二维表格: ? 2、实现方法: 数据透视表 要实现这个方法,其实熟练数据透视表的处理起来是非常的简单的: ?...SQL语句 会SQL语句的处理起来也很简单,只要明白SQL语句就可以: transform sum(数据) select 项目 from [Sheet1$] group by 项目 pivot 姓名...VBA代码实现 使用VBA代码来实现自然也是没有问题的,使用字典来分别记录行和列的序号,然后输出到1个二维数组就可以: Sub TarnsTable2() Dim drow As Object...Dim dcol As Object Set drow = VBA.CreateObject("Scripting.Dictionary") Set dcol = VBA.CreateObject...Cells.Rows.Count, 1).End(xlUp).Row arr = Range("A1").Resize(i_row, 3).Value '记录项目的行号、姓名的列号
学习Excel技术,关注微信公众号: excelperfect 下面的自定义函数:CountBlock函数,可以根据提供的一个或多个分隔符进行查找,得到这些分隔符将字符串分隔成的文本块数。...CountBlock = iCountString(strText, strChar) + 1 End If End Function 代码中,调用了TranslateString函数,将所有不同的分隔符转换为所提供的分隔符...Then strText = TranslateString(strText, strDelimiter, strChar) End If 其中的TranslateString函数来源于《VBA代码库...其中的iCountString函数来源于《VBA实用小程序54:计算字符串中指定子字符串出现的次数》。 上述测试代码及结果如图1所示。 ?...图2 CountBlock函数很巧妙,它没有像通常那样遍历,而是将文本字符串中不同的分隔符统一转换成分隔符参数中的第1个分隔符,然后通过计算这个分隔符的数量来得出分隔的块数。
从Excel中导出图片,是一个很常规的需求,也有一些久旧不衰的界面操作法小技巧从OpenXml文件中批量导出,在VBA开发中,也会使用Chart对象的背景图的技巧来导出。...PictureBox容器装载的图片,其实也可以用间接的方式实现,将普通的图片或图表等对形状对象,转换为Image类型的图片,并且可以保证到图片大小是最原始的图片。...原理是使用剪切板将图片复制到内存剪切板中,再由剪切板转换为图片,在复制过程中,我们需要考虑原始的图片在Excel上显示是已经缩放过的,需要将其放大为原始尺寸再复制。...直接大量的现成方法简单调用,无需像VBA那般苦苦地挣扎着,调用各种古老方法或系统API等来扩展原生VBA对象的不足。...同时VSTO框架下,大量的特有功能,如PictureBox窗体宿主控件等可以大大地丰富了原生Excel的功能,也是VBA开发所不能享受到的好处。
比如Tomcat、Jetty;但是,其实在面向大量用户,高并发(每秒访问量过万)的情况下,通常都不会直接是用Tomcat来接收请求。...xls格式批量转xlsx 假如我们有一批xls文件,希望批量转换为xlsx: ?...xml的方法还是挺麻烦的,在写完上面的方法后我灵机一动,VBA不就有现成的读取文本框的方法吗?...使用xlwings解决需求 苹果电脑是不支持VBA的,上面调用VBA的代码对于苹果电脑来说无效,但所幸的是xlwings在0.21.4版本中新增了访问文本框文本的属性text。...没有这个属性,请注意升级: pip install xlwings -U 总结 读取excel中的数据,基本没有VBA干不了的事,python调用VBA也很简单,直接使用pywin32即可。
2019.11.2 Fix7 1、修复插件在Office2010 64位不能启动的问题。 2、改进编辑器传送代码方式,多个VBA宿主时,传送给最后激活的宿主。...已知bug: 1、由于Epplus不支持PrefixCharacter,在导入Excel数据时,如果VBA代码内容的第一个字符是单引号(即VBA注释),第二个字符不是汉字的情况下,会导致单引号丢失。...七、快捷键说明: F1 软件说明 F2 传送到VBE F3 编辑器切换为VBA语言 F4 编辑器切换为C#语言 F5 切换编辑/选择模式 F6 修改并保存当前选择的代码 F7 修改当前选择的分组 F8...注意: 1、需要注册之后才能看到非免费权限的代码内容(权限在示例文件里面自行设置)。 2、为方便部署,本程序被打包成一个文件,在运行时动态释放。...这可能会触发杀毒软件报警,请点击允许或将本程序放入白名单。本程序通过了哈勃分析测试、火绒5.0杀毒检测。小红伞会提示病毒,这个是误报(因为我也不会写病毒!),可以加入白名单。
1、函数的理解: SUMIF,条件求和函数,是一个常用的数据统计公式。SUMIF函数原理可以分步理解: ?...,第3个参数是在“[]”内的,首先我们也完成这个可省略的功能,省略的情况下,其实第1和第3参数相当于是同一个了,所以我们只要知道第3个参数sum_range没有传递的情况下,直接让3个参数sum_range...SUMIF函数的第2个参数criteria输入形式是非常多样的,除了前面看到的输入的是条件本身之外,它还可以输入比较符: > 大于 < 小于 >= 大于或等于 <= 小于或等于 要实现这个功能,...strcp = "<" ElseIf VBA.Left(strcp, 1) = ">" Then strcp = ">" Else strcp = ""...End Select Next MySumIf = dSum End Function Left,Mid,Len都是String类型的基础操作函数,在VBA中用的会比较多,用法比较简单
End If块中的某些VBA语句总会执行吗? 不一定,除非还有Else子句。在条件为False时,If … End If语句内的语句不会被执行。...7.什么时候可以省略Select Case语句的Else部分? 如果在所有Case语句都不匹配的情况下没有要执行的代码,则可以省略Else部分。 8.IIf函数有什么作用?...13.过程中的代码行数有什么限制? 没有限制,但是良好的编程习惯规定过程不应太长,最多30至40行代码是合理的。 14.如何将数组作为参数传递给过程? 数组名后加上空括号。...15.如何指定函数要返回的值? 通过将值赋给函数名称。 16.过程中的局部变量能否在调用过程之间“记住”其值?如果要这样,怎么办? 能够,通过使用Static关键字声明变量。...17.VBA可以识别通用格式的日期,例如2020/11/11。在VBA代码中,如何表明该值是日期? 通过将其括在#字符中。 18.哪个VBA函数用于为日期添加间隔? DateAdd函数。
:更为通用的类型转换接口,适用于N:N转换 注意:就它没有泛型约束,因为是通用 另外,还有一个条件接口ConditionalConverter,可跟上面3个接口搭配组合使用,提供前置条件判断验证...这套接口,解决了PropertyEditor做类型转换存在的所有缺陷,且具有非常高的灵活性和可扩展性。下面进入详细了解。 Converter 将源类型S转换为目标类型T。...适合1:1转换场景:可以将任意类型 转换为 任意类型。...class java.lang.Double class java.lang.Byte 关注点:数字类型的字符串,是可以被转换为任意Java中的数字类型的,String(1) -> Number(N)...这不官方也给出了使用指导意见:在Converter/ConverterFactory接口能够满足条件的情况下,可不使用此接口就不使用。
Excel功能区中的复制命令 在使用VBA代码复制单元格区域之前,看看Excel功能区中的“复制”按钮命令。...在某些情况下,这正是你想要的。然而,在其他情况下,这是你不想要的。...在这种(和其他类似)情况下,可能不希望仅依赖带有Destination参数的Range.Copy方法。换句话说:在某些情况下,不希望复制和粘贴源单元格区域的所有内容。...例如,在某些情况下,可能希望:复制包含公式的单元格区域,并在目标单元格区域粘贴值。 这正是上面例子中发生的情况。在这种情况下,可能只希望粘贴值(无公式)。...为了在使用VBA时控制在特定目标单元格区鞓内复制的内容,必须了解Range.PasteSpecial方法。
该算法首先在需求之间平均分配供给,然后任何多余的供给(供给>需求)在尚未满足的需求之间平均分配,接着继续重新分配多余的供给,直到满足所有要求或者没有多余的供给来重新分配。...该函数首先设置错误处理并将单元格区域强制转换为值。 该函数的结果放置在一个动态调整大小的数组中,以匹配需求的数量。...该函数的核心是Do循环: 通过将可用供应除以未满足需求的数量来计算分配 将分配添加到每个未满足的需求中 在下一次循环迭代中收集任何多余的分配作为可用的供应 计算未满足的要求 当没有未满足的需求或者没有可用的供应要分配时...= CVErr(xlErrValue) '两个参数都必须包含数据 If IsEmpty(Supply) Or IsEmpty(Demands) Then GoTo FuncFail '将单元格区域转换为值...MaxMinFair满足了除2个最大的需求外的所有需求,而这两个最大需求被分配了相同的4.9。 小结 当想要分配资源而不允许大量资源需求来占用太多小资源需求时,MaxMinFair是一个不错的选择。
Python既可用于临时数据分析,也可用于较小的自动化任务,还可用于大型生产代码库,如Instagram的后端。 在本节中,将介绍Python的核心概念,并将它们与Excel和VBA进行比较。..."i在5与10之间" Else Debug.Print "i大于10" End If 在VBA中,可以将代码段重新格式化为完全等效的以下格式: If i 在第二个版本中,对代码不熟悉的开发人员在第一次浏览时可能看不到ElseIf和Else条件,如果代码是较大代码库的一部分,尤其如此。...而在VBA中的相同功能需要编写大量代码或安装加载项。 虽然Python的标准库涵盖了大量的功能,但当你仅依赖于标准库时,仍然存在编程繁琐或速度缓慢的任务。这就是PyPI的用武之地。...缺少对科学计算的支持是VBA的一个明显限制。但是,即使看看核心语言特性,VBA也落后了,这在下一节中会看到。 现代语言特征 自Excel 97以来,VBA语言在语言特性方面几乎没有任何重大变化。
,适用于N:N转换,因为没有泛型约束,所以是通用 ConditionalConverter:前置条件判断,决定是否进行转换 ---- Converter 将源类型S转换为目标类型T。...适合1:1转换场景:可以将任意类型 转换为 任意类型。...这不官方也给出了使用指导意见:在Converter/ConverterFactory接口能够满足条件的情况下,可不使用此接口就不使用。...层这么写我并不建议,因为语义上没有对齐,势必在代码书写过程中带来一定的麻烦。...先注册,先服务(若支持的话) 默认情况下,Spring会注册大量的内建转换器,从而支持String/数字类型转换、集合类型转换,这能解决协议层面的大部分转换问题。
EXCEL必备工具箱--选择图片所在单元格功能,批量选择有图片的单元格或没有图片的单元格 EXCEL必备工具箱--超强查找功能的自定义函数Wlookup,lookup,Llookup,Xlookup替代版...EXCEL必备工具箱--Word转Excel功能,最大程度保留word原有格式,直接将Word文档转excel文档2019年新版全年一次性奖个税筹划指南,发年终奖再也不怕多交个税 EXCEL必备工具箱-...无法将类型为DocumentClassCOM对象强制转换为接口类型.Interop.Word....代码 EXCEL必备工具箱--不改变引用的情况下复制公式 EXCEL必备工具箱--工作日、假日统计(支持中国假日) EXCEL必备工具箱--将当前工作表(或当前文档)复制多份或一次新建多个空表功能 EXCEL...EXCEL必备工具箱--选取内容转代码功能,获取ASCII码对应字符功能,方便VBA代码编写人员 EXCEL必备工具箱--添加函数功能,自定义函数让你如虎添翼 EXCEL必备工具箱--与EXCEL紧密结合的计算器
在.Net的世界中,恰恰提供了这样的能力,用LINQ,仿佛回到了写SQL语句查询的环境中,对编辑中的使用的各种对象集合,在排序、筛选、去重等SQL语句常用的功能上,在LINQ的帮助下,一样可以对代码中的集合对象进行这些操作...所以在VBA的世界中,对某对象进行排序、筛选、去重等操作,在VSTO的世界中,使用LINQ来操作,将变得十分简单。...除了前面提到的区域转DataTable的方法外,其实笔者还用到过LinqToExcel这个类库,同样也是非常好用,有兴趣的朋友们,可以搜索了解下,示例文件也是做得很丰富易懂。...>(); } } 将Excel里的集合对象转换为LINQ可以调用的方法,只需使用一下Cast转换一下即可,十分方便。...结语 LINQ真的是.Net语言一个非常好用的技术,可以让代码写起来无比流畅,非常值得学习掌握,当然VBA转到VSTO开发的群体,也优先学习这个技术,让自己的代码写出来,更加.Net化,而不是简单的只是语法转换
领取专属 10元无门槛券
手把手带您无忧上云