今、エクセルにて商品管理をするツールを作成していました。
ユーザーフォームにて、売却した商品コードを入力すると、在庫シートから該当商品を検索し、ユーザーフォーム内に商品データが入力されるようになっています。
売上登録処理を実行した時に、売買明細シートへ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
… 以下続くとしました。
すみませんが、どなたかお知恵を貸していただけないでしょうか。
よろしくお願いいたします。
No.1
- 回答日時:
エクセル関数は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つ売れると在庫シートからも削除される仕組みにしたかったのです。
教えて頂いたコードを試してみたのですが、私のやり方が違うのか在庫シートのデータを引っ張ってきてくれません。
色々と試行錯誤中ですが、大変参考になりました。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
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
再度の回答ありがとうございます。
Cellsの前のピリオドは、私も実は入れてみたのですが、うんともすんとも反応しません。。。
エラーにはならないので、私のやり方が何か違うのだと思います。
本当に何度もありがとうございます。
もうちょっと頑張ってみます!
No.3
- 回答日時:
このようなマクロを組むことから考えて、一通りの使い方デバッグ等は御存知と思います。
Iserrorの判定はどちらになってますか?おそらく全部エラー、つまりvlookupで該当なしになってるのかと思います。だとすると疑問点は・在庫シートB列の商品コードと、売買明細A列の商品コードは同一?前後に半角スペースや改行コードがあるとか。
・.Me.商品コード.Valueというのは見かけない使い方です。特別な処理をしてませんか?
すみません!
私の単純なミスがあり、無事にできました!
売買明細の方は、商品コードを入力し、コマンドボタンで在庫シートから商品名等を拾ってフォームに表示されるので、コードの入力違いは無さそうだと思って、もう一度よーくコードを見ていました。
そうしたら、在庫シートにある商品コードの列が変わってしまったのですが、そこを訂正するのを失念していました。
High_Score様には大変親切に教えて頂きありがとうございました。
本当に助かりました。
今後また不明な点が出てきた際には、ご相談させて下さい。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
VBA 別ブックからの転記の高速...
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
VBAで変数の数/変数名を動的に...
-
ExcelVBAでDo Until loopのネス...
-
Changeイベントで複数セルへの...
-
VBA別シートの最終行の次行へ転...
-
VBA 実行時エラー1004 rangeメ...
-
VBA 重複チェック後に値をワー...
-
テキストボックスから、複数の...
-
vba 住所で判断して担当支店に...
-
GASでチェックボックスを一括of...
-
楽天RSSからエクセルVBAを使用...
-
ExcelのVBマクロを、バックグラ...
-
複数シートの複数列に入力され...
-
前回質問の続きになりますが、...
-
VBA Userformで一部別シートに...
-
VBAコードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
VBA 別ブックからの転記の高速...
-
VBA別シートの最終行の次行へ転...
-
【VBA】特定の条件でセルをコピー
-
Count Ifのセルの範囲指定に変...
-
100万件越えCSVから条件を満た...
-
楽天RSSからエクセルVBAを使用...
-
VBAコードについて
-
Changeイベントで複数セルへの...
-
VBAで変数の数/変数名を動的に...
-
Excel2013で切り取り禁止
-
グラフマクロで系列を変数にす...
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
Unionでの他のシートの参照につ...
-
Excel VBA オートフィルターで...
-
アクセスからエクセルへ出力時...
おすすめ情報