- ベストアンサー
Excel VBAでの商品管理について
- Excel VBAを使用して商品管理を行う際に、売上登録処理に関して問題が発生しています。
- 売上登録処理では、ユーザーフォームから入力された商品コードを使用して在庫シートから該当商品を検索し、売買明細シートに商品データを転記します。
- しかし、在庫シート内で商品コードを検索する部分のコードが書けずに困っています。お知恵をお貸しいただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1です。すみません、間違えました。 Cells(RowNum,4)の前にピリオド「.」を入れ忘れました。 下記、訂正済です。 Dim MyVariant As Variant MyVariant = Application.VLookup(.Cells(RowNum,1), Worksheets("在庫シート").Range("B:J"), 9, False) If IsError(MyVariant) Then .Cells(RowNum,4).value="" Else .Cells(RowNum,4).value=MyVariant 'Worksheets("在庫シート").Cells.Find(What=.Cells(RowNum,1)).EntireRow.Delete 'この行は(5)の削除 End if
その他の回答 (2)
- High_Score
- ベストアンサー率25% (45/176)
このようなマクロを組むことから考えて、一通りの使い方デバッグ等は御存知と思います。Iserrorの判定はどちらになってますか?おそらく全部エラー、つまりvlookupで該当なしになってるのかと思います。だとすると疑問点は ・在庫シートB列の商品コードと、売買明細A列の商品コードは同一?前後に半角スペースや改行コードがあるとか。 ・.Me.商品コード.Valueというのは見かけない使い方です。特別な処理をしてませんか?
お礼
すみません! 私の単純なミスがあり、無事にできました! 売買明細の方は、商品コードを入力し、コマンドボタンで在庫シートから商品名等を拾ってフォームに表示されるので、コードの入力違いは無さそうだと思って、もう一度よーくコードを見ていました。 そうしたら、在庫シートにある商品コードの列が変わってしまったのですが、そこを訂正するのを失念していました。 High_Score様には大変親切に教えて頂きありがとうございました。 本当に助かりました。 今後また不明な点が出てきた際には、ご相談させて下さい。 宜しくお願い致します。
- High_Score
- ベストアンサー率25% (45/176)
エクセル関数はVBAでも使用出来るので、vlookupを使います。 Cells(RowNum,1)の商品コードが見つからない場合は空欄、見つかった場合は仕入れ価格を転記します。在庫シートの該当行削除も書きましたが、質問には含まれてないのでコメント文にしてあります。 Dim MyVariant As Variant MyVariant = Application.VLookup(.Cells(RowNum,1), Worksheets("在庫シート").Range("B:J"), 9, False) If IsError(MyVariant) Then Cells(RowNum,4).value="" Else Cells(RowNum,4).value=MyVariant 'Worksheets("在庫シート").Cells.Find(What=.Cells(RowNum,1)).EntireRow.Delete 'この行は(5)の削除 End if 1個売れただけで行削除するのですか?
お礼
ご回答ありがとうございました。 シリアル番号で管理している商品が多々あるので、商品が1つ売れると在庫シートからも削除される仕組みにしたかったのです。 教えて頂いたコードを試してみたのですが、私のやり方が違うのか在庫シートのデータを引っ張ってきてくれません。 色々と試行錯誤中ですが、大変参考になりました。 ありがとうございました。
お礼
再度の回答ありがとうございます。 Cellsの前のピリオドは、私も実は入れてみたのですが、うんともすんとも反応しません。。。 エラーにはならないので、私のやり方が何か違うのだと思います。 本当に何度もありがとうございます。 もうちょっと頑張ってみます!