エクセルの質問です。現在の在庫数を確認する方法です。単純化してA1に初期在庫数を入力し、入出荷がある度にB1に入荷数もしくはC1に出荷数を入力すると、A1に新在庫数が表示され、これを繰り返し継続的に確認する方法はどうすればいいでしょうか?

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/10/21 09:38:38
  • 終了:2010/10/24 20:33:53

ベストアンサー

id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982010/10/21 11:02:15

ポイント30pt
Private Sub Worksheet_Change(ByVal Target As Range)

If Target = Range("B1") Then
    Range("A1") = Range("A1") + Range("B1")
End If

If Target = Range("C1") Then
    Range("A1") = Range("A1") - Range("C1")
End If


End Sub

そのシートのとこに コードを貼り付けます。

やり方は たとえば 「Sheet1」のタブを 右クリックして コードの表示とします。

(Excel2000で確認。バージョンによっては やり方が違います)

そこに 上記のコードを 貼り付ければいいです。

B1に入れた値を A1に加算。

C1に入れた値を A1に減算するようにしてあります。

エラーチェックはしていませんので 文字とか 数値じゃないものを 入れると プログラムが ストップしてしまいます。

数値だけ入れてれば 問題ないです。

その他の回答(3件)

id:hathi No.1

hathi回答回数204ベストアンサー獲得回数462010/10/21 10:01:55

ポイント20pt

そうしたことをEXCELのシート上だけで実現することは、おそらく無理です。

実現するには、入庫B列 出庫C列に入れて、A1の元の在庫数から計算された結果をA1ではないセルに表示させる式をいれておく必要があります。

  Excelのシートは、「各セルに表示する内容を関係式で定義する」ことはできますが、データを自動的に入れ替えるようなことはできません。

 

そうしたことを実現するには、マクロを組む必要があります。

  マクロ(プログラム、VBA)の動作で、入庫、出庫の数から計算した在庫数を目的のセルに表示させるのです。

マクロを全く使用しない場合には、小遣い帳のようなイメージで、EXCELシートに、入庫B列、出庫C列、在庫D列の各列を作って、

 在庫列のD3セルに =IF(D2+B3+C3>0,D2+B3-C3,"") のような式を入れて、D3セルを、D4から下の方にオートフィルするのが良いと思います。

 しかし、これでは、A1にいつも在庫数を表示するというようなことにはなりません。

 

マクロを使いたい場合は、そうしたことの質問を再度するのが良いと思います。

  こうやりたいという内容を詳しく示さないと、マクロの例も示しにくいです。

id:potato48

データを自動的に入れ替えることはできないとのことですね。マクロを使って例えば初期在庫100、入荷数30、二回目は出荷数40三回目は出荷数20の場合では、どうなるのでしょうか。

2010/10/21 10:42:04
id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982010/10/21 11:02:15ここでベストアンサー

ポイント30pt
Private Sub Worksheet_Change(ByVal Target As Range)

If Target = Range("B1") Then
    Range("A1") = Range("A1") + Range("B1")
End If

If Target = Range("C1") Then
    Range("A1") = Range("A1") - Range("C1")
End If


End Sub

そのシートのとこに コードを貼り付けます。

やり方は たとえば 「Sheet1」のタブを 右クリックして コードの表示とします。

(Excel2000で確認。バージョンによっては やり方が違います)

そこに 上記のコードを 貼り付ければいいです。

B1に入れた値を A1に加算。

C1に入れた値を A1に減算するようにしてあります。

エラーチェックはしていませんので 文字とか 数値じゃないものを 入れると プログラムが ストップしてしまいます。

数値だけ入れてれば 問題ないです。

id:Baku7770 No.3

Baku7770回答回数2831ベストアンサー獲得回数1812010/10/21 11:26:16

ポイント20pt

 マクロを使ってやる方法もあるでしょうし、ワークシートを複数枚使う方法もあるでしょう。

 実務的には、入出庫の履歴を管理する方がベターですから、私ならシートを在庫、入庫履歴、出庫履歴の3枚を使って、SUMIF関数で

 在庫=初期在庫+SUMIF(入庫シートの合計)-SUMIF(出庫シートの合計)

