VBA
文章平均质量分 69
奔跑的犀牛先生
自学代码的中年大叔,人不痴狂枉少年
展开
-
VBA小模板:如何把 txt / json /xml 文件内容读入到excel 表里
如何把 txt / json /xml 文件内容读入到excel 表里原创 2023-03-22 16:42:14 · 3175 阅读 · 0 评论 -
VBA小模板,跨表统计的2种写法
VBA小模板,跨表统计的2种写法原创 2023-03-09 15:06:02 · 1247 阅读 · 0 评论 -
我的创作纪念日
我的创作纪念日原创 2023-02-08 11:44:46 · 227 阅读 · 7 评论 -
VBA小模板,一个不放回的抽奖用的例子
一个不放回的抽奖用VBA怎么写原创 2023-01-11 14:52:26 · 1790 阅读 · 1 评论 -
如何用VBA从EXCEL表取数据?问题1:1次性整体写入,还是循环写入数组呢? 问题2:取得数据后如何定位需要的那个?
如何用VBA从EXCEL表取数据?--是1次性整体写入数组,还是循环写入数组呢? 以及对取得得数据进行 定位/查找需要的内容原创 2023-01-06 16:15:20 · 3805 阅读 · 3 评论 -
VBA小模板:一个普通随机抽奖,需要模拟多轮用VBA怎么做?
一个普通随机抽奖,需要模拟多轮用VBA怎么做?原创 2023-01-04 20:19:20 · 1890 阅读 · 0 评论 -
在VBA里使用range(cells(),cells()) ,一个容易出错的点:需要注意 range() 和cells() 前都指定好sheet名!
在VBA里使用range(cells(),cells()) ,一个容易出错的点:需要注意 range() 和cells() 前都指定好sheet名!原创 2023-01-04 17:31:40 · 5155 阅读 · 3 评论 -
VBA小模板:一个奖励放回的普通抽奖用VBA怎么写?
一个奖励放回的普通抽奖用VBA怎么写?原创 2023-01-04 14:03:30 · 771 阅读 · 0 评论 -
VBA,用VBA进行分列(拆分列)的2种方法
1 方法1:原列上分列Range("a:a").TextToColumns other:=True, otherchar:=";"2 方法2: split()+dictionary 的方法3 代码Sub test10()'拆分列的方法1Range("a:a").TextToColumns other:=True, otherchar:=";"'拆分列...原创 2020-01-15 17:22:43 · 20343 阅读 · 0 评论 -
VBA 不能给数组赋值,其实只是不能给静态数组整体赋值
VBA 不能给数组赋值,其实只是不能给静态数组整体赋值原创 2019-12-23 18:15:31 · 6210 阅读 · 2 评论 -
EXCEL公式引用得是空的单元格,但是却不返回空““,而是返回0是怎么回事? 怎么处理呢?
1问题:如果公式引用了空单元格,但是却返回了0,是怎么回事?2原因我猜想,EXCEL的函数,函数必须有返回值,EXCEL的返回值将空值处理为0返回了=INDEX(A1:B3,1,1) =OFFSET(A1,1,1)3解决用if()判断下就可以 =IF(INDEX(A1:B3,1,1)="","",INDEX(A1:B3,1,1)) =IF(OFFSET(A1,1,1)="","",OFFSET(A1,1,1))...原创 2022-03-10 11:25:03 · 17056 阅读 · 2 评论 -
EXCEL2019新增的几个很有用的函数
concat() 升级版本的 concatenate() textjoin() 升级版本的 phonetic() ifs() 升级版的if() 再也不用嵌套了 maxifs() 省得筛选后再比较了,真的好用! minifs() switch() 专门针对枚举用得?我记得 max() min() 还有 large() small()不知道新函数有没有这几个...原创 2022-03-10 10:45:19 · 719 阅读 · 1 评论 -
VBA实验,一个 有再来一次+ 动态概率 + 多轮循环的代码思路
需要解决的问题如果随机到再来1次,需要再循环1次 根据随机次数,或者总奖池去升级到下一个奖池 如果随机到大奖,则当前循环打断,重新回到第一个奖池 对于大奖,有一个个人权重的累积 需要思路清晰的统计循环的关键输出变量 找到可以调节关键输出变量的 控制变量问题1, do while i < a+c 更灵活,可在循环中判断如果随机到再来一次,再重新再来一次之前用的for i = 1 to n select case ...next...原创 2021-10-09 15:09:35 · 439 阅读 · 0 评论 -
VBA关于声音的多种实现方法
1 在EXCEL里播放声音1如果是64位系统,需要加PtrSafe 关键字,否则不需要 Private Declare PtrSafe Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszName As String, ByVal uFlags As Long) As Long sndPlaySound32(文件参数) 参数这写声音文件的绝对路径就行Privat...原创 2021-01-31 21:48:55 · 10642 阅读 · 0 评论 -
EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等
EXCEL的真正空值是 blank,只能用=isblank() 来判断但是EXCEL里真正用到 blank的地方很少。大多数情况下只需要判断 if(A1="",) 即可。另外EXCEL的内置函数一般不能返回空值,EXCEL文档这里不好编辑,我贴了我自己文档的图片如下总结的结论如下凡是为blank的地方,EXCEL也认为是可以被认为为""。反之不成立就像文本型的数字,虽然类型是文本,但是可以直接当文本计算。也是反之不成立函数无法返回真正的blank,但是可以返回""比如EXCEL的直接.原创 2020-12-20 11:57:55 · 32878 阅读 · 2 评论 -
VBA的 随机数 rnd 和 randomize 如何配合使用? 伪随机数带来的问题,根据需要产生不同的随机数!
Sub t1111()Debug.Print RndEnd SubRnd函数在产生随机数的时候,并不bai是真正的随机,而是通过一定的公式计算产生的随机,现在我们把那个计算产生随机数的公式叫做f(x),第一个x取值为1 那么便会产生第一个随机数f(1),第2个随机数是在第一个随机数的基础上产生的即f(f(1)),依次类推,第3个随机数是f(f(f(1))) 不难发现,第一个数1,对于产生的一系列随机数是非常重要的,这个1,我们称之为种子数,一个种子数就对应一系列的随...原创 2021-01-29 17:32:56 · 10965 阅读 · 6 评论 -
VBA里的一些特殊符号在语句内的作用,连接2个或拆分1个语句的符号
_ 2行链接; 不分行: 2行语句连接?stop 停止,查看内存中的断点,否则看不到原创 2021-01-14 01:33:41 · 2293 阅读 · 0 评论 -
VBA 关于数组的index :index的个数, index的初值,index的上下限,index序列
1 数组的不同定义方式,会导致 index的起点不同总结,简单的说,就是VBA里的数值,index默认从0 开始,而从工作表来源的函数,默认index从1开始用VBA的数值array() 或者 dim 或者 redim 这几种方法,默认index从0开始 当然 dim 或者 redim 可以声明从1开始或从其他开始 而从工作表区域赋来的数组,无论是1维还是2维,index都从1开始 [{}] 这种赋值方式,我认为是偏工作表的, 因为 [a1:b5] 就等同于 range("a1;b...原创 2021-01-14 00:46:52 · 8209 阅读 · 0 评论 -
VBA, 变量不赋初值是个坏习惯,系统默认为空值,会导致一些奇怪的问题
1 总结虽然VBA允许,不对变量赋初值,不定义,直接开始使用。但确实不是什么好习惯 模块开头加上 option explicit 吧, 然后,先定义 x=0, y=1 等等 变量没有初值的情况,在第一次数值运算时 会被默认为0 ,x+1=1 但是这样会造成一些,不是预期内的情况,所以要特别注意2 下面的例子对比说明了问题用没有赋初值的写法,给array 赋值,会导致 数组的第一个值为 空 数组的大小,因为只在 dim 和 redim 时决定,比如 dim arr(2,2)...原创 2021-01-13 21:00:26 · 1809 阅读 · 0 评论 -
用VBA做一个儿童识字,数字考察游戏(持续更新中)
如何让孩子觉得有意思呢?促进学习原创 2021-01-13 00:00:19 · 615 阅读 · 3 评论 -
VBA与windows的API调用,比如GetKeyboardState
VBA可以调用很多windows的API,但是需要提前声明 64位的聲明要多加一個關鍵字的 Declare PtrSafe Function 增加PtrSafe即可 #...转载 2021-01-12 09:31:46 · 2679 阅读 · 2 评论 -
EXCEL做俄罗斯方块的详细步骤
准备尝试一下,学习原创 2021-01-10 20:20:21 · 1331 阅读 · 1 评论 -
VBA,shape的移动 shape.incrementLeft 和 shape.incrementTop
实现移动Sub ftest11()Dim p1 As ShapeDim t1 As DoubleSet p1 = Worksheets("sheet7").Shapes.AddShape(msoShapeOval, 100, 100, 200, 100) p1.Fill.ForeColor.RGB = RGB(0, 0, 250)With p1.ThreeD .Visible = True .Depth = 100 .ExtrusionColor.RG...原创 2021-01-02 22:09:35 · 1638 阅读 · 0 评论 -
VBA的shape相关的旋转rotation,包括3D旋转 .threeD.incrementRotationX() 和 .threeD.incrementRotationY()
1 shape的旋转相关方法shape.incrementRotation() '绕Z轴旋转,也就是垂直于屏幕(的Z轴)旋转 shape.incrementRotationZ() shape.incrementRotationX() ' 很多形状并不支持,需要3D的才支持 shape.incrementRotationY() shape.Rotation()2 围绕Z轴的旋转(垂直于屏幕的旋转,切面的平面旋转)shape.incr...原创 2021-01-02 20:04:32 · 1240 阅读 · 0 评论 -
VBA,Shapes.AddCurve SafeArrayOfPoints:=pts 画贝塞尔曲线
1 Shapes.AddCurve SafeArrayOfPoints:=pts 贝塞尔曲线https://docs.microsoft.com/zh-cn/office/vba/api/excel.shapes.addcurve 由指定曲线的顶点和控制点的坐标对组成的数组。您指定的第一个点是起始顶点, 接下来的两个点是第一段贝塞尔线段的控制点。该曲线每增加一条线段,就要为其指定一个顶点和两个控制点。您指定的最后一个点是曲线的结束顶点。请注意,必须指定的点数始终为 3n + 1...原创 2021-01-02 19:53:45 · 977 阅读 · 3 评论 -
VBA 关于for循环和变量的测试, for 循环的自变量i会停留在i+1,自变量会基于最新变化改变
1 for循环的自变量i会停留在i+1for循环结束后,如果继续查看i 会发现i 会停留在i+1, 但不会停留在i+1之外更大的数字Sub test14()For i = 1 To 10 '循环结束会挪到下一个i,且停住! Debug.Print iNext Debug.Print i Debug.Print i Debug.Print iEnd Sub2 for循环的自变量i会一直往前走for循环中,如果自变量被改变了,自变量会接...原创 2020-12-21 21:57:06 · 1803 阅读 · 1 评论 -
VBA: 因为1个简单时间clock引发得一连串问题, application.ontime 不会自循环,而 call 自身或者 go label则会真的自循环。
网上看到一个Sub clock0() Range("a1").Value = Time() testcount0End SubSub testcount0() Application.OnTime Now() + TimeValue("00:00:01"), procedure:="clock0"End Sub原创 2020-12-21 21:28:09 · 1356 阅读 · 0 评论 -
VBA 如何用VBA控制,开启,激活其他非VBA程序?
AppActivate title , [ wait ]https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/appactivate-statementAppActivate 语句语法具有下列命名参数:title 必需。时间 可选。 毫秒?特点:这个是激活已经启动的程序,而不会自动开启程序这里的title需要以 字符串的形式 “” 出现,并且支持模糊查找,多个只会任意激活1个。原创 2020-12-20 17:25:00 · 6168 阅读 · 0 评论 -
VBA: 如何停止当前VBA程序(尤其是死循环)的运行,用程序停止其他程序,暂停程序等(未完成)
暂停程序的3个思路暂停 application.wait(now + timevalue("00:00:03")) 和 application.ontime(now + timevalue("00:00:03")) sleep 500 加入断点,然后点F5运行一下不就暂停了吗? stop 不行,程序运行时被挂起了 运行的时候程序是挂起的吧,只能加暂停的代码才能让你玩...原创 2020-01-20 15:31:21 · 34667 阅读 · 0 评论 -
VBA每日一练(25)在VBA里,使用fso统计所有子文件夹的文件数量,使用递归
递归是什么我call我自己我调用我自己为什么要用递归?因为使用递归,不需要知道需要循环多少次比如文件夹下的子文件夹里的文件数,这个可能嵌套无限层次,使用if+循环很难判断的,使用递归就可以https://blog.csdn.net/wang_zhenwei/article/details/78857933http://club.excelhome.net/thre...原创 2019-12-10 10:42:36 · 926 阅读 · 0 评论 -
VBA每日一练(23)在VBA里,什么时候可以直接用 for each循环,而不用 for i= xx 或 while循环呢?
1 问题:什么时候可以用 for each 进行循环? 不需要知道具体的循环变量,上下限。答案 : 当for each xx in yyy ,只要 yyy 是 对象集合(s) 比如像workbook 这样的可数的对象的集合就可以 可以用for each 的地方都可以用 for i = 下限 to 上限 ste...原创 2019-12-09 16:34:02 · 767 阅读 · 0 评论 -
VBA每日一练(24)在VBA里,3种方法,使用fso 如何统计 某种后缀名类型的文件数量
fso统计文件数量fso统计文件数量,如果不区分文件类型,可以非常方便 fso.getfolder().files.count 但是fso统计某种类型的文件数量,需要遍历才行 可以用 for each 遍历 最准的方法是用 fso.getExtensionName() = "" 来判断 用 right(filename,3)="" 得明确的知道 后缀名位数,一般是知道是哪种...原创 2019-12-09 17:51:46 · 1579 阅读 · 0 评论 -
VBA每日一练(22),VBA 的 scripting 类库 (scrrun.dll) 和 fso 详细学习
1 scripting类库 (scrrun.dll)Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO。这个介绍的挺好https://www.cnblogs.com/zzstone/p/5530707.html1.1scripting类库有多少东西?scripting.dictionary scripting.f...原创 2019-12-09 15:47:45 · 3093 阅读 · 0 评论 -
VBA每日一练(21),VBA 按行导入txt的内容
代码1Sub ponyma1()'按行逐行导入txt到excelPATH1 = "C:\Users\Administrator\Desktop"Open PATH1 & "\" & "test102.TXT" For Input As #1i = 1Do While Not EOF(1)Line Input #1, str1 Cells(i...原创 2019-12-05 18:26:44 · 930 阅读 · 0 评论 -
VBA每日一练(20),VBA 导出 sheet的某一些单元格为1个txt
问题分析导出 sheet的某一些单元格为1个txt 导出 sheet的某一行为1个txt 导出 sheet的某一个sheet为1个txt代码1Sub jackma102()'尝试每行导出为1个txt'利用open 打开文件找不到会生成的作用PATH1 = "C:\Users\Administrator\Desktop\test1"For i = 1 T...原创 2019-12-05 17:55:33 · 433 阅读 · 0 评论 -
文件导入导出,txt和excel互导,然后导入为行,sheet等。txt的分列导入等等
https://blog.csdn.net/chenqiai0/article/details/52203472https://blog.csdn.net/chenqiai0/article/details/52203423https://blog.csdn.net/chenqiai0/article/details/52137610https://blog.csdn.net/lxp9...原创 2019-12-04 21:59:47 · 350 阅读 · 0 评论 -
几个好例子,测的真仔细 ----我发现我还是比较贪心,毛躁,贪多,欲速而不达
试试Range("a65536").End(xlUp).Row找边界这个比较input 和 lineput比较 print 和 writehttps://blog.csdn.net/qq_38507850/article/details/78631554测试preserve的https://blog.csdn.net/qq_38507850/...原创 2019-12-04 20:05:47 · 109 阅读 · 0 评论 -
VBA每日一练(18),数组array的用法 redim preserve等
定义方式dim arr11 (5)dim arr12 (0 to 5 )dim arr13 (1 to 5)dim arr21(1,5)dim arr22(0 to 1 ,0 to 5)dim arr22(1 to 1 ,1 to 5)dim arr3()静态数组dim arr51(5)动态数组dim arr61()redim arr61(13)r...原创 2019-12-04 18:18:57 · 14014 阅读 · 2 评论 -
VBA每日一练(16),do loop 循环为啥多了1次?--暂时没想明白--头大
本来是写循环,查文件数的但是发现 do loop 会多循环1次? 无论是 do while loop 还是 do loop while 或者是 do until loop 还是 do loop untilhttps://zhidao.baidu.com/question/184272433.htmlSub jackma101()x1 = input_...原创 2019-12-04 17:00:20 · 491 阅读 · 0 评论 -
VBA每日一练(15),VB里调用CMD
VB里调用CMDhttp://club.excelhome.net/thread-1455541-1-1.html原创 2019-12-04 12:01:04 · 1380 阅读 · 0 评论