• 締切済み

「Excelのセルへの入力内容の転記と元の内容への復帰」

「Excelのセルへの入力内容の転記と元の内容への復帰」 何故それが必要かは別にして、次のようなことがしたい。 ・あるセル(例えばA1)にはある関数(式)が設定されている。 ・いま、セルA1にある値が入力されたとき、 ・その値を別のセル(例えばB1)へ転記(保存)し、 ・セルA1には元の関数に戻す。 これを、VBAで実現するにはどうすれば良いのでしょうか?。お教えください。 changeやselectionchangeイベントなどを使用すると出来そうですが、単純なコーディングではchangeの無限ネスト(無限再帰)となってしまいます。 例えば、次のようなコーディング:セルC1をA1セル選択時の関数保存場所として補助的に使用している。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "A1" Then Range("B1") = Range("A1") Range("A1").Formula = Range("C1").Formula End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A1" Then Range("C1").Formula = Range("A1").Formula End If End Sub これでは何か発想の転換が必要に思えます。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>何故それが必要かは別にして、次のようなことがしたい 回答者に教えてもらうのだから、それぐらい説明して聞くもんだ。 回答者は質問者の小間使いではない。 考えるのが馬鹿らしいと思うことは答えたくないでしょう。 ほかに、この質問の路線以外で、目的が達成できる方式がある場合も無いとは言えない。 本件は考え方に無理がある。 Changeイベントの前段階のBeforeXXの代わりとしてSelection_Changeは使えないと思う。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Target.Address で得られるアドレスは、絶対アドレスになるので提示されたコードでは動作しません。 マクロによるイベントの重複発生もコードで停止させる事が出来ます。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address = "$A$1" Then Range("B1") = Range("A1") Range("A1").Formula = Range("C1").Formula End If Application.EnableEvents = True End Sub

関連するQ&A