次のスニペットを検討してください。同じ数式を 2 つのセルに書き込みA1
、A2
Sub Main()
With Range("A1")
.Formula = "=1+1"
End With
With Range("A2")
.Formula = "=1+1"
.Value = .Value
End With
End Sub
2番目のwith
ブロックは.Value = .Value
式を計算/実行するため、式は式バーから消えます。補助的な参照として、数式バーから数式を非表示にするを参照してください。
次に、別の with ブロックを追加します
With Range("A3")
.Formula = "=1+1"
End With
Range("A4") = Evaluate(Range("A3").Formula)
数式をセルに追加すると、A3
その新しいセルの数式がEvaluated()
別のセルになりA4
ます。示されているように結果
上記のようなものはそれを示して.Value = .Value
おりEvaluate()
、同じことをしていると思います。
ただし、以下のコードは、前述の 2 つのアプローチを使用して、閉じたワークブックから値を引き出します。book9.xlsm
この例ではhello
、セル A1 に入力するワークブックを作成しました。の値を取得するものですbook9.xlsm
。A1
コードを検討する
Sub PullValue()
With Range("A1")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
End With
With Range("A2")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
.Value = .Value
End With
Range("A3").Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
Range("A4") = Evaluate(Range("A3").Formula)
End Sub
最初のwith
ブロックは、 からセルのA1
値に数式を入れbook9.xlsm
ます。実行されるため、プルされた値は ですhello
が、数式バーには実際の値が表示さ.Formula
れますC:\...
。
2 番目のwith
ブロックは、.Value = .Value
上で示したように を使用して数式を評価し、数式を結果に置き換えることで非表示にします。
with
Range("A3") は最初のブロックと同じです。
そして今(A4
)最初の例(この質問の最初のスニペット)と同じ原則に従ってEvaluate()
式を作成していますが、今回は機能しません。
アクティブ化されたすべてのセルの値とそれぞれの数式バーを確認してください
.Value = .Value
したがって、 が に等しいとは言えませんEvaluate()
。
Evalutate()のコメントは、数式で使用できると述べています。しかし、私が示した例では、それは機能しません。
Evaluate()
式は制限されたパラメータとして使用されていますか? Evaluate は非常に強力だといつも思っていましたが、.Value = .Value
実際にはさらに強力であることがわかりました。それらは非常に似ていますが、どういうわけか異なります(ただし、この例で選択した式が制限または制限されている可能性があるため、私のせいである可能性があると考えています)。私は、それらが同時に似ていると同時に異なっている理由を示したと思います. それはまだ 50%/50% のようなもので、それらが同じかどうか正確にはわかりません。誰かがここに何が欠けているかを説明できれば素晴らしいでしょう。