• ベストアンサー

VBAによる在庫管理について

Sheet1のA1セルからE1セルまで「品名」、「単価」、「単位」、「在庫数量」、「備考欄」が記入されております。10000品目の在庫管理に使用しております。 Sheet2においてinputboxを使用し品名を入れるとSheet1のA1セルを起点とした表のA列「品名」から部分一致で検索し、検索結果のA列からE列までのデータをSheet3に表示するという構文を教えていただけると幸いです。 宜しくお願い致します。

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

  • ベストアンサー
  • OK_Akiko
  • ベストアンサー率33% (4/12)
回答No.3

inputboxを使用し、とおっしゃっているので、vba記述可、ということで回答します。 >品名を入れるとSheet1のA1セルを起点とした表のA列「品名」から部分一致で検索し、検索結果のA列からE列までのデータ この手順は、通常のEXCELのフィルター機能でできるかと思うので、マクロで記録してみてください。 (最初にフィルターの設定をしておいて、品名の条件指定をするところから行の抽出が終わったところまでで終了。) 参考:http://officetanaka.net/excel/vba/tips/tips155.htm 作成されたマクロの、条件指定をしているところにinputboxで取得した文字列を使用するように加工し、抽出結果をsheet3にコピーする記述を追加すればよいかと思います。 コピー後、フィルタのクリアも必要かと思います。状況によってはフィルタ設定そのものも解除が必要でしょうか。 また、sheet3にコピーしフィルタのクリアをするところまでをマクロ記録してもよいかもしれません。 その際、抽出結果を選択する際は、マウスで行うとセル値を指定してしまうことになりますので、起点のA1を選択してから、「Ctrl+Shift+→」続けて「Ctrl+Shift+下」をすることで、セル値を指定しない方法で記録されます。 もしくは、Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Worksheets("Sheet3").Range("A1") に書き換えるか。 複数の条件を指定したいのであれば、「フィルターの詳細設定」という手もありますが、 これをマクロ記録してみましたら、セルの範囲指定が必要でしたので、inputboxで取得した値を抽出条件にできなそうでした。 VBAでの組み方が分からない場合、通常のexcel機能でどうすれば実現するかを考え、それをマクロ登録して、加工して使うという手が有効だと思いますよ。

8312yuki
質問者

お礼

とても参考になりましたm(_ _)m ありがとうございます。

その他の回答 (3)

  • OK_Akiko
  • ベストアンサー率33% (4/12)
回答No.4

追記: tanakanonoさんもおっしゃっているとおり、 最終目的が何なのかによっては、関数一発でOKかもしれませんよ。 (抽出結果から在庫総数を求める、とかなら、フィルタで条件指定しなくても関数で求められるかもしれません。)

回答No.2

VBAでの検索は遅いですよ。 やりたいことは簡単なようですので、数式を使うほうが良いと思います。 というか、普通にsheet1でctrl+fで検索するだけでは? 最終的に伝票を発行したいとかもう少し目的がわかると回答しやすいですね。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

仕事にエクセルを使うのは不十分だと思う。質問者もいまさら検索のVBAを聞くなんて、仕事に使うには勉強不足でしょう。 AccessなどのVBAを習得するべきでしょう。SQLによる検索は、強力です。 エクセルVBAなら、セル範囲(Range)対象の、Findメソッドがある。 WEBやVBAの本で照会すれば、実例が多数解説されている。 質問するとすれば、それからの疑問点の質問だろう。 Googleででも「vba find 」出照会すれば記事がたくさん見つかる。 >部分一致で検索、も「vba find  xlPart」ででも照会したら。

関連するQ&A