[[20161201194405]] 『規定数到達時のメッセージとクリア』(tari) ページの最後に飛ぶ

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

 

『規定数到達時のメッセージとクリア』(tari)

IFSUM関数によりSheet1のA行に入力された数値が
Sheet2のA1に記録されています。そのSheet2のA1の値が
規定数毎(例えば10000毎)にメッセージが表示されて
その数値がクリアされ、0になるようにするにはどうすればいいのでしょうか?関数及びマクロ、どちらでもいいのでどなたか宜しくお願い致します。

< 使用 Excel:Excel2002、使用 OS:WindowsXP >


 ちょっと真意を測りかねます。

 Sheet1のA列に入力するのは毎回「1」なんですか?

 多分そうじゃないと思うのですが、そうすると10000に近くなると
 (スゴロクみたいに)行き過ぎる数値が入るのが常態ですよね?

 その時どういう展開になるんですか?

 極端な話、初っ端に「20000」と入れたらどう言うことになればいいのか、
 それを説明いただくと少しは解るかも知れません。

(半平太) 2016/12/02(金) 00:05


規定数と言っているのがどういう事なのか判りませんが、合計値の下4桁を表示したいのならば、1万で割った余りを表示するとか?
 =MOD(現在のSUM計算式,10000)
(???) 2016/12/02(金) 09:23

(半平太)様
Sheet1のAに入る数値は1とは限りません。
よって入力したときに10000を超えたらメッセージが表示されればいいです。(行き過ぎてもOKです。)
最初から10000を超えた場合も同様のメッセージが表示されればいいです。

例:Sheet1 A行        Sheet2 A1

          5000                   10200 (この数値はA行の合計です。)
     3000                      ↑
     1000                      |
     1200                      |
             この数値が10000を超えたらメッセージが表示されるようにしたい。  

わかりにくくてすみません。宜しくお願いします。
(tari) 2016/12/02(金) 16:22


メッセージ表示はマクロでも使わないとできませんが、条件付き書式で、値を超えたらセルを赤く塗る、とかで良いのでは?
そして、クリアする、という意味が判りません。そこは合計計算する数式が入っているのですよね? 元データを変えないと、合計も変わらないですよ。
(???) 2016/12/02(金) 16:50

 1.標準モジュールを挿入して、下記コードをコピペする。

 2.Sheet2のA1セルに =Zclear(Sheet1!A:A,10000) と入力したら、
   Sheet1への数値入力を開始する。

 ’「標準モジュール」に貼り付けるコード

 Function Zclear(rng As Range, Limit As Double)
     Zclear = Application.Sum(rng)

     If Zclear > Limit Then
         Zclear = 0
         MsgBox "Limit(" & Limit & ")オーバー"
     End If
 End Function

 '多分、実用にならない案でしょうね・・・

(半平太) 2016/12/02(金) 16:51


(???)様
クリアする意味は10000を超えたらやる作業がある為、一旦0にしたいのです。
10000以上になったらセルを赤く塗る、でもいいのですがメッセージが表示されると
忘れにくいかな?と思ったまでです。

(半平太)様
ありがとうございます。
このマクロは最初の10000を超えた時点で"オーバー"のメッセージが表示され、0になりましたが、
次の10000到達時にもメッセージが出るようにできませんか。
Sheet2のA1が10000を超えるたびにメッセージが欲しいです。

申し訳ございませんが宜しくお願い致します。
(tari) 2016/12/02(金) 17:20


  ’全面差し替え用のコード↓

 Function Zclear(rng As Range, Limit As Double)
    Dim celVals, LastRow As Long, NN As Long, TgtWsh As Worksheet

    Set TgtWsh = rng.Worksheet

    LastRow = TgtWsh.Cells(TgtWsh.Rows.Count, 1).End(xlUp).Row
    celVals = TgtWsh.Range("A1:A" & LastRow).Value

    If LastRow = 1 Then
        ReDim celVals(1 To 1, 1 To 1)
        celVals(1, 1) = rng.Range("A1")
    End If

    For NN = 1 To LastRow
         If IsNumeric(celVals(NN, 1)) Then
             Zclear = Zclear + celVals(NN, 1)
         End If

         If Zclear >= Limit Then
            Zclear = 0
            If NN = LastRow Then
                MsgBox "Limit(" & Limit & ")に到達"
            End If
         End If
    Next
 End Function

  ’※ Sheet2のA1セルに入れる数式は同じです。→ =Zclear(Sheet1!A:A,10000)

  '多分、実用にはならないでしょうけども・・

(半平太) 2016/12/02(金) 20:55


 横から失礼します。

 どうも理解力がプアで操作の流れがピンときません。

 A行 という表現はエクセルの世界では使いませんね。A列ですね。
 まぁ、そんなことは横において。

 Sheet2 の A1 の値って、どのように入るのですかね?
 数式で、Sheet1 の A列の値を 合計 ?
 まぁ、そうだとします。

 ということは、いつ、このSheet2 の A1 の値が変化するか?
 Sheet1 の A列に数字を入れたときですよね。
 つまり、その時見えているのは Sheet1。

 で、その結果、1200 を入れたときに、合計が 10000 を超えるわけですけど
 あくまで見えているのは Sheet1 ですよね。
 でも、その瞬間に何かする? 見えていないSheet2 の A1 の合計が 10000 超えたよというメッセージを
 Sheet1 が見えている状態で表示しても、操作者はピントこないのでは?
 かつ、その時に Sheet2 の A1 を 0 にしても 操作者の目には見えない裏側の処理なので、なんか、ピンときません。

 まぁ、裏側の Sheet2 のことは操作者が気にしないようにして、あくまで Sheet1 への入力というように
 とらえれば、それはそれでいいかもしれませんが。
 (そうすればそうしたで、じゃぁ、SHeet2 の A1 って 何のためにあって、だれが見るのかな?)

 それと、10000 を超えたので 0 にする。でも、Sheet1 に記載済みの 5000 3000 1000 1200 は消さないのですよね。
 で、その次に SHeet1の1200の次に4000 と入れた。
 この時、SHeet2 の A1 はいくつになりますか?

 4000 ですか?

 SHeet1 に 1200 と入れたときに Sheet2 の A1 が 0 ではなく、200 になる、
 続けて、4000 をいれたら 4200 になるというのなら
 なんとなく、その数字の持つ意味は、わかるんですが。

(β) 2016/12/02(金) 21:47


(半平太)様
(β)様
いろいろとありがとうございます。
他の方法がないか考えてみます。そのときはまたお世話になると思いますが、
宜しくお願い致します。
(tari) 2016/12/03(土) 07:08

コメント返信:

[ 一覧(最新更新順) ]


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