Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何使用“复制”复制所有单元格&引用;在公式中,并将值粘贴在其上?_Vba_Excel - Fatal编程技术网

Vba 如何使用“复制”复制所有单元格&引用;在公式中,并将值粘贴在其上?

Vba 如何使用“复制”复制所有单元格&引用;在公式中,并将值粘贴在其上?,vba,excel,Vba,Excel,我是一个绝对零的VBA初学者,我唯一知道的是我打算做什么是不可能通过Excel中可用的功能,需要一个VBA代码。所以,如果有人愿意帮忙,我需要一个完整的VBA代码准备运行!谢谢 任务:在一个非常大的工作表中,我需要复制公式中包含“!”的所有单元格(即引用其他工作表的所有单元格),并将其替换为各自的值(类似于“粘贴值”)。此任务的目的是消除对其他工作表的所有引用,以实现完全独立的工作表,同时保持所有值不变 所以我想我需要的是一个循环,它穿过整个工作表,复制一个单元格,如果它的公式中有一个感叹号,然

我是一个绝对零的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
    
    InStr
    返回要查找的字符串的起始索引(如果找到);如果找不到,它将返回0-因此,如果返回值大于0,我们知道公式中包含感叹号。如果公式在第20个字符处包含感叹号,则函数将返回20

  • 要将公式替换为其值,只需将其赋值为
    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
        
        InStr
        返回要查找的字符串的起始索引(如果找到);如果找不到,它将返回0-因此,如果返回值大于0,我们知道公式中包含感叹号。如果公式在第20个字符处包含感叹号,则函数将返回20

      • 要将公式替换为其值,只需将其赋值为
        value

        r.Value = r.Value
        
        这将删除该公式,并将其替换为上次计算的结果。请注意,如果由于
        Application.Calculation
        设置为
        xlCalculationManual
        而未计算工作表,这意味着这样做将写入错误的值。在覆盖公式之前,可以通过调用其
        Calculate
        方法强制重新计算单个单元格,如下所示:

        r.Calculate
        

      我编辑了你的答案,加入了更多的“钓鱼竿”,希望你不介意。@Mat'smugh我觉得你的编辑很棒!感谢您花时间添加这篇有价值的教程材料。我对您的答案进行了编辑,添加了更多的“钓鱼竿”,希望您不要介意。@Mat'smugh我认为您的编辑非常出色!感谢您花时间添加此宝贵的教程材料。