アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。よろしくお願いします。
エクセルで出荷入力画面シートに数字を入力。もし、発注しなくてはならない
在庫数設定より(在庫限界入力シート)、その商品の総合計(在庫残高シート)が
少なくなったら、メッセージボックスに警告を表示したいのです。
先日、親切な方々のアドバイスで、以下のように組んで見ましたが、
入力シートにはたくさんの商品があり、どのセルに入れても全部同じメッセージ
ボックスがでてしまいます。これができないと、お茶組のままです。
がんばって作ってきたエクセルが、期限に間に合いません。助けてください。
Private Sub Worksheet_Calculate()
dim counter as integer
If Worksheets("在庫残高").Range("C6") < Worksheets("在庫限界入
力").Range("C6") Then
counter=Worksheets("在庫限界入力").Range("C6")-Worksheets("在庫
残高").Range("C6")
MsgBox counter& "本在庫不足", vbOKOnly, "警告"
End If
End Sub

一行目のworksheetをobjectにしてもだめでした。また()のなかに入力する
全てのセルの範囲を指定してもだめでした。
どうすればいいのでしょう。

A 回答 (2件)

>どのセルに入れても全部同じメッセージボックスがでてしまいます。


#241482については、単一の『C6』の変更時の判定の仕方を書いています。
どのようにして『Worksheets("在庫残高").Range("C6")』が更新されるか分からなかったからです。

この例を沢山の商品の在庫残高についても同様に使われているようですが、複数にするには変更が必要でしょう。
出荷入力画面シートの入力がどのように在庫残高シートに反映するかがはっきりしないと解決にはならないかもしれません。


出荷入力画面シートに入力すると在庫残高シートの『同じ列が更新』されるとすると、以下の訂正くらいで対応できるかもしれません。

出荷入力画面シートのコードウインドウに貼り付け、#241482と同じように、在庫残高シートで変動する数値を、出荷入力画面シートで分かるようにしておく必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim clm As Integer '入力したセルの列
  Dim counter As Long '不足数

  clm = Target.Column
  If Worksheets("在庫残高").Cells(6, clm) < Worksheets("在庫限界入力").Cells(6, clm) Then
    counter = Worksheets("在庫限界入力").Cells(6, clm) - Worksheets("在庫残高").Cells(6, clm)
    MsgBox counter & "本在庫不足", vbOKOnly, "警告"
  End If
End Sub
    • good
    • 0
この回答へのお礼

本当にありがとうございます。質問するたびに本と照らし合わせて
勉強しています。
おかげさまで、質問の答えがわかり、ちゃんと思い通りになりました。
でも・・・おっちょこちょいな私なので、また新たな問題が発生しました。
それは、新しい質問をしますので、もしよかったら
もう一度御教授ください。
よろしくおねがいします。

お礼日時:2002/03/28 15:06

正直VBAは詳しくはないです。

おかしな部分もあるかと思います。
・飛び飛びのセルを参照できる。
・出荷入力時で在庫がマイナスになるなら在庫数は0で不足分を返す。
・出荷入力時で在庫がまだあるなら差し引き分を在庫数とし、不足分を返す。
・限界に満たないなら差し引き分を在庫とする。
Private Sub Worksheet_Change(ByVal target As Range)
'出荷入力セルのアドレス取得
Dim taddr As String: taddr = target.Address
'出荷入力したアドレスがA1?
If taddr = "$A$1" Then
'chgZaiko(入力アドレス,在庫アドレス,限界アドレス)
Call chgZaiko(taddr, "C6", "C6")
ElseIf taddr = "$A$2" Then
Call chgZaiko(taddr, "C7", "C7")
End If
End Sub

Private Sub chgZaiko(ByVal addr1 As String, ByVal addr2 As String, ByVal addr3 As String)

Dim count As Integer: count = 0
Dim inpt As Integer: inpt = Worksheets("出荷入力").Range(addr1)
Dim zaiko As Integer: zaiko = Worksheets("在庫残高").Range(addr2)
Dim genkai As Integer: genkai = Worksheets("在庫限界入力").Range(addr3)
'在庫数-出荷数 < 限界数
If zaiko - inpt < genkai Then
If zaiko - inpt < 0 Then
'在庫数-出荷数<0なら在庫数は0
Worksheets("在庫残高").Range(addr2) = count
MsgBox inpt - zaiko & "在庫不足", vbOKOnly, "警告"
Else
'在庫数-出荷数>0なら在庫数は在庫数-出荷数
count = genkai - (zaiko - inpt)
Worksheets("在庫残高").Range(addr2) = zaiko - inpt
MsgBox count & "在庫不足", vbOKOnly, "警告"
End If
Else
'在庫数-出荷数 > 限界数
count = zaiko - inpt
Worksheets("在庫残高").Range(addr2) = count
MsgBox "現在の在庫数" & count
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。問題は前の人のを参考にしたら
できました。
またよろしくお願いします。

お礼日時:2002/03/28 15:07

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