夜雨聆风学习资料网

ARTICLE · 1145710

Excel VBA编程-一键批量套用公式

Excel VBA编程-一键批量套用公式

今天从网上收集到的做法

今天在网上翻了 ExcelSamurai、DashboardsExcel、UMA Technology 等几个讲"整列套公式"的帖子,大家总结出来的办法其实就四类,核心都一样:

  • 直接把公式赋给整块区域:Range("C2:C100").Formula = "=A2*B2",写一次,Excel 会自动把每行相对引用顺下去,第 3 行就变成 =A3*B3,不用一行一行循环。这是最省事、最推荐的一种。
  • 用 End(xlUp) 找最后一行:不要写死 C100,改成 Cells(Rows.Count, 1).End(xlUp).Row,数据多一行少一行都能自动适配,公式永远填到真正有数据的最后一行。
  • 公式里带双引号要写两个:比如 =IF(C2>=60,"合格","不合格"),VBA 里双引号是字符串边界,所以里面的双引号要写成 "" 两个。
  • 也可以先写第一行再 AutoFill/FillDown 往下拖:效果一样,但没有"整块赋值"那一行来得干脆。

今天我们就用第一种 + End(xlUp),配合完全 0 基础已经学过的 Cells、Range、If、For,把"填公式"这件事做成一个按钮,下面三个案例从固定列到自由输入,再到带判断标色,一步步练熟。

【SVG 示意图】 


案例一(简单):一键把"单价×数量"算到金额列

功能说明

假设你的表是:A 列单价、B 列数量,想在 C 列算出金额(单价×数量)。平时要手动写公式再往下拖,数据一多就烦。这个宏点一下,就把 =A2*B2 这个公式一次性填进 C 列从第二行到最后一行,每行自动对应自己的单价和数量。

代码

Sub 一键填充金额公式()    Dim 最后一行 As Long    ' 用 End(xlUp) 找到 A 列最后一行(往上找到第一个有内容的格子)    最后一行 = Cells(Rows.Count, 1).End(xlUp).Row    ' 把公式一次性写到 C2 到最后一行的整块区域    ' Excel 会自动把相对引用逐行变:第3行变成 =A3*B3    Range("C2:C" & 最后一行).Formula = "=A2*B2"    MsgBox "金额公式已填好!", vbInformationEnd Sub

操作步骤

  1. 打开你的 Excel,按 Alt + F11 进入 VBA 编辑器。
  2. 菜单点 插入 → 模块,把上面代码整段粘进去。
  3. 回到 Excel,按 Alt + F8,选中 一键填充金额公式,点 运行。
  4. 看 C 列:从第二行到最后一行都自动出现了金额,不用再手动拖公式。

小提示:这个宏作用在"你当前正在看的那张表"上。使用前确保 A 列有数据、C 列是空的或可以覆盖。


案例二(中等):自己指定填哪一列、用什么公式

功能说明

上一个写死了"算 C 列金额"。现实中你想算的列和公式天天变。这个版本运行时会弹两个输入框:先问你要填哪一列(比如填 C),再问你要用什么公式(比如 =A2*B2 或 =A2/B2)。填完点确定,它就按你给的列和公式一键批量套用,灵活很多。

代码

Sub 一键填充公式_自选()    Dim 目标列 As String    Dim 公式文本 As String    Dim 最后一行 As Long    ' 第一步:问要填公式的列    目标列 = InputBox("要填公式的列,例如 C:", "目标列")    If 目标列 = "" Then Exit Sub   ' 点了取消就退出    ' 第二步:问公式内容(用 A2/B2 这种写法)    公式文本 = InputBox("请输入公式(用 A2/B2 写法,例如 =A2*B2):", "公式内容")    If 公式文本 = "" Then Exit Sub    ' 找到 A 列最后一行,决定公式填到哪一行    最后一行 = Cells(Rows.Count, 1).End(xlUp).Row    ' 把用户给的公式填到指定列的整块区域    Range(目标列 & "2:" & 目标列 & 最后一行).Formula = 公式文本    MsgBox "已在 " & 目标列 & " 列填好公式!", vbInformationEnd Sub

操作步骤

  1. 同样 Alt + F11 → 插入模块,粘贴上面的代码。
  2. Alt + F8 运行 一键填充公式_自选。
  3. 第一个框填 C(想算的列的字母),确定;第二个框填 =A2*B2(你的公式),确定。
  4. C 列立刻按你给的公式批量算好。换别的列、别的公式,重跑一次就行。

提醒:公式里如果带文字(如 =IF(C2>=60,"合格","不合格")),双引号要写成两个 "",案例三会直接演示。


案例三(实用小案例):批量判断"及格"并自动标色

功能说明

成绩表最常见的一个需求:C 列是分数,想在 D 列自动判断"合格 / 不合格",并且合格的行标绿、不合格的标红,一眼就能看出来。这个实用版把"填判断公式"和"按结果标色"合成一步,公式里的文字双引号用 "" 正确写出,标色用最基础的 If + For 循环遍历每一行。

代码

Sub 一键填充及格判断()    Dim 最后一行 As Long    Dim 行号 As Long    ' 找到 C 列(分数列)最后一行    最后一行 = Cells(Rows.Count, 3).End(xlUp).Row    ' 在 D 列填判断公式    ' 公式里带文字,双引号必须写成两个双引号 ""    Range("D2:D" & 最后一行).Formula = "=IF(C2>=60,""合格"",""不合格"")"    ' 先强制算一遍,确保下面读到的 Value 是最新结果    Application.Calculate    ' 遍历每一行,按结果给 D 列单元格标底色    For 行号 = 2 To 最后一行        If Cells(行号, 4).Value = "合格" Then            Cells(行号, 4).Interior.Color = RGB(198, 239, 206)   ' 浅绿        Else            Cells(行号, 4).Interior.Color = RGB(255, 199, 206)   ' 浅红        End If    Next 行号    MsgBox "判断完成,已自动标色!", vbInformationEnd Sub

操作步骤

  1. Alt + F11 → 插入模块,粘贴代码。
  2. 在 C 列填好分数(从第二行开始),Alt + F8 运行 一键填充及格判断。
  3. 看 D 列:每行自动显示"合格"或"不合格",合格绿底、不合格红底,谁过谁挂一目了然。
  4. 以后分数有变动,重新跑一次即可,绿色红色跟着刷新。

小结

今天这招的核心就一句话:用 End(xlUp) 找到最后一行,再用 Range(...).Formula = 把公式一次性填进整块区域,Excel 会自动把相对引用逐行变。三个案例从"固定算金额"到"自己选列选公式"再到"判断加标色",覆盖日常九成以上的批量套公式场景。下一篇我们聊聊怎么一键把公式算出来的结果"原地转成数值",避免别人打开表时公式串味、引用错位。

相关学习资料