Excelテーブル(つまりListObject)の列に数式を手動で入力すると、オートコレクトはこの数式を列全体に適用します。
VBAを介してこの動作を制御する方法はありますか?つまり、この式を何らかの方法で変更/削除/追加できますか?
オブジェクトの数式を簡単に変更できることはわかっていListObject.ListColumns(1).DataBodyRange
ますが、これにより、以前に手動で入力した値が上書きされますが、UIで数式を変更すると、これは変更されません...
Excelテーブル(つまりListObject)の列に数式を手動で入力すると、オートコレクトはこの数式を列全体に適用します。
VBAを介してこの動作を制御する方法はありますか?つまり、この式を何らかの方法で変更/削除/追加できますか?
オブジェクトの数式を簡単に変更できることはわかっていListObject.ListColumns(1).DataBodyRange
ますが、これにより、以前に手動で入力した値が上書きされますが、UIで数式を変更すると、これは変更されません...
ダグとbonCodigosのコメント/回答のおかげで、私は簡単な答えを見つけました:
ListObject.ListColumns("Column name").DataBodyRange.FormulaR1C1 = "new formula"
これにより、手動値が上書きされます(オートコレクトの通常の動作と同じです)。
シートのスクリーンショットを見せていただければ最高です。それに基づいて、私たちは答えを明確にしたでしょう。
これが一般的な仮定です。一部のデータを列にダンプするリストオブジェクトが1つあり、その列の残りのセルは手動で操作されます。
最初に手動で次のことを試して、それがうまくいくかどうかを確認できます。それでも手動のものはコードレベルによって追い抜かれています、そしてあなたはコードレベルでこれをします。:)
ここでの主なアクションは、自動修正を停止することです
[移動]->[ツール]メニュー->[オートコレクトオプション]->[オートコレクト]タブ->
1-すべての自動修正を防ぐため
のチェックボックスをオフにしますReplace Text as you type
2-特定の修正を防ぐため
オプションの対応するチェックボックスをオフにします。後者、つまりリストオブジェクトを介してダンプする特定のデータ範囲にもっと興味があると思います。
これが、この機能をコードレベルで無効にするためのコードです。
Excelテーブル(ListObjects)を操作する場合、考慮すべき2つのオートコレクトオプションがあります。これら2つについて詳しく読むことができます。
* Apply new rows and columns in table
(VBA AutoCorrect.AutoExpandListRange Property)
* Fill formulas in tables to create calculated columns
(VBA AutoCorrect.AutoFillFormulasInLists Property)
リストオブジェクトの上部で使用する可能性のあるコードは、
Application.AutoCorrect.AutoFillFormulasInLists = False
Application.AutoCorrect. AutoFillFormulasInLists
そして、ListObjectレベルでテーブルごとに制御すると、はるかに便利になることに完全に同意します。したがって、ここに回避策があります。
したがって、1つの方法は、毎回テーブルデータをクリアすることです。また、データをクリアするときは、TABLETOFORGETフォーラムとフォーマットを確認できます。したがって、テーブルの内容を削除する前に、データ本体の範囲の内容をクリアします。
Sub forgetMe()
With Sheet1.ListObjects("myTable")
If Not .DataBodyRange Is Nothing Then
.DataBodyRange.ClearContents
.DataBodyRange.Delete
End If
End With
End Sub
データを入力するときは、自動入力をオフにして開始します。