0

ワークシートで、R4セルの数式が=B1+B2で、その現在の値が であるとし10ます。

VBA コマンドは、式の両方Range("R4").Value = 5を に変更します。5

R4の値を に変更する VBA コマンドが存在するかどうかを知っている人5はい=B1+B2ますか?

PS: 別の方法で同じ状態を実現することもできます: 1) Range("R4").Value = 52) の式を変更しますR4=B1+B2、評価は行いません。この場合、評価せずにセルの数式を変更する VBA コマンドはありますか?

編集:やりたいことは...

一部のセルが古くなっている可能性がある (数式がその値と一致しない) ワークシートを取得し、VBA Sub を自動的に生成する関数を作成したいと思います。この VBA Sub はこのワークシートを再現できます。VBA Sub は次のようになります。

Sub Initiate()
    Cells(2,3).Value = 5
    Cells(4,5).Value = 10
    ...
    Cells(2,3).Formula = "=2+3"
    Cells(4,5).Formula = "=C2+C2"
    ...
End Sub

実行Initiate()すると、同じ値と数式で 1 ​​つのワークシートが作成されます。

私が求めている VBA コマンドがなければ、これInitiate()を生成するのは困難です。

4

3 に答える 3

0

これは、アクティブなシート上のすべての数式のすべての値をシートのカスタム プロパティとして保存する非常に汚いコードと、すべての数式を保持しながら、値が元の値から変更されたすべてのセルを赤くマークする 2 番目のサブです。いくつかのエラー チェック ルーチン (プロパティが既に存在する、プロパティが存在しない、など) が必要になりますが、何かを操作する必要があります。私はあなたの問題を本当に理解していないので、言うのは少し難しいです;)

Sub AddCustomProperty()
Dim mysheet As Worksheet
Dim mycell2 As Range
Dim myProperty As CustomProperty
Set mysheet = ActiveWorkbook.ActiveSheet

For Each objcell In mysheet.UsedRange.Cells
    Debug.Print objcell.Address
    If objcell.HasFormula Then Set myProperty = mysheet.CustomProperties.Add(objcell.Address, objcell.Value)
Next objcell
End Sub
Sub CompareTags()
Dim mysheet As Worksheet
Dim mycell2 As Range
Dim myProperty As CustomProperty
Set mysheet = ActiveWorkbook.ActiveSheet

For Each objcell In mysheet.UsedRange.Cells

Debug.Print objcell.Address
    If objcell.HasFormula Then
        On Error Resume Next
        If mysheet.CustomProperties(objcell.Address).Value <> objcell.Value Then
        objcell.Font.ColorIndex = 3
        On Error GoTo 0
        End If
    End If
Next objcell
End Sub
于 2013-07-14T08:21:54.633 に答える
0

式自体を変更せずに、式の結果を変更するのは非常に簡単です。

その引数の値を変更します。これは Solver タイプのアプローチです。

Sub ForceDesiredResult()
    Dim r As Range
    Set r = Range("B2")
    With r
        If r.HasFormula Then
            .Formula = .Formula & "-5"
        Else
            .Value = .Value - 5
        End If
    End With
End Sub
于 2013-07-13T17:04:43.800 に答える