dポイントプレゼントキャンペーン実施中!

Exccelですが、セルのデータを更新しますが、その直前(1世代前)の数値データを記憶・取り出す方法がありますか、あればご教示ください。

具体的には、MAX関数で最大値を表示させていますが、データを更新しますと、当然に、MAX関数は、新しい最大値を表示します。
この時に、MAX関数以外のどこかのセルに、データ更新の直前(1世代前)の数値を格納して、表示させたいのですが、その方法がありますか?
よろしくお願いします。

質問者からの補足コメント

  • たびたびありがとうございます。
    ご指示通りにやったつもりですが、下記画像のようになり、ご回答のような結果になりませんでした。
    「ひとつ前」B3は、B2、B4にリンクさせても、上記のようになりません。
    どこが間違っているのでしょうか?すみませんが、再度お願いします。

    「Exccelで、データを更新直前(1世代」の補足画像1
    No.8の回答に寄せられた補足コメントです。 補足日時:2017/03/20 12:24
  • yokoyama様

    丁寧なご回答に恐縮に存じます。何がしたいか、Excelに書いてみました。
    この画像をご覧いただければ、何をしようとしているか、ご理解いただけると思いますが、A列に、毎月処理する連続番号を入れますが、新しい月の開始番号は、最終番号に1を加えて、A1から上書きして、その後必要な行数だけ番号付与するものです。

    画像の例では、前月の最終番号(最大値)が14で、次月の開始番号は、15となります。この月の必要な数は10となっています。

    もちろん、前月の最終数字14を覚えておいて、15と手入力すれば問題ないのですが、記憶でなく、本例では、B1に表示できないか、と考えた次第です。

    A列に、その月の必要番号数を入れたなら、その後は、Vlookupなどを使って、他のデータを使って、自動処理となっています。

    なお、最初の行は、「制御領域」(印刷しない)で、見出しなどは2行目です。

    「Exccelで、データを更新直前(1世代」の補足画像2
    No.11の回答に寄せられた補足コメントです。 補足日時:2017/03/20 18:41

A 回答 (16件中11~16件)

やっぱ、不親切だな。



これをしたいシートに....①
問題のMAXが書かれたセルが....②ありますね。
そして1世代前の数値を入れたいセル....③があると。

で①のシート名が書かれたタグが
EXCELの下方にありますよね。
そこ右クリックです。
するとコードの表示があるので
選ぶと白いなんでも書けそうな窓が出るので
No3の
Private Sub Worksheet_Change(ByVal Target As Range)
以降を、そこに貼ってください。

で、必要なアドレスが判らなかったので
"SUMの中のアドレス"
ってとこは
=MAX(N5:N10)
ってなってるなら
”N5:N10”
という風に数式の中身をそのままに
書き換えてくださいの意です。

"SUM式のセル" は同じ感じで②のアドレス
"1世代前のセル" は③のアドレスにそれぞれ書き換えれば
作業完了。
MAXを変化させて試してみてください。
    • good
    • 0
この回答へのお礼

何度も、ご丁寧にありがとうございます。
No3を、「コードの表示」にコピーし、Max関数を入れて、早速試してみましたところ、下記の行でエラーになりました。
エラー表示は、「実行時エラー1004  Rangeメソッドは失敗しました」となっています。

If Not Intersect(Target, Range(Max(a1, a100))) Is Nothing Then

また、以下の2つを試しましたが、やはりエラーです。
If Not Intersect(Target, Range("Max(a1, a100)")) Is Nothing Then

If Not Intersect(Target, Range(a1, a100)) Is Nothing Then


ここでは、Range() の()内の記述に問題があるようですが、正しい記述をご教授お願いできますでしょうか。
なお、B2=max(A:A) 、1世代前の数値は、B1に格納したと思います。
(A:Aの列の最大値を、B2に格納し、1世代前の数値は、B1に格納したと思います)

お手数をおかけしますが、よろしくお願いいたします。

お礼日時:2017/03/20 11:31

>式は、マクロと思いますが、マクロの知識がないのですが、この式をどのようにExcelに組み込めばよいでしょうか。



No3にそれを書いたつもりです。
よく読んでください。
    • good
    • 0

SUMじゃなかった、MAXだ、


でも変わらないので読み替えてください。
    • good
    • 0
この回答へのお礼

早速ご回答いただき、感謝申し上げます。
式は、マクロと思いますが、マクロの知識がないのですが、この式をどのようにExcelに組み込めばよいでしょうか。

初歩的な質問で恐縮ですが、重ねてよろしくお願いします。

お礼日時:2017/03/19 21:05

失礼しました。


以下をシート名右クリックのコードの表示
で表示されるところに貼り付け
Range()の中を実態に変えてください。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim befor
If Not Intersect(Target, Range("SUMの中のアドレス")) Is Nothing Then
Application.EnableEvents = False
Application.Undo
befor = Range("SUM式のセル").Value
Application.Undo
Range("1世代前のセル") = befor
Application.EnableEvents = True
End If
End Sub
    • good
    • 0

間違いでした。


これは、直接入力ならこうなんですけど
SUMですね。でしたらSUMするセル領域が
必要です。
    • good
    • 0

以下はQ列に変更があったとき


2列右に前のデータが入ります。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim befor
If Target.Column = Columns("Q").Column Then
Application.EnableEvents = False
Application.Undo
befor = Target.Value
Application.Undo
Target.Offset(0, 2) = befor
Application.EnableEvents = True
End If
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!