我在VBA中绝对是零初学者,我唯一知道的是我打算通过Excel中的可用功能来实现,并且需要VBA代码。所以,如果有人愿意帮助,我需要一个完整的VBA代码准备好运行!感谢。
任务:在一张非常大的工作表中,我需要复制包含“!”的所有单元格(散落在周围)在他们的公式中(即所有引用其他表格的单元格),并用它们各自的值替换它们(类似于“粘贴值”)。此任务的目的是消除对其他工作表的所有引用,以实现完全独立的工作表,同时保持所有值不变。
所以我想我需要的是一个遍历整个工作表的循环,如果在其公式中有一个感叹号,则复制一个单元格,并将该值粘贴到完全相同的位置。循环应覆盖整张纸。
这有意义吗?
答案 0 :(得分:2)
怎么样:
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)
循环通过所有获得的细胞;每个单元格是一个Range
对象,跨越1行和1列,因此您使用r
对象变量作为"迭代变量",并使用For Each
循环构造迭代所有单个细胞:
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
InStr
会返回您要查找的字符串的起始索引(如果找到的话);如果找不到,则返回0 - 因此,如果返回值大于0,我们知道公式包含感叹号。如果公式在第20个字符处包含感叹号,则该函数将返回20. / p>
要将公式替换为其值,只需将其指定为Value
r.Value = r.Value
这消除了公式并将其替换为上次评估的公式。请注意,如果由于Application.Calculation
设置为xlCalculationManual
而未计算工作表,则表示这样做会写入错误的值。您可以通过在覆盖公式之前调用其Calculate
方法来强制重新计算单个单元格,如下所示:
r.Calculate