将单元格的值replace为包含excel中总数的百分比

我有一个Excel表格,其中包含实体,它们的特征,特征值以及总数,如下所示:

Entity CHAR1 CHAR2 CHAR3 CHAR4 Total 1 10 20 5 5 40 2 5 100 30 25 160 3 25 25 10 20 80 

现在我想用每个行100%的百分比replace这些值。 这将在这个例子中导致:

 Entity CHAR1 CHAR2 CHAR3 CHAR4 1 25 50 12,5 12,5 2 3,125 62,5 18,75 15,625 3 31,25 31,25 12,5 25 

由于我的数据集相当大,我想知道是否有一个快速的解决scheme来做到这一点? 我被卡住了,因为在每个单元格中放置一个公式将需要使用单元格中的旧值来计算新值。 而使用新的工作表可能会给我一些性能问题。

提前致谢

运行这个子程序,都应该按照你的要求工作(注意,你需要定义TotalColumn列号(因为在这个例子中是不明显的)

 Sub MakePercent() Dim Cell As Range, CalcRange As Range, TotalColumn As Variant TotalColumn = 'Write the column number or letter here Set CalcRange = ActiveSheet.Range(ActiveSheet.Cells(2,2), ActiveSheet.Cells(ActiveSheet.UsedRange.Rows.Count,TotalColumn - 1)) For Each Cell In CalcRange Cell.Value = CDbl(Cell.Value) / CDbl(ActiveSheet.Cells(Cell.Row,totalColumn)) Next Cell End Sub 

从我自己小的更新:

RGA提供的macros运行良好,直到我扩展了一些额外的列我的数据。 然后它导致excel冻结,因此我去寻找一个新的解决scheme。

如果发现下面的stackoverflow问题 ,并将Application.ScreenUpdating = false添加到开始和Application.ScreenUpdating = true到macros的结尾解决了冻结问题。

这导致下面的代码:

 Sub MakePercent() Application.ScreenUpdating = False Dim Cell As Range, CalcRange As Range, TotalColumn As Variant TotalColumn = 'Write the column number or letter here Set CalcRange = ActiveSheet.Range(ActiveSheet.Cells(2,2), ActiveSheet.Cells(ActiveSheet.UsedRange.Rows.Count,TotalColumn - 1)) For Each Cell In CalcRange Cell.Value = CDbl(Cell.Value) / CDbl(ActiveSheet.Cells(Cell.Row,totalColumn)) Next Cell Application.ScreenUpdating = True End Sub