1. EXCEL VBA怎么实现循环判断
在Excel中实现循环判断需要看实际的应用环境,大概分以下三种情况:
1、在公式中
在公式中经常用row(1:99)这样去构造一个数列,然后通过对这个数列即可实现一定次数(如本例99次)的循环应用,在公式中加入if函数即可以实现循环判断。
2、在VBA中
在VBA中的循环判断其实就很简单了,主要是结合for...next...或loop...until等循环语句结合if...then...else等判断语句来实现。
3、在Excel新功能Power Query中
在Power Query中构造循环有很多方法,比如使用函数List.Transform或List.Accumulate实现转换或迭代计算,其中可以通过各种方式加入条件。例如List.Transform函数的具体用法如下:
PQ-M及函数:批量处理的利器——列表转换函数(List.Transform)及A股数据批量抓取方法
原创 大海 Excel到PowerBI在前面多个文章里用到List.Transform这个函数,为避免影响这些文章的主体内容,没有专门详细展开讲这个函数的具体内容,本篇补上。List.Transform函数的基本功能是实现一个列表到另一个列表的转换,即输入一个列表,相应地得到一个经某些规则转换后的列表。
先来看一下List.Transform函数的基本语法:
List.Transform(列表 , 转换函数)
语法本身很简单,但是,其中的两个参数都非常灵活,因为:
1、第一个参数是列表,但是,列表里的内容是可以任意的东西,简单到几个数字,复杂到一个个的表,甚至可以是表中带表等任何东西!
2、转换函数可以简单到只返回一个字符,却又可以复杂到引用各种函数写任何功能强大的函数体!
所以,单纯学会这个函数的简单用法不难,但要做到灵活运用,就需要在日后大量的实际案例中磨练。本文从几个例子,先让大家对这个函数有一个比较全面的认识。
例1、给某个列表中的数字都加上1(简单的对应转换)
= List.Transform({30,40,21,33},each _+1)
结果:{31,41,22,34}
说明:转换函数中的下换线“_”表示输入列表中的每一个(当前计算)元素
例2、生成一个带10个元素的列表,每个元素的内容均为“A”(生成的内容可以和输入列表完全没有关系)
= List.Transform({1..10}, each"A")
结果:{A,A,A,A,A,A,A,A,A,A}
例3、将数字1~26转换为字母“A”~“Z”
= List.Transform(
{1..26},
each Character.FromNumber(64+_)
)
上面3个例子,简单体现了List.Transform函数将一个列表转换成另一个列表的过程,但是,这仅仅是它的基本功能,实际上,List.Transform还给了你一个批量操作的机制,让你可以批量操作各种内容!
例4、批量抓取A股全部页面数据
首先回头看一下《单页A股实时信息抓取》操作时生成的代码:
这个代码里,实际上只需要将页面进行批量输入,就可以得到批量的页面信息,我们先删除其他步骤代码,仅保留最关键的两行代码,然后套上List.Transform函数修改为自定义函数(并将两行代码连成一个完整语句)如下:
这样,当我们在pg_lst参数中输入页码列表时,所有页码会被List.Transform函数批量转换为对应的页面数据,如取第1~3页数据:
结果如下:
得到了批量的数据,后续就可以转换到表,然后进行后续的数据处理了(方法与《单页篇》一致,不再赘述)。
现在,我们在回头看《格式化表单数据按可配置映射表转换汇总》的内容,看是否容易理解?
2. 急急急!!!!!VBA中用递归调用
Sub test()
n = 5
For i = 1 To n
sumtest = suntest + (-1) ^ i * i
Next i
MsgBox sumtest
End Sub
3. vba编程中for循环该怎么用
Sub 试试()
Dim i% '声明变量i为整数
For i = 2 to 50 Step 1
'中间写你需要添加的命令,想做什么事。
Next
End sub
提示:
一般情况下,会声明变量为整数,不过也不一定,根据你的需要去声明。
Step是步长,你可以理解为每次的步子迈多大,例如:
Step 1 是步长为1,循环时,i依次变化为2、3、4、5..............
Step 2 是步长为2,循环时,i依次变化为2、4、6、8..............
当步长缺省时,默认步为1时,所以当步长为1时可以省略不用写步长,可直接写为
For i = 2 to 50
Next
步长也可为负数,即倒序循环,例如
For i = 50 to 2 Step -1
Next
4. VBA如何按条件多次循环
都没看明白你想干什么?
你不要说你打算实现的思路,你只说思路不说目的,当你的思路是错的时候,别人根本就不明白你想把怎么样的原表变成什么样的目的表。你只说目的就好,思路让答题者来说。
不要这么说:你比如这里的,看标题“按条件多次循环”?这个说法很笼统,看不明白什么意思。再看具体的,每循环1152次就复制一次?这句也不明白你讲的什么,循环那么多次是干什么用的?VBA的每一次循环都可以做很多事情的了。会不会是你想每隔1152行复制一次?再看你的代码,看半天也没看明白....比如你这For循环的前11句都是赋值语句,给测试表的A2:K2填写数据表中的内容,但是你是填写了104800次,每一次的内容还不一样,拿学校里的黑板来说,你拿粉笔写了10万多次,写了又擦掉,擦了又写上,最后黑板上只留最后一次写的,前面10万多次做的都是无意义的擦掉和写上的动作,你累不累?
你要这么说:你的数据表是一个什么样的格式的表,你想复制那些数据表的内容到测试表的那些区域上。这只要这么一说,别人才能明白你想干什么,才能帮你设计VBA代码。
5. 如何用VBA编写一个循环程序
你这个问题属于优化问题的范畴。用lingo吧,那个写这方面程序更专业。
给你个求解实例:
x+y<=5
2*x-y>=3
min z=x^2+y
Rows= 4 Vars= 3 No. integer vars= 0
Nonlinear rows= 1 Nonlinear vars= 1 Nonlinear constraints= 1
Nonzeros= 9 Constraint nonz= 7 Density=0.562
No. < : 1 No. =: 1 No. > : 1, Obj=MIN Single cols= 1
Feasible solution found at step: 3
Variable Value
X 2.161523
Y 1.323045
Z 5.995225
Row Slack or Surplus
1 1.515432
2 0.4323045E-06
3 -0.9344361E-06
可以再交流,或者你把参数具体化我帮你求解也可以。
6. Excel中,在vba中计算几个循环,输出结果
Sub xx()
For i = 1 To 10
m = 0
n = 1
Do Until n = 5
a = Application.WorksheetFunction.randbetween(1, 30)
b = Application.WorksheetFunction.randbetween(1, 100)
If a > b Then
n = n + 1
Else
n = Application.WorksheetFunction.Max(1, n - 1)
End If
m = m + 1
Loop
avm = (avm * (i - 1) + m) / i
Next i
MsgBox avm
End Sub
7. VBA高手解析这一段递归组合算法看不懂
Subzuhe(x%,z%,sr$,ggAsByte)'x新加的数字序号,z原有的数字总和,sr算式,gg原有个数
Ifz+arr(x,1)=hAndgg=g-1Then'和与个数都符合
k=k+1
arr1(k,1)=sr&arr(x,1)&"="&h
ExitSub
EndIf
Ifx<UBound(arr)Andz<hThen'没到最后一个数且和还不足
Ifz+arr(x,1)<hThen'和不足'本行疑似有误,改为Ifgg<g-1Then应省时
zuhex+1,z+arr(x,1),sr&arr(x,1)&"+",gg+1'增加一个数
EndIf
zuhex+1,z,sr,gg'取下一个数
EndIf
EndSub
8. Excel 使用vba做实现递归
可以采取这种思路 1。表的名字用数字(日期,比如1号用 1 ),文档用月,这样是为了方便引用 2。每个表的第一行用于引用上一张表的汇总数据,第二行保留该表的汇总数据 3。
先建立从1-31张空白表,保存,复制成1-12个月12个文档,修改月初的表的引用和月末的引用 4。 备份这12个文档(可能的话用于下一年) 优点:容易实现,简单不复杂,不需要太多的技巧 缺点:繁琐,每天1张表,还有许多引用,可能到年末的时候运行会很慢,(可以通过把引用上月的数据转成数字而不是公式)
9. VBA excel 修改递归问题 循环递归造成内存溢出
内存溢出,只能修改算法来解决。
10. vba中五种循环语句的区别
1、For ……Next 语句,适用于顺序操作
例1.在立即窗口输出1到100
For n=1 to 100 '从1到100 ,执行下行代码
debug.Print n
next n
2、For……Each……Next语句,适用于集合的操作
例2.输出指定单元格区域所有单元格的内容
For Each Cell in myRange '遍历区域内的所有单元格
debug.Print Cell.Value
next Cell
3、Do While 条件 ……Loop 语句。
例3、在立即窗口输出1到100
n=0
Do While n<=100'当n小于等于100时 ,执行下行代码,否则退出
n=n 1
Debug.Print n
Loop
4、While 条件…… Wend 语句。
例4、在立即窗口输出1到100
n=0
While n<=100'当n小于等于100时 ,执行下行代码,否则退出
n=n 1
Debug.Print n
Wend
5、Do ……Loop Until 条件 语句。
例5、在立即窗口输出1到100
n=0
Do '执行下行代码
n=n 1
Debug.Print n
Loop Until n >100 ‘当n大于100时退出循环
6、Do ……Loop While 语句 ,鬼老的思维真是最诡异,把While放在Loop后面却不是退出循环的条件,而是继续执行循环的条件。真令汉语思维费解。
例6、在立即窗口输出1到100
n=0
Do '执行下行代码
n=n 1
Debug.Print n
Loop While n <=100 ‘当n小于等于100时 ,继续执行循环。