• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルについてご質問させていただきます)

エクセルで商品コード検索と在庫表示する方法

このQ&Aのポイント
  • エクセルで商品コードを検索して在庫を表示する方法についてご教示ください。
  • シート1には商品コード、商品名、分類、在庫が一覧として記載されていますが、シート2の特定のセルに商品コードを入力すると、シート1から商品名と分類を引っ張ってきて表示したいです。
  • また、正しい情報が表示されたら、ボタンを押すなどのアクションを行うと、シート1の該当商品の在庫にチェックマークを入れたいです。どのようにすれば実現できるでしょうか?

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

シート1ではA列に商品コード、B列に商品名、C列に分類が入力されており、D列には在庫の○を表示させることにします。 シート2ではA1セルに商品コードを入力することでB1セルには商品名を、また、分類をC1セルに表示させるのでしたら、B1セルに次の式を入力しC1セルまでオートフィルドラッグします。 =IF(OR($A1="",COUNTIF(Sheet1!$A:$A,$A1)=0),"",INDEX(Sheet1!$B:$C,MATCH($A1,Sheet1!$A:$A,0),COLUMN(A1))) シート見出しのSheet2を右クリックして「コードの表示」をクリックしてマクロを記入する画面を表示させます。 次のマクロを入力します。 Private Sub Worksheet_Change(ByVal Target As Range) Set WS1=Worksheets("Sheet1") Dim ans As Integer Dim RowPos As Integer If Target=Range("A1") And Range("A1")<>"" Then If WorksheetFunction.CountIf(WS1.Range("A:A"),Range("A1"))=0 Then MsgBox"該当する商品コードがシート1に有りません" Exit Sub End If ans=MsgBox("商品名は "&Range("B1")&" です。分類は "&Range("C1")&" です。間違いありませんね?",vbYesNo) If ans=vbYes Then RowPos=WorksheetFunction.Match(Range("A1"),WS1.Range("A:A"),0) WS1.Cells(RowPos,4)="○" End If End If End Sub これでシート1のD列には○が表示されます。

akihiro34
質問者

お礼

ありがとうございました 思った通りの事ができました これでかなり仕事の改善になります。感謝です

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

〇か空白でした。 フォームに検索ボタン、検索商品コード、更新ボタン、シート1の表示用の商品コード、商品名、在庫、こんな感じでしょう。〇を空白に訂正できることも必要と思います。

すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

商品コード指定、その商品詳細表示、在庫入力、在庫更新、商品コード指定、その商品詳細表示、在庫入力、在庫更新、の繰り返しでです。シート1上から順番でなくランダムに入力するには質問のようなやり方でしょう。 シート2は1行分しか使わない、入力しないのでシートでなくフォームでもできる話です。 『ユーザフォームを使ってのデータの書き換え(エクセル)』 というので検索してみてください。 フォームで書き換え、とかでもサンプルありそうです。

すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No1です。 ご質問の意味がいまいち理解できないのですが。 シート1は商品一覧ですよね。シート2のA列に商品コードを入力すればB列には商品名、C列には分類が表示されるようにシート2のB列やC列には関数を使ってシート1のデータが表示されるようにしているわけですね。 シート1ではシート2に商品コードがあればシート1のD列に○を付けたいとのことと理解しますが、それではいけないのでしょうか? この考えが間違っているとしたらシート2で商品コードを入力したときにシート1から商品名や分類を関数を使って表示させることは間違っていることになりませんか?

akihiro34
質問者

補足

説明が下手で申し訳ありません シート2のA1、A2、A3・・・と下に連続して商品コードを入力するのとは違います 1.シート2 A1に商品コード入力 ※カーソルはA1からエンターでは移動しないようにしています 2.シート2 B1・C1に該当商品が表示される 3.2の表示が正しければ【在庫】ボタンを押す 4.シート1の該当商品の在庫に○が記載される ※A1にカーソル配置 商品数分この繰り返しになります ・商品コード入力セル【A1】固定 ・商品名表示セル【B1】固定 ・分類表示セル【C1】固定 VBAを組むしかないと思いますがわかりません 知恵をお貸しください

すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

シート1に元になる商品データがあって、在庫は手入力。ここのスクロールが面倒ですね。 シート2で商品を指定したらシート1からどの行か見つけ商品を表示、在庫は値ないものが表示されている。 そこでシート2で在庫値を入れたらシート1の在庫を更新、次の商品入れたらまた繰り返し。最初の商品入れたら先ほど更新した在庫が表示。 シート1の在庫の欄は数式でなく値にしないといけないですね。 シート2では商品がどの行かは突き止めてますから、その結果を使うのはどうでしょう。突き止めた行の4列目が在庫。 アクションはINPUTBOXでも良さそうですね。

akihiro34
質問者

補足

早速のご回答ありがとうございます 現状の問題点とこれからやりたい事はまさしくその通りでございますが在庫は有り無しだけを管理しているので在庫は"○"か空白だけになります その方法を詳しく教えて頂ければ幸いです

すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

シート1でD列に在庫の○の表示をさせるのでしたら次の式をD2セルに入力して下方にオートフィルドラッグすればよいでしょう。 =IF(COUNTIF(Sheet2!A:A,A2)=0,"","○") この式ではシート1のA列に商品コードがあり、それと一致する商品コードがシート2のA列にある場合には○をつけなさいという意味になります。列が違っていたら適宜修正してください。

akihiro34
質問者

補足

早急な回答ありがとうございます やりたい事を補足させていただきます シート2に入力セルを作成して、一件ずつ在庫ありの確認作業をしたいのです 例)商品のシールに記載されている番号をシート2のA1セルに入力するとB1に商品名、C1に分類が表示されて、それが正しければ『在庫あり』ボタンを押してシート1の商品一覧該当の在庫項目に○を記載する シート2に一覧があるわけではなく商品コードから商品名をチェックしてシート1に反映したいのです 商品にはバーコードも記載されているのでシート2の1入力セルにリーダーで読み込むようにも考えてます

すると、全ての回答が全文表示されます。

関連するQ&A