提问人:Jeff 提问时间:2/9/2011 最后编辑:Jeff 更新时间:11/9/2023 访问量:508541
如何在没有 VBA 或宏的情况下循环使用 excel?
How to loop in excel without VBA or macros?
问:
是否可以在不安装 VBA 或宏的情况下在 Excel 中迭代(循环)一组行?网络搜索没有产生任何有用的东西。
=IF('testsheet'!$C$1 <= 99,'testsheet'!$A$1,"") &
IF('testsheet'!$C$2 <= 99, 'testsheet'!$A$2,"") &
IF('testsheet'!$C$3 <= 99, 'testsheet'!$A$3,"") &
... and so on through !$C$40, !$A$40 ...
事实上,我必须在每个单元格中重复上述代码 40 次,并且我有 200 多个单元格需要该代码。
我非常擅长 PHP/SQL,但只是学习 Excel。
答:
您可以在计算电子表格上的某个位置创建一个表格,该表格对每对单元格执行此操作,并使用自动填充来填充它。
将该表中的结果聚合到结果单元格中。
然后,引用结果的 200 个单元格可以引用保存聚合结果的单元格。在最新版本的 excel 中,您可以命名结果单元格并以这种方式引用它,以便于阅读。
要自己回答这个问题(如果我错了,请纠正我):
在未安装 VBA/启用宏的情况下,无法在 Excel 中遍历一组行(如数组)。
评论
获得公式结果的方法是从新工作表开始。
在单元格 A1 中输入公式
=IF('testsheet'!C1 <= 99,'testsheet'!A1,"")
将该单元格向下复制到第 40 行 在单元格 B1 中输入公式
=A1
在单元格 B2 中输入公式
=B1 & A2
将该单元格向下复制到第 40 行。
所需的值现在位于第 40 行的该列中。
这不是你想要的答案,但这是明智地完成工作的最快方法,而无需创建一个自定义公式来接受一个范围并进行计算(这样做会更有趣)。
我只是在寻找类似的东西:
我想对每个奇数行列求和。
SUMIF
有两个可能的范围,一个是求和的范围,另一个是要考虑条件的范围。
SUMIF(B1:B1000,1,A1:A1000)
此函数将考虑 B 范围内的单元格是否为“=1”,仅当为“=1”时,它才会对相应的 A 单元格求和。
为了让“=1”在 B 范围内返回,我把它放在 B 中:
=MOD(ROWNUM(B1),2)
然后自动填充以获得要填充的模数,您可以在此处放置可计算的条件,以获取循环遍历每个单元格所需的 SUMIF 或 SUMIFS 条件。
比 ARRAY 的东西更容易,并隐藏了循环的后端!
评论
当您具有以不同速率重复的可变循环时,请添加更多列。我不确定你想做什么,但我认为我已经做了一些可以适用的事情。
在Excel中创建单个循环非常简单。它实际上为你做了工作。在新工作簿上尝试此操作
- 在 A1 中输入“1”
- 在 A2 中输入“=A1+1”
向下拖动时,A3 将自动变为“=A2+1”。第一步不必那么明确。如果您只是在 A2 中输入“2”,Excel 将自动识别模式并计数,但如果我们希望 B1-B5 为“100”,B5-B10 为“200”(以相同的方式计数),您就会明白为什么知道如何明确地做到这一点很重要。在此方案中,您只需输入:
- B1 中的“100”,拖动到 B5 和
- B6 中的“=B1+100”
B7 会在您向下拖动时自动变为“=B2+100”等,所以基本上它每 5 行无限增加一次。要在 A 列中对数字 1-5 进行循环:
- 在单元格 A1 中输入“=A6”。当您向下拖动时,由于 Excel 的执行方式,它将在单元格 A2 等中自动显示为“=A7”。
因此,现在我们有 A 列重复数字 1-5,而 B 列每 100 个单元格增加 5。例如,您可以使用与 A 列相同的方法使 B 列重复数字 100-900,以此来生成具有多个变量的每个可能的组合。向下拖动列,它们会无限地这样做。我没有明确地解决给定的场景,但如果您遵循这些步骤并理解它们,则该概念应该会为您提供涉及添加更多列并将它们合并或用作变量的问题的答案。
@Nat给出了一个很好的答案。但是,既然没有办法缩短代码,为什么不使用串联来“生成”您需要的代码呢?当我懒惰时(在单元格中键入整个代码),它对我有用。
因此,我们需要的只是识别模式>使用 excel 构建模式“结构”>添加“ = ”并将其粘贴到预期的单元格中。
例如,您要实现(我的意思是,在单元格中输入):
=IF('testsheet'!$C$1 <= 99,'testsheet'!$A$1,"") &IF('testsheet'!$C$2 <= 99,'testsheet'!$A$2,"") &IF('testsheet'!$C$3 <= 99,'testsheet'!$A$3,"") &IF('testsheet'!$C$4 <= 99,'testsheet'!$A$4,"") &IF('testsheet'!$C$5 <= 99,'testsheet'!$A$5,"") &IF('testsheet'!$C$6 <= 99,'testsheet'!$A$6,"") &IF('testsheet'!$C$7 <= 99,'testsheet'!$A$7,"") &IF('testsheet'!$C$8 <= 99,'testsheet'!$A$8,"") &IF('testsheet'!$C$9 <= 99,'testsheet'!$A$9,"") &IF('testsheet'!$C$10 <= 99,'testsheet'!$A$10,"") &IF('testsheet'!$C$11 <= 99,'testsheet'!$A$11,"") &IF('testsheet'!$C$12 <= 99,'testsheet'!$A$12,"") &IF('testsheet'!$C$13 <= 99,'testsheet'!$A$13,"") &IF('testsheet'!$C$14 <= 99,'testsheet'!$A$14,"") &IF('testsheet'!$C$15 <= 99,'testsheet'!$A$15,"") &IF('testsheet'!$C$16 <= 99,'testsheet'!$A$16,"") &IF('testsheet'!$C$17 <= 99,'testsheet'!$A$17,"") &IF('testsheet'!$C$18 <= 99,'testsheet'!$A$18,"") &IF('testsheet'!$C$19 <= 99,'testsheet'!$A$19,"") &IF('testsheet'!$C$20 <= 99,'testsheet'!$A$20,"") &IF('testsheet'!$C$21 <= 99,'testsheet'!$A$21,"") &IF('testsheet'!$C$22 <= 99,'testsheet'!$A$22,"") &IF('testsheet'!$C$23 <= 99,'testsheet'!$A$23,"") &IF('testsheet'!$C$24 <= 99,'testsheet'!$A$24,"") &IF('testsheet'!$C$25 <= 99,'testsheet'!$A$25,"") &IF('testsheet'!$C$26 <= 99,'testsheet'!$A$26,"") &IF('testsheet'!$C$27 <= 99,'testsheet'!$A$27,"") &IF('testsheet'!$C$28 <= 99,'testsheet'!$A$28,"") &IF('testsheet'!$C$29 <= 99,'testsheet'!$A$29,"") &IF('testsheet'!$C$30 <= 99,'testsheet'!$A$30,"") &IF('testsheet'!$C$31 <= 99,'testsheet'!$A$31,"") &IF('testsheet'!$C$32 <= 99,'testsheet'!$A$32,"") &IF('testsheet'!$C$33 <= 99,'testsheet'!$A$33,"") &IF('testsheet'!$C$34 <= 99,'testsheet'!$A$34,"") &IF('testsheet'!$C$35 <= 99,'testsheet'!$A$35,"") &IF('testsheet'!$C$36 <= 99,'testsheet'!$A$36,"") &IF('testsheet'!$C$37 <= 99,'testsheet'!$A$37,"") &IF('testsheet'!$C$38 <= 99,'testsheet'!$A$38,"") &IF('testsheet'!$C$39 <= 99,'testsheet'!$A$39,"") &IF('testsheet'!$C$40 <= 99,'testsheet'!$A$40,"")
我没有输入它,我只是使用“&”符号在 excel 中组合排列好的单元格(另一个文件,而不是我们正在处理的文件)。
请注意:
第 1 部分>IF('testsheet'!$C$
第 2 部分>1 to 40
第 3 部分><= 99,'testsheet'!$A$
part4 >1 to 40
第 5 部分>,"") &
- 输入零件 1 到 A1,零件 3 到 C1,零件到 E1。
- 在 A1 中输入 “ = A2 ”,在 C1 中输入 “ = C2 ”,在 E1 中输入 “ = E2 ”。
- 在 B1 中输入 “ = B1+1 ”,在 D2 中输入 “ = D1+1 ”。
- 在 G2 中输入“ =A2&B2&C2&D2&E2 ”
- 在 I1 中输入“ =I2&G2 ”
现在选择 A2:I2 ,然后将其向下拖动。请注意,数字每增加一行,生成的文本将逐个单元格和逐行合并。
- 复制 I41 内容,
- 把它贴在某个地方,在前面加上“ = ”,去掉多余的&和后面。
结果 = 按预期编写代码。
我使用 Excel/OpenOfficeCalc 来帮助我为我的项目生成代码。对我有用,希望对其他人有所帮助。(:
我在寻找一种方法来制定预测项目的时间表时遇到了这个问题。我希望能够设置项目工期,并让计划的小时数从一周开始到结束填充。从本质上讲,我想做一个for循环。由于我不想使用 VBA,因此我需要构建一个外部表,该表列出了每个星期的编号,并具有相应数量的列,周数后面有 1。然后,我构建了附加的表并使用了以下公式:
=IFERROR(IF($G14<=L$4, IF($H14<53,VLOOKUP($H14,Table2[#All],(COUNTIF($K14:K14, ">0")+2),), 0)*$E14, 0), 0)
IFERROR
从空白单元格中删除任何错误,并提供更好的外观。
第一个检查项目开始日期是否等于或大于日历行中的周日期。IF
第 2 次检查项目工期是否小于一年,然后在表 2 中找到正确的行,然后列索引基于 ,它从项目行的开头开始计算非零的数量,然后加 2(如果没有非零,则索引的列将是第 2 列, 这是表 2 中带有 1 的第一列)。IF
COUNTIF
当两个语句的计算结果均为 TRUE 时,则结果为 1,乘以每周估计时间。IF
如果任一语句是,则为结果。IF
FALSE
0
我还将使用此公式的区域中的数字格式化为自定义,以从视图中删除任何纯零。0;-0;;@
评论
看看这个制作蛞蝓的简单公式。它可能会对你有所帮助。它获取单元格中的值,并生成第一个单词-第二个单词的 slug。
=LOWER(TEXTJOIN(“-”,TRUE,(TEXTSPLIT(B2,{“ ”,“&”,“/”},,TRUE,1))))
此公式将使用 B2 中的值并删除 & 和 / 字符的任何空格,并将它们替换为 - 字符。
评论