Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("bw1:bw1000")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
Range(Target.Address).Copy
Range(Target.Address).PasteSpecial xlPasteValues
End If
End Sub
答えて
にはThisWorkbookモジュールにこのコードを入れて(しないシートモジュール)同じセルに値として貼り付け:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim KeyCells As Range
Dim ChangedCell As Range
Dim OldVal As Variant
Dim NewVal As Variant
'Adjust the name of the worksheet to be the name of the actual sheet containing the formulas in column BW
Set KeyCells = Me.Sheets("Sheet1").Range("BW1:BW1000")
If Sh.Name = KeyCells.Parent.Name Then
For Each ChangedCell In KeyCells.Cells
If ChangedCell.HasFormula Then
Application.EnableEvents = False
NewVal = ChangedCell.Value
Application.Undo
OldVal = ChangedCell.Value
Application.Undo
If NewVal <> OldVal Then ChangedCell.Value = NewVal
Application.EnableEvents = True
End If
Next ChangedCell
End If
End Sub
EDIT:からコメント当たり
OP: "ファイル内のすべての変更に対してマクロが実行されていますが、シート上のH57の値を変更すると、変更が発生するように制限できますか?"これを行うにはThisWorkbookモジュールから上記のコードを削除し、「モック」シートモジュールに以下のコードを入れて
:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim ChangedCell As Range
Dim OldVal As Variant
Dim NewVal As Variant
If Target.Address = "$H$57" Then
Set KeyCells = ThisWorkbook.Sheets("Main.Data").Range("BW1:BW1000")
For Each ChangedCell In KeyCells.Cells
If ChangedCell.HasFormula Then
Application.EnableEvents = False
NewVal = ChangedCell.Value
Application.Undo
OldVal = ChangedCell.Value
Application.Undo
If NewVal <> OldVal Then ChangedCell.Value = NewVal
Application.EnableEvents = True
End If
Next ChangedCell
End If
End Sub
変更されたセルにはまだ式があります。変更された値を値として貼り付けて、式をPasteSpecial xlPasteValuesのように削除します。 –
@AJ_FELIX私はそれをテストして、数式を削除してその値のみを持つことを確認できます。結果が異なる場合は、キーセルの割り当てでシート名とセル範囲が正しいことを確認してください。 – tigeravatar
@AJ_FELIXコードがThisWorkbookコードモジュールにあることも確認してください。 – tigeravatar
- 1. 次のセルが一致する場合にセルの値をコピー
- 2. VBA:セルの値aがセルbの値と一致する場合、セルCをセルDにコピーします。
- 3. セルを変更した場合の自動日付
- 4. Openpyxlでセルの値を変更し、その行をコピーする
- 5. ユーザーがセルの内容を変更した場合、セルの色を変更します。
- 6. VBAに値がある場合はセルをコピーする
- 7. ReactJS:変数が値を変更した場合のリロードコンポーネント
- 8. セルの値の変更に基づいて行をコピー
- 9. セルの変更時にテーブル間の値をコピー
- 10. 別のセルの値が変更された場合、セルに関数を挿入する
- 11. 戻り値が空白の場合は、別のセルが空白の場合は別のセルの値を返し、3番目のセルの値を返す場合
- 12. 前のセルと等しくない場合のセルの色の変更
- 13. オリジナルファイルが変更された場合はCMakeコピー
- 14. Excel 2010で15文字のセルの色を変更したい場合
- 15. 値が変更された場合にmysql dbを更新し、別の値を変更してください
- 16. 要素の2つの値がセルをマージした場合、XSLT?
- 17. A1セルの値がA2セルの値と等しい場合はExcel M3セル
- 18. 条件に合った場合にのみ範囲内のセル値を変更する(Googleシートアプリケーションスクリプト)
- 19. オプションから選択した場合のオプション値の変更
- 20. CheckboxColumnの色を変更した場合、変更します。
- 21. Googleスプレッドシートスクリプト、セルの値を別の変数セルにコピー
- 22. 変更入力値から検査した場合の要素
- 23. テーブルを変更するセルの色メッセージが新規の場合
- 24. セルの範囲にセルの値をコピー
- 25. mysql:行をコピーして1つの値が1つの値の違いでない場合に変更する
- 26. Excelがセルに一致する値を格納している場合に隣接セルをコピーする
- 27. 値が日付の場合、隣接するセルのセル値をクリアします
- 28. cell.Value = "Yes"の場合、MS-Excelの特定のセルをコピーする
- 29. セルが条件を満たす場合にシートAの行の一部のみをコピーし、別のシートにコピー
- 30. セルの値をクリップボードにコピー
あなたの質問は何ですか? > [なぜ誰かが私を助けることができるのですか?]実際の質問ではありませんか?](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-実際の質問) –
あなたの質問/問題は何ですか –
これは無限にprocするので、この問題はおそらく凍結します。コピー/貼り付けをしてからイベントを再度有効にする前にイベントを無効にする必要があります – tigeravatar