プロが教えるわが家の防犯対策術!

今、エクセルにて商品管理をするツールを作成していました。

ユーザーフォームにて、売却した商品コードを入力すると、在庫シートから該当商品を検索し、ユーザーフォーム内に商品データが入力されるようになっています。

売上登録処理を実行した時に、売買明細シートへA列には(1)売却した商品コード、B列には(2)売却した商品名、C列には(3)売却価額、D列には(4)売却した商品の仕入価額(これは”在庫シート”の中で商品コード(B列)を検索し、在庫シートのJ列から引っ張る)という情報を転記したあと、(5)在庫シートへ記載されているその商品情報の行を削除したいのです。

(1)~(3)の処理はできたのですが、(4)の在庫シート内で商品コードを検索する というコードが書けません。

(1)~(3)の処理は、

Dim Ctrl As Control

With Worksheets("売買明細")



'A列の最終セルからEndプロパティでデータの最終行を取得し、
'+1をして、次にデータを入力する行の行番号を取得
RowNum = .Cells(Rows.Count, 1).End(xlUp).Row + 1

'ワークシートの行列を指定してテキストボックスの値を1つずつセルへ代入
.Cells(RowNum, 1).Value = Me.商品コード.Value
.Cells(RowNum, 2).Value = Me.商品名.Value

… 以下続くとしました。

すみませんが、どなたかお知恵を貸していただけないでしょうか。



よろしくお願いいたします。

A 回答 (3件)

エクセル関数は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個売れただけで行削除するのですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
シリアル番号で管理している商品が多々あるので、商品が1つ売れると在庫シートからも削除される仕組みにしたかったのです。
教えて頂いたコードを試してみたのですが、私のやり方が違うのか在庫シートのデータを引っ張ってきてくれません。
色々と試行錯誤中ですが、大変参考になりました。
ありがとうございました。

お礼日時:2014/12/01 08:08

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
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます。

Cellsの前のピリオドは、私も実は入れてみたのですが、うんともすんとも反応しません。。。

エラーにはならないので、私のやり方が何か違うのだと思います。

本当に何度もありがとうございます。

もうちょっと頑張ってみます!

お礼日時:2014/12/02 08:25

このようなマクロを組むことから考えて、一通りの使い方デバッグ等は御存知と思います。

Iserrorの判定はどちらになってますか?おそらく全部エラー、つまりvlookupで該当なしになってるのかと思います。だとすると疑問点は
・在庫シートB列の商品コードと、売買明細A列の商品コードは同一?前後に半角スペースや改行コードがあるとか。
・.Me.商品コード.Valueというのは見かけない使い方です。特別な処理をしてませんか?
    • good
    • 0
この回答へのお礼

すみません!
私の単純なミスがあり、無事にできました!
売買明細の方は、商品コードを入力し、コマンドボタンで在庫シートから商品名等を拾ってフォームに表示されるので、コードの入力違いは無さそうだと思って、もう一度よーくコードを見ていました。


そうしたら、在庫シートにある商品コードの列が変わってしまったのですが、そこを訂正するのを失念していました。
High_Score様には大変親切に教えて頂きありがとうございました。

本当に助かりました。

今後また不明な点が出てきた際には、ご相談させて下さい。


宜しくお願い致します。

お礼日時:2014/12/02 22:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!