Range("B:B").Value = Evaluate(Range("B:B").Address & "*10")
これは神メソッドですね。気を付けなければならないのは、空欄が0に評価されてしまう、数字以外の文字列がエラーになる。
メソッド化にすると
Sub updateRangeValues(ByRef rg As Range, strFormula As String, Optional strFormat As String = "")
rg.Worksheet.Activate '←ここが重要!!、なぜかこうしないと全部0と評価してしまう
If strFormat <> "" Then
rg.NumberFormatLocal = strFormat
End If
rg.Value = Application.Evaluate(rg.Address & strFormula)
Application.Calculate
Do While Application.CalculationState <> xlDone '←念のため、計算が終わまでDoEvents
DoEvents
Loop
End Sub
使い方:
Call updateRangeValues(Range("A1:A1000"),"*10.1","#.00")
LOOP、Query、補助列を使わずに、"A1:A1000"列の数値を全部*10.1,書式を小数点二桁にする
もう少し複雑な数式でもいけるらしい
Sub nn()
Dim rg As Range
Set rg = ThisWorkbook.Worksheets(1).Range("C1:C36")
strFormula = "=IF(" & rg.Address & "= """",""IS EMPTY""," & rg.Address & "*10)"
rg.Value = Application.Evaluate(strFormula)
End Sub
0 件のコメント:
コメントを投稿