としますが、パソコンのスペックや商品点数、入出庫の頻度によっては実務上耐えられない可能性があります。

 http://exinfo.biz/func/func_sumif.shtml

 マクロを使う場合、在庫数の列を2つ用意しておいて、入出庫数を別のシートに入力した後に、ボタン操作をすれば、

1.表示用の在庫数をsumif関数を使った計算式に書き換え

2.表示用の在庫数を数値に書き換え

3.もう一つの在庫数の列に表示用の在庫数を複写

といった手順になります。

id:Silvanus No.4

Silvanus回答回数174ベストアンサー獲得回数672010/10/21 11:33:26

ポイント20pt

こういう感じのことであれば出来るんですけど…いかがでしょうか。

http://rct3jp.info/hatena/hatena_potato48_101021.xls

出荷数か入荷数が記入されると、一行下にずれて行く、という風になっています。

このマクロでは、出荷数と入荷数は同じ行には書き込めません。

  • id:Silvanus
    追伸
    >このマクロでは、出荷数と入荷数は同じ行には書き込めません。
    下にずれた後であれば、追加して書き込むことは可能です。
    その場合でもきちんと在庫量の履歴にも、新たな計算結果が反映されます。
  • id:hathi
    takntさんの方法で、計算はできるに違いないのですが、結果のシートをみると、
    非常にわかりにくい状態になってしまいます。 (数値の並びが なんだかわからない)
    元々の設計(どうしたい)を、potato48 さんにうかがった方が良いと思います。
     
    Baku7770 さんがいわれているように、【入出庫の履歴を管理する方がベター】でしょう。
    しかし、別シートに商品別に、入庫数、出庫数、在庫数を入出庫在庫記録帳としてつけさせて、
    その商品別の最終結果をまとめ表に表示させるということで、takntの希望に適うのか、
    ちょっとわかりません。
  • id:hathi
    追記です。
     
    シートのB列、C列のセルに数字を入れた時に とにかく答えを表示させるだけならば
    次の方法で表示はしてくれると思います。
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Column > 1 And Target.Column < 4 And VarType(Target) = vbDouble Then
      If Target.Column = 2 Then
        Cells(Target.Row, "A") = Cells(Target.Row, "A") + Cells(Target.Row, "B")
      Else
        Cells(Target.Row, "A") = Cells(Target.Row, "A") - Cells(Target.Row, "C")
      End If
     End If
    End Sub
     
    ただ、これでは、シートに表示された結果をみて、何のことかわからないと思います。
  • id:hathi
    たびたび 済みません。
     Silvanusさんの回答をみない前に、コメントを続けてしまいました。
     Silvanusさんのようにやれば、確かに直前履歴がだせますね。
     入出庫在庫記録帳を、新記録を上にして、一番上が入力欄というのは
     1品目1シートでやるなら、良いアイデアだと、感心しました。

    (はてなで、回答にエクセルをダウンロードできるようにできることは、知りませんでした)
  • id:taknt
    私のは 質問の通りにできるように実現しただけのものなので、当然ながら
    それを参考にして 自分に合うようにカスタマイズしてもらってもいいと思います。

    質問からすると 用途は メモ代わりに 使うみたいな 雰囲気ですので
    おおげさに履歴をとって うんぬんまでは いらないような気もします。
  • id:potato48
    たくさんの人から回答とコメントありがとうございます。
    質問を単純化しましたけど、完成形では在庫管理する品目は30ぐらいになり、記録の履歴は別の処にとっておきます。普段仕事上、現在在庫数の確認が主で、履歴はほとんど確認しないので、このような形を取りたいと思っています。完成形では、見やすく操作しやすい表の形をとりたいと思っています。
  • id:Silvanus
    > hathiさん曰く
    >(はてなで、回答にエクセルをダウンロードできるようにできることは、知りませんでした)
    いやいや、自分で借りてるレンタルスペースにファイルを上げただけですw。
    誤解させてしまいました様で申し訳ございませんです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません