如何实现当A列等于"D"时,用对应B列值自动填充C列至下一个"A=D"处
实现Excel中按A列标记批量填充C列内容
需求说明
初始状态:A列存在多个值为"D"的单元格,对应B列是不同的标题内容,C列处于空白状态。
期望效果:当A列出现"D"时,用该单元格对应的B列值填充C列从当前位置开始的所有空白单元格,直到下一个A列"D"出现,再切换为新的B列值继续填充。
方法一:公式法(无需编程,直接下拉)
在C2单元格输入以下公式,选中C2单元格后下拉填充至目标区域即可:
=LOOKUP(2,1/(A$2:A2="D"),B$2:B2)
公式原理
A$2:A2="D":判断从A2到当前行的A列单元格是否等于"D",生成由TRUE/FALSE组成的数组1/(...):将TRUE转为1,FALSE转为错误值#DIV/0!LOOKUP(2,1/(...),B$2:B2):LOOKUP会忽略错误值,找到最后一个等于1的位置,返回对应的B列值,实现“锁定最近一次出现的D对应的B值”的效果
方法二:VBA批量填充(适合大数据量自动处理)
按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码后运行:
Sub FillCColumn() Dim ws As Worksheet Dim lastRow As Long Dim currentBVal As String Dim i As Long Set ws = ActiveSheet ' 可改为指定工作表,比如Set ws = ThisWorkbook.Sheets("Sheet1") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow If ws.Cells(i, "A").Value = "D" Then currentBVal = ws.Cells(i, "B").Value ws.Cells(i, "C").Value = currentBVal Else If ws.Cells(i, "C").Value = "" Then ws.Cells(i, "C").Value = currentBVal End If End If Next i End Sub
代码说明
- 自动获取当前工作表A列最后一行数据
- 遍历每行,遇到A列为"D"时更新当前要填充的B列值,并填充当前C单元格
- 非"D"行且C列空白时,用最近一次记录的B列值填充
内容的提问来源于stack exchange,提问作者brandon campbell
相关产品推荐
相关产品推荐

