• ベストアンサー

エクセル VLOOKUPで探したレコードを書き換えるには?

エクセルで在庫管理をしようと思います。 商品コード  品名   在庫数 A000001   あんぱん   20 A000002   ジャムパン  15 B000001   カップ麺   10 C000001   ジュース   25 上のような商品リストを作ります。 VLOOKUP関数を使用して商品コードを入力すると品名と在庫を表示します。 このときに、その商品を1個売ったとして、在庫を減らすにはどのようにしたら良いでしょうか? VBAを使って簡単なレジ機能を持った在庫管理システムを作ろうと考えています。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

どこから回答すればよいか迷ってしまいます。 VBAでA列の商品コードを検索して、その行のC列の数値を減算するのは可能です。例えばVBAでApplication.Match関数を用いて行番号を取得し、Cells(行番号,"C")の値を加工する方法もあります。テストはしていませんが、こんなコードになるでしょう。  ItemCD = "A000001"  numSold = 2  '売れた数  res = Application.Match(ItemCD, Worksheets("商品リスト").Range(Range("A1"), Range("A65536").End(xlUp)), 0)  If IsNumeric(res) Then   Cells(res , "C") = Cells(res , "C") - numSold  Else   MsgBox "商品が見つかりません"  End If 他にFindメソッドを使う方法もあるでしょうし、1行ずつ繰り返し処理を行いIf文で判定する方法もあるでしょう。 でも実際にVBAを書こうとするなら ・検索する商品コードはどこから取得する? (フォーム? シートのセル?) ・商品コードが見つからなかったときはどうする? 入れ直しさせるならそのセルやテキストボックスに制御を移さなければならない。 更に業務で使うことを考えるなら ・数量を誤って入力したらどうする(VBAで処理したものはUndoできない) ・後で販売履歴を見るためには、別シートに履歴を書き込んでおくことも考えなければならない ・棚卸し処理はどうする? 等、色々なことを検討しなければなりません。どこまでお考えになっているでしょうか? もう少し前提条件(シートの構成や、どんな入力方法にする等)を煮詰めてから質問を絞ってされる方が、目的実現の近道と思います

AR-C26TY
質問者

お礼

レジとか在庫管理とか余計な事を質問に書き込んだため、色々とご指導いただくことになってしまい、申し訳ございません。 今回の質問の趣旨は技術的部分だけでした。 ただ、全体の構造をはっきりと決めずに走り出してしまったことを反省し、煮詰めの作業をやり直そうと考えたきっかけにもなりました。 ありがとうございます。 今回はこのような書き方で使用させて頂きました。 res = Application.Match(ItemCD, Worksheets("商品リスト").Columns("A"), 0)

関連するQ&A