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