2016-07-07 4 views
0

で全体に占める割合を含むようにセルの値を置き換えます。次のように私はエクセルエンティティを含むシート、それらの特性、特性の値との合計を持っているエクセル

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%と別々に見られるパーセンテージ。私のデータセットは、これを行うための高速なソリューションがある場合、私は思ったんだけど、かなり大きいよう

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 

: これは、この例での結果でしょうか?各セルに数式を配置するには、セル自体の古い値を使用して新しい値を計算する必要があるため、私は立ち往生します。新しいワークシートを使用すると、パフォーマンスの問題が発生する可能性があります。事前に

おかげ

+0

そこで列の値の合計が「100%」として使用され、各値は、その合計値のパーセンテージとして計算されなければなりませんか? – RGA

+0

はい、パーセンテージは1行単位です。したがって、新しいテーブルの各行の合計は100%になります – OutOfTheBox

+0

*「新しいワークシートを使用すると、パフォーマンス上の問題が発生する可能性があります」*:なぜこれを考えるのですか?あなたはそれを試しましたか? – trincot

答えて

1

を実行し、このサブ、あなたが尋ねたように、すべてはあなたが、それは一例では明らかではないので、

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 
+1

ちょうど楽しい事実。 'TotalColumn'をバリアントに変更すると、セル列パラメータに数値や文字を渡すことができます。 –

+0

@ThomasInzina素敵なトリック!それに応じてコードを調整しました。 – RGA

+0

これを少し編集して、感謝しました! 編集: - セル値計算で* 100を逃しています - そして、あなたはCalcRangeラインの中の閉じ括弧を見逃しています。 – OutOfTheBox

0

)(TotalColumnの列番号を定義する必要があることに注意してください(動作するはずです自分自身からのマイナーアップデート:私はいくつかの余分な列を持つ私のデータを拡大するまで

マクロRGAによって提供されるが、うまく働いたことは、その後、凍結するために、Excel引き起こし、したがって、私は、新しいソリューションを探して行ってきました

stackoverflow questionが見つかり、最初にApplication.ScreenUpdating = falseを追加し、凍結問題を解決したマクロの最後にを追加しました。

これは、次のコードにつながる:

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 
関連する問題