6

Excel 2003のVBAコードで、単に使用するのではなく、セルに数式を書き込むRange.Formulaために使用する必要があるのはなぜでしょうか。どちらもフォーラムラになるセルに文字列を書き込み、数式は機能します(私がテストしたものから)。Range.Cell

ActiveCell.Value="=If(True,""yes"",""no"")"

ActiveCell.Formula="=If(True,""yes"",""no"")"

私のために同じことをします(セルを選択し、上記の各コードセグメントを別々のセルで別々に実行する場合)。どちらもセルに「yes」の値が表示され、クリックして各セルを表示すると数式が保存されます。

情報については、MicrosoftのDevCenterを調べました。

Range.Formula Excel 2013のRange.Formulaプロパティ(Excel 2003にはこのプロパティのページがありませんでした)

Range.Value Excel 2003のプロパティ(「Rangeオブジェクトに適用されるValueプロパティ」の見出しを展開します。

また、「Range.Value VBA Excelの代わりにRange.Formulaを使用する理由」をグーグルで検索しましたが、私の質問に関連するものは見つかりませんでした。

一部の人々は、使用すると言いRange.Valueました。

他の何人かはスタックオーバーフローでの使用を言いますRange.Formula(申し訳ありませんが、正確な質問への参照を失いました...)

4

2 に答える 2

3

データの価値に関して:

整数、特定の計算では2倍があり、.formulaを使用すると、失敗することを想像してみてください。.FORMULA常に文字列を返すためです。(.formula withoutに設定された値は、数式ではなく単純な値です)例外処理があり、コードに追加機能が用意されている場合を除きます。一方.VALUE、データのデータ型は期待どおりに返されます。

数式の取得に関して:値は、数式を設定するが取得しない場合の一方通行の道です。

したがって、これらのメソッドが理由で導入され、必要な適切なプロパティを操作するのに役立ちます。:-)

于 2012-12-03T17:49:19.907 に答える
0

これは、実際の数式をセルに書き込む場合にはあまり当てはまりませんが、複数のデータ型(特に米国以外の日付)を含むバリアント配列の値で範囲を埋める.Formula代わりに使用すると.Value、はるかに信頼性の高い結果が得られます。

何ヶ月も前だったので、これを回避策として発見した正確な問題を思い出せません。また、実際の違いを確認するためのテストも行っていません。メリットを見つけたら、単に切り替えて、それ以来このようにしています。

推測では、.Formulaプロパティを使用して書き込むと、Excelが、数値形式がまだ設定されていないターゲット範囲内のセル(および場合によっては数値形式が設定されているセル)の数値形式を自動的に変換しようとするのを防ぐことができます。

于 2015-03-04T11:36:22.387 に答える