2014-11-14 44 views
1

我必须清理包含敏感数据的财务报告,但仍保留报告的外观,感觉和目的。我正在寻找创建一个可以查找所有数字数据(非公式)并通过一个数字(或理想情况下随机数字)来查找所有数字数据的宏来更改该值,从而为我公司的顾问消毒它的宏。Excel VBA宏清理财务报告

到目前为止我发现的脚本是这样的。它可以清除所有数字数据,并保留文本和公式。有人可以帮我修改这个VBA代码,使其通过一个数字来代替所有的数值,而不是删除它吗?

For Each wks In Worksheets 
    'ignore errors in case there is only formulas 
    On Error Resume Next 
    wks.Cells.SpecialCells (xlCellTypeConstants, 1).ClearContents 
    wks.Cells.SpecialCells (xlCellTypeConstants, 4).ClearContents 
    wks.Cells.SpecialCells (xlCellTypeConstants, 16).ClearContents 

    On Error GoTo 0 
Next 
Set wks = Nothing 

回答

2

以下将乘以1.2和3之间的“不同”随机数乘以工作簿中的每个数字,但保留公式。对每个值使用不同的随机数将使得人们几乎不可能破解“幻数”。为了计算的更多的方式随机数看this link

Sub scrubNumbers() 
    Dim rRange As Range, rCell As Range 
    Dim wkw As Worksheet 
    Dim randomNum As Double 

    For Each wks In Worksheets 
     On Error Resume Next 
     Set rRange = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlNumbers) 

     For Each rCell In rRange 
      randomNum = Rnd * (3 - 1.2) + 1.2 
      rCell = rCell.Value * randomNum 
     Next rCell 
    Next 
    Set wks = Nothing 
End Sub 

前:

enter image description here

后:

enter image description here

+0

感谢您的帮助!似乎它不止一次地贯穿序列?我在我的床单上试过这个,数百万的价值最终会达到万亿以上。 – 2014-11-17 13:46:20

+0

如果它只被调用一次,它应该只运行一次单元格,但是如果您的方程式依赖于以前的多个值,则会看到这种通货膨胀。尝试将随机数的范围改为0.1至1.9,从而平均跨越1,并希望将结果带回现实。 – 2014-11-17 14:40:45

+0

完美!非常感谢! – 2014-11-17 15:19:15