Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2776|回复: 1

[已解决]还原公式(代码简化)

[复制链接]
发表于 2016-6-13 18:04 | 显示全部楼层 |阅读模式
本帖最后由 乐乐2006201506 于 2016-6-13 20:01 编辑

怎样将下面代码提出来的公式,还原到原工作表中相应位置?  如果可以简化下面代码则更好。谢谢!

Sub 提取带公式的单元格()
    Dim FormulaCells As Range, Cell As Range
    Dim FormulaSheet As Worksheet
    Dim Row As Integer

    '创建Range对象
    On Error Resume Next
    Set FormulaCells = Range("A1").SpecialCells(xlFormulas, 23)

    '没有找到公式
    If FormulaCells Is Nothing Then
        MsgBox "当前工作表中没有公式!"
        Exit Sub
    End If

    '增加一个新工作表
    Application.ScreenUpdating = False
    Set FormulaSheet = ActiveWorkbook.Worksheets.Add
    FormulaSheet.Name = "“" & FormulaCells.Parent.Name & "”表中的公式"

    '列标题
    With FormulaSheet
        Range("A1") = "公式所在单元格"
        Range("B1") = "公式"
        Range("C1") = "值"
        Range("A1:C1").Font.Bold = True
    End With

    '读取公式,同时在状态栏中显示进度。
    Row = 2
    For Each Cell In FormulaCells
        Application.StatusBar = Format((Row - 1) / FormulaCells.Count, "0%")
        With FormulaSheet
            Cells(Row, 1) = Cell.Address _
                (RowAbsolute:=False, ColumnAbsolute:=False)
            Cells(Row, 2) = " " & Cell.Formula
            Cells(Row, 3) = Cell.Value
            Row = Row + 1
        End With
    Next Cell

    '调整列宽
    FormulaSheet.Columns("A:C").AutoFit
    Application.StatusBar = False
End Sub

最佳答案
2016-6-13 19:44
代码简化就不做了,还原的如下:
  1. Sub 公式还原()
  2.     Dim n&
  3.     With Sheet2
  4.         On Error Resume Next
  5.         n = .Cells(.Rows.Count, 1).End(xlUp).Row
  6.         For i = 2 To n
  7.             Sheet1.Range(.Range("A" & i).Value).Formula = Mid(.Range("B" & i).Value, 2, 300)
  8.         Next
  9.     End With
  10. End Sub
复制代码

保护公式.rar

30.32 KB, 下载次数: 10

发表于 2016-6-13 19:44 | 显示全部楼层    本楼为最佳答案   
代码简化就不做了,还原的如下:
  1. Sub 公式还原()
  2.     Dim n&
  3.     With Sheet2
  4.         On Error Resume Next
  5.         n = .Cells(.Rows.Count, 1).End(xlUp).Row
  6.         For i = 2 To n
  7.             Sheet1.Range(.Range("A" & i).Value).Formula = Mid(.Range("B" & i).Value, 2, 300)
  8.         Next
  9.     End With
  10. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 21:22 , Processed in 0.229125 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表