- ベストアンサー
エクセル VLOOKUPで探したレコードを書き換えるには?
エクセルで在庫管理をしようと思います。 商品コード 品名 在庫数 A000001 あんぱん 20 A000002 ジャムパン 15 B000001 カップ麺 10 C000001 ジュース 25 上のような商品リストを作ります。 VLOOKUP関数を使用して商品コードを入力すると品名と在庫を表示します。 このときに、その商品を1個売ったとして、在庫を減らすにはどのようにしたら良いでしょうか? VBAを使って簡単なレジ機能を持った在庫管理システムを作ろうと考えています。 宜しくお願いします。
- みんなの回答 (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できない) ・後で販売履歴を見るためには、別シートに履歴を書き込んでおくことも考えなければならない ・棚卸し処理はどうする? 等、色々なことを検討しなければなりません。どこまでお考えになっているでしょうか? もう少し前提条件(シートの構成や、どんな入力方法にする等)を煮詰めてから質問を絞ってされる方が、目的実現の近道と思います
お礼
レジとか在庫管理とか余計な事を質問に書き込んだため、色々とご指導いただくことになってしまい、申し訳ございません。 今回の質問の趣旨は技術的部分だけでした。 ただ、全体の構造をはっきりと決めずに走り出してしまったことを反省し、煮詰めの作業をやり直そうと考えたきっかけにもなりました。 ありがとうございます。 今回はこのような書き方で使用させて頂きました。 res = Application.Match(ItemCD, Worksheets("商品リスト").Columns("A"), 0)