如何在VB中复制含公式列的值到另一列(仅保留值)
单列值复制(仅保留值、去除公式)的VBA解决方案
如果你只需要处理单列,不用逐行循环,直接对整列范围操作更高效,下面提供两种实用方案:
方法1:复制粘贴法(直观易读)
这种方法和手动复制粘贴值的逻辑一致,适合新手理解:
Sub CopyColumnValuesOnly() Dim sourceCol As Range Dim targetCol As Range ' 定义源列:Invoice表的B列,从第2行到最后一行有数据的行 Set sourceCol = Sheets("Invoice").Range("B2:B" & Sheets("Invoice").Range("B" & Rows.Count).End(xlUp).Row) ' 定义目标列:Data表的C列,从第2行开始粘贴 Set targetCol = Sheets("Data").Range("C2") ' 复制源列并仅粘贴值 sourceCol.Copy targetCol.PasteSpecial Paste:=xlValues ' 清除剪贴板,避免后续操作受影响 Application.CutCopyMode = False End Sub
方法2:直接赋值法(高效快速)
跳过剪贴板直接赋值,处理大数据量时速度更快:
Sub CopyColumnValuesDirectly() Dim sourceCol As Range Dim lastRowSource As Long Dim targetStartRow As Long ' 获取源列最后一行的行号 lastRowSource = Sheets("Invoice").Range("B" & Rows.Count).End(xlUp).Row ' 定义源列范围 Set sourceCol = Sheets("Invoice").Range("B2:B" & lastRowSource) ' 目标列起始行(这里用Data表C列的下一个空行) targetStartRow = Sheets("Data").Range("C" & Rows.Count).End(xlUp).Row + 1 ' 直接将源列的值赋值给目标列对应的范围 Sheets("Data").Range("C" & targetStartRow & ":C" & targetStartRow + sourceCol.Rows.Count - 1).Value = sourceCol.Value End Sub
使用说明
- 根据实际需求修改代码中的工作表名称(比如
Sheets("Invoice")、Sheets("Data"))和列标识(比如B列、C列) - 如果需要从第1行开始处理,把代码中的
B2改成B1,C2改成C1即可
内容的提问来源于stack exchange,提问作者user3441193
相关产品推荐
相关产品推荐

