Vba 如何使用“复制”复制所有单元格&引用;在公式中,并将值粘贴在其上?
我是一个绝对零的VBA初学者,我唯一知道的是我打算做什么是不可能通过Excel中可用的功能,需要一个VBA代码。所以,如果有人愿意帮忙,我需要一个完整的VBA代码准备运行!谢谢 任务:在一个非常大的工作表中,我需要复制公式中包含“!”的所有单元格(即引用其他工作表的所有单元格),并将其替换为各自的值(类似于“粘贴值”)。此任务的目的是消除对其他工作表的所有引用,以实现完全独立的工作表,同时保持所有值不变 所以我想我需要的是一个循环,它穿过整个工作表,复制一个单元格,如果它的公式中有一个感叹号,然后将值粘贴在完全相同的位置。环应覆盖整个板材 这有意义吗?那么:Vba 如何使用“复制”复制所有单元格&引用;在公式中,并将值粘贴在其上?,vba,excel,Vba,Excel,我是一个绝对零的VBA初学者,我唯一知道的是我打算做什么是不可能通过Excel中可用的功能,需要一个VBA代码。所以,如果有人愿意帮忙,我需要一个完整的VBA代码准备运行!谢谢 任务:在一个非常大的工作表中,我需要复制公式中包含“!”的所有单元格(即引用其他工作表的所有单元格),并将其替换为各自的值(类似于“粘贴值”)。此任务的目的是消除对其他工作表的所有引用,以实现完全独立的工作表,同时保持所有值不变 所以我想我需要的是一个循环,它穿过整个工作表,复制一个单元格,如果它的公式中有一个感叹号,然
Sub dural()
Dim r As Range
For Each r In ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas)
If InStr(r.Formula, "!") > 0 Then r.Value = r.Value
Next r
End Sub
- 声明一个对象变量以保存对要迭代的单元格的引用
Dim r As Range
- 获取活动工作表中具有公式的所有单元格
ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas)
- 循环通过所有获得的细胞;每个单元格都是跨越一行一列的
对象,因此您可以使用范围
对象变量作为“迭代变量”,并为每个r
循环构造使用
,以迭代所有单个单元格:
您还可以提取一个对象变量来保存要迭代的单元格:For Each r In ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas)
Dim cellsWithFormula As Range Set cellsWithFormula = ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas) For Each r In cellsWithFormula
- 您可以使用单元格的
属性访问其公式,并使用内置的formula
函数验证其是否包含感叹号:InStr
If InStr(r.Formula, "!") > 0 Then
返回要查找的字符串的起始索引(如果找到);如果找不到,它将返回0-因此,如果返回值大于0,我们知道公式中包含感叹号。如果公式在第20个字符处包含感叹号,则函数将返回20InStr
- 要将公式替换为其值,只需将其赋值为
value
这将删除该公式,并将其替换为上次计算的结果。请注意,如果由于r.Value = r.Value
设置为Application.Calculation
而未计算工作表,这意味着这样做将写入错误的值。在覆盖公式之前,可以通过调用其xlCalculationManual
方法强制重新计算单个单元格,如下所示:Calculate
r.Calculate
- 那么:
Sub dural()
Dim r As Range
For Each r In ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas)
If InStr(r.Formula, "!") > 0 Then r.Value = r.Value
Next r
End Sub
- 声明一个对象变量以保存对要迭代的单元格的引用
Dim r As Range
- 获取活动工作表中具有公式的所有单元格
ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas)
- 循环通过所有获得的细胞;每个单元格都是跨越一行一列的
对象,因此您可以使用范围
对象变量作为“迭代变量”,并为每个r
循环构造使用
,以迭代所有单个单元格:
您还可以提取一个对象变量来保存要迭代的单元格:For Each r In ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas)
Dim cellsWithFormula As Range Set cellsWithFormula = ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas) For Each r In cellsWithFormula
- 您可以使用单元格的
属性访问其公式,并使用内置的formula
函数验证其是否包含感叹号:InStr
If InStr(r.Formula, "!") > 0 Then
返回要查找的字符串的起始索引(如果找到);如果找不到,它将返回0-因此,如果返回值大于0,我们知道公式中包含感叹号。如果公式在第20个字符处包含感叹号,则函数将返回20InStr
- 要将公式替换为其值,只需将其赋值为
value
这将删除该公式,并将其替换为上次计算的结果。请注意,如果由于r.Value = r.Value
设置为Application.Calculation
而未计算工作表,这意味着这样做将写入错误的值。在覆盖公式之前,可以通过调用其xlCalculationManual
方法强制重新计算单个单元格,如下所示:Calculate
r.Calculate