アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAバーコード照合

バーコードリーダーがPCについており、
バーコードを読み取るとセルに入力され、例えばa1に271
二つ目を読み込むと違うデータを読み取りb1にs@271
三つ目を読み込みまた、c1にd@271と読み込んだとします。
その場合a1,b1,c1が全く同じデータの場合照合OKとし、音を鳴らし次の照合へ移ります。
移る時は前のデータを削除し、またa1から入力したいです。
またはa2.b2.c2から入力したいです。

A 回答 (3件)

No.2です。


前回回答のコードにタイプミスがありました。お詫びして訂正いたします。

If Target.Offset(0, -2).Value And Target.Offset(0, -1).Value And Target.Offset(0, -1).Value = Target.Value Then

の部分を

If Target.Offset(0, -2).Value = Target.Offset(0, -1).Value And Target.Offset(0, -1).Value = Target.Value Then

に修正してください。
    • good
    • 1
この回答へのお礼

ありがとうございました

お礼日時:2021/12/25 04:47

ご質問者の説明で不明な点があります。


>例えばa1に271、二つ目を読み込むと違うデータを読み取りb1にs@271、
>三つ目を読み込みまた、c1にd@271と読み込んだとします。
>その場合a1,b1,c1が全く同じデータの場合照合OKとし・・・・・

上記の例示では「271」という数字部分のみ一致していますが、これを「全く同じデータ」と呼ぶのでしょうか?
そうではなく、英文字、記号、数字など全ての文字が一致しているものを「全て同じデータ」と呼ぶのでしょうか?
だとすれば、上記のデータは「同じデータではない」ということになりますが、「271」の部分が一致した例を示した意味はなんでしょうか?

という疑問は残りますが、一応、ご質問者の例示は「同じデータではない」という前提でVBAサンプルを作成してみました。

EXCELのオプションの詳細設定で「ENTERキーを押したらセルを移動する」で「方向」を「右」に指定します。
バーコードリーダーは読込後に「ENTER」キーコードを発行するよう設定できるものが多いので、上記設定でバーコードを読むとセルが右に移動するようになります。
No.1さんの回答にある
>セルを全て保護しておけば、自然とC1セルの次は、A2に 移動するかと。
を当方で試してみました。保護すると入力はできませんが、入力できないセルへ移動してしまうようです。
そこで、C列からA列の次の行に移動させるために、A列からC列を「テーブル」にしてみました。「テーブル」では1行目は「見出し」です。
sheet1に添付画像のようにA~C列にテーブルがあり、A2から入力スタートすることとします。A2⇒B2⇒C2⇒A3⇒B3⇒C3⇒A4・・・という進み方になります。
sheet1にWorksheet_Changeという名前のプロシージャを作って、以下のコードを記述します。(64ビットのバージョン用です)

Private Declare PtrSafe Function BeepAPI Lib "kernel32.dll" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C:C")) Is Nothing Then
Exit Sub
Else
If Target.Offset(0, -2).Value And Target.Offset(0, -1).Value And Target.Offset(0, -1).Value = Target.Value Then
Call BeepAPI(785, 800)
'MsgBox "3つのセルの一致を確認しました"
End If
End If
End Sub

sheet1のD列にはA列、B列、C列に読み込まれたバーコードの値が一致しているかをチェックし、一致なら「〇」、不一致なら「×」を表示する数式

=IF(C2="","",IF((A2=B2)*(B2=C2),"〇","×"))

をD2に入れて、下方向へコピーしてあります。

これで、上記のVBAと併せて、バーコードで読み込んだ結果3つのセルが一致していれば、ビープ音が鳴り、D列に「〇」が表示されます。

----余談----

以下は、EXCEL VBAとは関係のない工程管理の話です。興味がなければスルーしてください。
ご質問者は
>バーコードを読み取るとセルに入力され・・・
とおっしゃっていますが、そもそも、「バーコードは何に表示されている」のでしょうか?
仮に、商品や製品にバーコードが表示されているとして、3つが同じであることをチェックする意味は何なのでしょうか?
A1セル、B1セル、C1セルにその記録を残しておく必要はないのでしょうか?
常識的な 工程管理なら、「チェックする」のであれば、その「照合記録」を残しておくのは当然と考えられます。
例えば、
(1)「音」を鳴らして確認していたが、「音が鳴った気がした」という人的ミスでチェックをすり抜けてまった
(2)3つセットで読み込むはずが、1セット飛ばして次のセットに進んでしまい、チェック漏れが発生した
というような問題は、記録を残しておけば、後でシートをチェックすれば直ぐに発見できます。つまり、(1)のケースはA列、B列、C列のいずれかが不一致のはず(添付画像で言えばD列が×ですし、(2)の場合は総件数がチェック済み件数と不一致(添付画像で言えば見出し行を除いた行数が製品(商品)セット数(3つでワンセット)と不一致)となるからです。
これを、ご質問者の例示のように、
>移る時は前のデータを削除し、またa1から入力したいです。
という方法だと記録が残らず、対応方法がありません。従って、この方法はお勧めできません。
「VBAバーコード照合 バーコードリーダー」の回答画像2
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。参考にして作らせていただきます。

お礼日時:2021/12/17 13:28

おはようございます。



バーコード入力だと、入力後、下のセルに移動するかと。

イベントのChange
https://tonari-it.com/excel-vba-event-worksheet- …

IFで、データが同じかをチェック

4行目以降のセルを全て保護しておけば、自然とC1セルの次は、A2に
 移動するかと。
若しくは、イベントで、3つデータが入力されたら、セルをクリアする。

音を鳴らす
http://www.start-macro.com/55/w/s077.html


取り敢えず、上記を組み合わせ、マクロを組んでみては?と思います。
不明な点は、コードをアップし、躓いている点を書けば、きっと回答が
あるかと思います。
    • good
    • 0
この回答へのお礼

参考になります。ありがとうございました。

お礼日時:2021/12/15 12:39

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A