• 締切済み

エクセルによる照合と警告音

エクセルとバーコードリーダーによって、在庫管理をしようと考えています。バーコードリーダーには、スキャンによって値が入力されるとPC上でtabキーを押す、という機能があるので、エクセルにリーダーで読み込んだ値が入力されたあと、次のセルに移動することができます。ですので、商品のバーコードを次々に読んでいって、エクセルのシート上にデータを蓄積させていきます。 この蓄積される行をsheet1につくった一覧表からcountif関数でチェック(shhet2にバーコード数値=商品名のリストがある)し、どの商品が何個あるかを数えていくようにしています。 =COUNTIF(10:10,Sheet2!D7)・・・(リーダーから入力される値が入る行:元リスト) お尋ねしたいのは、バーコードから入力される値が、元リストにあるかどうかを照合し、リストに無い値が読み込まれた場合にエクセル上で警告音を鳴らすようにできないのか?という事です。 小型のノートPCでこのエクセルを動かし、肩掛けかばんに入れてバーコードリーダーだけ手元に。という事を考えているので、警告ダイアログ等は出さす、音だけで知らせるようにしたいのです。 以上、よろしくお願いします。

みんなの回答

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>回答をいただいて、すぐに試してみたのですが、リストにある値でもBeep音が鳴ります… う~ん、何故でしょうね? ちなみに新しいブックで Sheet2 A B ABC DEF GHI とでも準備して Sheet1の名前のタブ、コードの表示で Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Set c = Sheets("Sheet2").Range("A1:A8").Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole) If c Is Nothing Then MsgBox Target.Value & "はありません" Else MsgBox Target.Value & "は" & c.Address End If End Sub を貼り付けて、適当なセルに ABC と入れた場合、ZZZと入れた場合で実験してみてください。 Sheets("Sheet2").Range("A1:A8").Find(What:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole) のTerget.ValueはSheet1の変更があったセルの値(本番では、バーコードで入力した値) Sheet2のA1~A8を検索して If c Is Nothing Then は もし見つからなければ  という分岐です。 見つかったら音を出すということなので、VBAの力を借りないと出来ません。 エクセルVBAで検索すると勉強のためのサイトがいくつもあります。 一度、根気強く勉強してもらうと、将来にも役にたつと思います。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

例えばSheet1の名前のタブを右クリック、コードの表示 VBエディターが起動したら Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range If Target.Row = 10 Then Set c = Sheets("Sheet2").Range("B2:H8").Find(What:=Target.Value, LookIn:=xlValues, _ LookAt:=xlWhole) If c Is Nothing Then Beep End If End Sub を貼り付けして閉じてみてください。 VBAの動作を説明すると Sheet1の10行目が変更されたら Sheet2のB2:H8の範囲を検索、変更された値が検索値 もし、検索して何も見つからなければ Beep(音を出す) といったような流れです。 後は、ご自身のシートにあわせて編集してみてください。

Yoiyami747
質問者

お礼

お返事が遅れて申し訳ありませんでした。 回答をいただいて、すぐに試してみたのですが、リストにある値でもBeep音が鳴ります… でも、値は正しいのでcountifを入れている方のリストは数字がカウントされていきます。 VBAはさっぱりわからなかったので、いろいろ調べてみましたが、いまだ解決できません。 あまり長い間返答なしも失礼かと思いましたので、いったんお礼を申し上げようとコメントいたしました。 具体的な例もあげずに質問したのに、ご回答いただきありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

今一、良くわからないのですが >バーコードから入力される値が→Sheet2のB2~F7の入力される値? >元リストにあるかどうかを照合し→Sheet1のどこにあるのでしょうか? >リストに無い値が読み込まれた場合にエクセル上で警告音を鳴らす →VBAの力を借りて出来ます。 添付画像のどこにバーコードの値が入って、検索する範囲がどこなの補足してください。

Yoiyami747
質問者

補足

言葉足らずというか説明が変で申し訳ありませんでした・・・ ・バーコードから入力される値 絵が小さくて見えにくいですが、Sheet1のA10から右に続いています。バーコードのトリガーを押すたびに、バーコードを読む→エクセルのA10に値が入る→自動でB10がアクティブに→次のバーコードを読む・・・という動作をしています。 ・元リストにあるかどうかを照合 Sheet2が元リストです。縦が商品の種類・横が商品のサイズです。 たとえば、バーコードをスキャンし、バーコードの数値がエクセルのSheet1のA10に162300017004と入ったとします、Sheet2の「黄/17.0」という元リストの数値と符合するので、Sheet1の「黄/17.0」に1がカウントされます。