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操作步骤
打开你的 Excel,按 Alt + F11 进入 VBA 编辑器。 菜单点 插入 → 模块,把上面代码整段粘进去。 回到 Excel,按 Alt + F8,选中 一键填充金额公式,点 运行。看 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操作步骤
同样 Alt + F11 → 插入模块,粘贴上面的代码。 Alt + F8 运行 一键填充公式_自选。第一个框填 C(想算的列的字母),确定;第二个框填=A2*B2(你的公式),确定。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操作步骤
Alt + F11 → 插入模块,粘贴代码。 在 C 列填好分数(从第二行开始),Alt + F8 运行 一键填充及格判断。看 D 列:每行自动显示"合格"或"不合格",合格绿底、不合格红底,谁过谁挂一目了然。 以后分数有变动,重新跑一次即可,绿色红色跟着刷新。
小结
今天这招的核心就一句话:用 End(xlUp) 找到最后一行,再用 Range(...).Formula = 把公式一次性填进整块区域,Excel 会自动把相对引用逐行变。三个案例从"固定算金额"到"自己选列选公式"再到"判断加标色",覆盖日常九成以上的批量套公式场景。下一篇我们聊聊怎么一键把公式算出来的结果"原地转成数值",避免别人打开表时公式串味、引用错位。