[[20100729234729]] 『セルの値が消去されたら関数を書き込む』(stem) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの値が消去されたら関数を書き込む』(stem)
 こんばんは
 E4〜G17間に6種類の関数がとびとびに入力されています。
 基本的には関数を使用して、作業をするのですが、
 式をけして、手作業で数字を書き込む作業が頻繁に生じます。

 夢のような話かも知れませんが、関数を消してセルの値を定数にして
 作業を行った後、さらにこの定数を 消去したら、
 前に入力されていた関数が復活する(あるいは同じ関数が新たに入力される)
 というようなマクロは可能ですか?
 (イベントマクロというのでしょうか?)
 マクロはほんの少し齧ったことはあるけれど...というレベルですが
 もし可能でしたら、教えていただけないでしょうか?
 宜しくお願いします。

 Worksheet_Changeイベントプロシージャで
 TargetのFormulaが""なら数式を書き込む。

 という処理で可能になると思います。

 具体的なコードは具体的な条件(各セルに対しての数式)が無いので掲示できません。
 (momo)

 こんなのでどうでしょうか?
 CASEの個所に式を入れたいセルのアドレスと数式を追加してみてください。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WK_RANGE    As Range

    If Intersect(Target, Range("E4:G17")) Is Nothing Then Exit Sub

    Application.EnableEvents = False

    For Each WK_RANGE In Intersect(Target, Range("E4:G17"))
        With WK_RANGE
            If .Value = "" Then
                Select Case .Address
                    Case "$E$4": .FormulaLocal = "=SUM(A1:A4)"
                    Case "$E$5": .FormulaLocal = "=SUM(A1:A5)"
                    Case "$F$7": .FormulaLocal = "=SUM(B1:B7)"
                End Select
            End If
        End With
    Next
    Application.EnableEvents = True

 End Sub

 momoさんのご指摘を受けて追記。

 >.Value="" で判定してしまうと数式の結果で""にしてるときに上書きですので
 >(それでも結果は同じですが)
 >.Formula=""の方が良くないでしょうか?
 確かにそうですね。
 ご指摘ありがとうございます。

 stemさんへ
 >If .Value = "" Then
 の部分は
 >If .Formula = "" Then
 としてください。

 (独覚)

 独覚さんへ
 .Value="" で判定してしまうと数式の結果で""にしてるときに上書きですので
 (それでも結果は同じですが)
 .Formula=""の方が良くないでしょうか?

 あるいは.HasFormula=False and .value="" とか
 (momo)

momoさん
独覚さん

 テストファイルで確認させていただきましたら、確かに動きました。
 これから、実際のファイルで色々使わせていただきます。
 ここまでできるのなら、何でもありですね。わくわくします。
 有難うございました。
 (stem)


 おはよーございます。少し考えてみました。。
 セルの編集で、関数の上にさらに関数を入力すると、更新された関数しか復帰しません。
 それで良ければ、下記のコードでできると思います。
 作業用シートのシートモジュールに張り付けて。。
         ↓      
 Dim c As Range
 Dim myAdr As String

 Private Sub Worksheet_Change(ByVal Target As Range)

    For Each c In Selection
        If c.Value = "" Then
            myAdr = c.Address
            c.Formula = Sheets("Sheet2").Range(myAdr).Formula
        End If
    Next c
 End Sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    For Each c In Selection
        If Left(c.Formula, 1) = "=" Then
            myAdr = c.Address
            Sheets("Sheet2").Range(myAdr).Value = c.Formula
        End If
    Next c
 End Sub

 Sheet2に、作業用シートの変更前の関数を書き込んでおいて、そのセルが消去された時点でSheet2の関数を書き込みます。
 (kei)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.