You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Evaluate替代For Each循环实现单元格批量赋值?

如何使用Evaluate替代For Each循环实现单元格批量赋值?

嘿,我来帮你搞定这个问题!你想用Evaluate替代For Each循环给A1:D5区域批量填充序号对吧?其实Evaluate可以通过数组式计算直接完成这类批量操作,相比循环不仅代码更简洁,处理大区域时效率也会高很多。

先回顾下你的原代码,它是通过循环逐个给单元格赋值1到20的序号:

Sub Loop_Range_2()
    Dim cel As Range, counter As Long
    For Each cel In Range("A1:D5")
        counter = counter + 1
        cel = counter
    Next
End Sub

下面给你两种用Evaluate实现的方案,适配不同的Excel版本:

方案一:兼容所有Excel版本的通用写法

Sub Evaluate_Range()
    Dim totalCells As Long
    totalCells = Range("A1:D5").Cells.Count
    Range("A1:D5") = Evaluate("TRANSPOSE(ROW(1:" & totalCells & "))")
End Sub

我给你拆解下这段代码的逻辑:

  • 先通过Range("A1:D5").Cells.Count算出目标区域的总单元格数(这里是20)
  • ROW(1:20)会生成一个包含1到20的纵向数组
  • TRANSPOSE把纵向数组转成一维数组,这样赋值时会按行的顺序填充到A1:D5区域里
  • 最后直接把Evaluate计算出的数组批量赋值给整个区域,一步完成所有单元格的填充,完全不需要循环

方案二:Excel 365/2021+ 专属简洁写法

如果你的Excel版本支持SEQUENCE函数(这是365及以后版本新增的函数),可以用更直观的写法:

Sub Evaluate_Sequence()
    Range("A1:D5") = Evaluate("SEQUENCE(5,4)")
End Sub

这里SEQUENCE(5,4)会直接生成一个5行4列的序号数组,和A1:D5的区域大小完全匹配,直接赋值就能得到和原循环一样的结果,连转置操作都省了。

总的来说,Evaluate的核心是把字符串当作Excel公式计算,返回对应的数组后批量赋值给单元格区域,避免了逐个单元格循环的性能开销,非常适合这类批量赋值场景。

备注:内容来源于stack exchange,提问作者Peace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:14:29