表題の通りなんですが、エクセルで、あるセルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのですが、そういったことってできるのでしょうか。
具体的には、
1、バーコードリーダーで数値をセルに入力
2、その数値に対応する名前をvlookup関数にて表示
3、その名前が入力された時点でマクロが自動的に実行
と言うものです。
3の部分がよく分からずに困っています。できるかどうか分かりませんが、もしできるようであるならその方法を教えていただければありがたいです。どうか、よろしくお願いします。
No.15ベストアンサー
- 回答日時:
こんにちは。
>それをしないようにする上で、自動的にマクロを実行させる事もできるのでしょうか。
それは以下のようになります。イベントドリブン型のマクロをアプリケーションのインスタンスにしてシートに設けます。ただし、Calculate イベントを設定してあるシートを使う時のみ、「元に戻る」が利きません。
今は、「データ」というシートのモジュールにマクロが登録してあるはずですから、そのすべてを、削除するか、コメントブロックしてしまってください。(コメントブロックというのは、先頭に「’」をつけることですが、〓のようなマークのツールボタンが出ていれば、それを使うと便利です。)
シートを「データ」シートから、一旦、別のシートにするか、または、 Workbook_Open() を実行すれば、「データ」シートに設定されます。別のシートをアクティベートすると、そのイベントドリブン型マクロは、使えないようになります。
これでも、問題があるようでしたら、もう一度、Changeイベントの話から積み上げたほうがよいかもしれません。
'//ThisWorkbook モジュール//
'Option Explicit
Private WithEvents App As Application
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh Is Worksheets("データ") Then
Set App = Application
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh Is Worksheets("データ") Then
Set App = Nothing
'MsgBox "DeSetting" '検査用
End If
End Sub
Private Sub App_SheetCalculate(ByVal Sh As Object)
On Error GoTo ErrHandler
Application.EnableEvents = False
If Range("B1").Value <> "" Then
'実行プログラム
出勤r
'Beep '検査用
End If
Range("B1").ClearContents
ErrHandler:
Application.EnableEvents = True
MsgBox Sh.Name
End Sub
Private Sub 出勤r()
Dim m As Integer
Sheets("データ").Select
m = Cells(1, 2).Value + 5
Range("D3").FormulaR1C1 = "=TIME(HOUR(RC[-3]),MINUTE(RC[-3])-5,0)"
Cells(m, 4).Value = Range("D3").Value
End Sub
Private Sub Workbook_Open()
Worksheets("データ").Activate
Set App = Application
End Sub
注意:#13 の件については、修正されておりません。
返信をありがとうございます。
また、こちらからの返信が遅れてしまい申し訳ありません。
試してみたんですが、なぜかは分かりませんが、マクロが実行されませんでした。
シートの方に貼り付けて試したんですが、数値を入れてもうまくいきませんでした。
少し、私自身が簡単に考えすぎだったのかもしれません。
正直、全く分からないレベルの話になってきていて、そのままコピー・ペーストで試して分からないという事で、またコードをお願いすると言う繰り返しで、かなり私自身が甘え過ぎている気がして、大変申し訳なく思っております。
とりあえず、今回の自動でマクロを実行するという事に関しては、目的が達成されているので、逆に途中で終了するのもどうかとは思いますが、一回閉めさせてもらいたいと思います。
ひょっとしたら、また再度お聞きする事があるかもしれないですし、またお世話になることがあるかもしれません。その時はどうか、よろしくお願いします。
今回は、本当にありがとうございました。
No.14
- 回答日時:
こんにちは。
Wendy02です。>バーコードの数値(あるいはVlookup関数での名前)の違いを認識する
それは、バーコードの数値の分解がよいですね。
だから、例えば、以下は、商品バーコードですが、一部分を取り出して別けます。
二つ案を考えました。
A1:
4912345678904
(書式で整えると良いです。「00 0000 000000 0」)
=IF(MID(A1,3,4)="1234",VLOOKUP(A1,Sheet2!$A$1:$B$200,2),VLOOKUP(A1,Sheet3!$A$1:$B$200,2))
ただ、これは、ひとつの式にまとめましたが、このように取り出すことも可能です。
A1:
4912345678904
C1:
=MATCH(MID(A1,3,4),{"1111","1234","3333","4444"},0)
B1:
=If(IsError(C1),"", VLOOKUP(A1,INDIRECT("Sheet"& C1 &"!A1:B100"),2))
>2、コードの終了時に削除される事については、今の所全く問題はないんですが、セルが次に行かない様にする方法はあるのでしょうか。
以下のようにしてみたらいかがですか?
If ......
・
出勤r
'Beep '検査用
Range("A4").Select '←If で囲まれた中に入れてみたらいかがですか?
End If
こちらで、今試してみましたが、VlookUpの値の変化がないと、これはマクロが動かないのです。たぶん、それで、不都合はないとは思いますが、もしも、気になる時は、空いたセルに、=Now() と入れると良いです。
なお、このCalculate マクロには、最大の欠点は、「元に戻す」というコマンドが、ブック全体に利かなくなってしまいます。もし、それで不便を感じられるようでしたら、今のスタイルは変えたほうがよいかもしれません。
皆さんが、もうお話を出していただいているので、後先で申し訳ないのですが、バーコードリーダー・ソフトウェアは、OLE を使っているようですね。そうすると、その設定(プロパティ)の中で、CrコードやCrLfコード(通称、改行コード)の付加を処理することも可能ではないか、と思っています。
もちろん、私のコードは、たぶん、ほとんど、出だしだけを変えるだけで済むことですが。
この回答への補足
返信をありがとうございます。また、返信が遅くなってしまい、大変申し訳ありませんでした。
本当に助かりました。
おかげで、だいたい思ったとおりの事ができるようになりました。
ありがとうございました。
今回、補足に書かせていただいたのは他でもありません。
>なお、このCalculate マクロには、最大の欠点は、「元に戻す」というコマンドが、ブック全体に利かなくなってしまいます。もし、それで不便を感じられるようでしたら、今のスタイルは変えたほうがよいかもしれません。
この部分が気になったからです。
今の所、特に不便は感じてはおりませんし、訂正の際にEnterを押すとCalculateのマクロが貼り付けてあるシートのセルに移動すると言う事が分かったのは非常によかったんですが、それをしないようにする上で、自動的にマクロを実行させる事もできるのでしょうか。
先々のことを考え、非常にずうずうしいとは思いますが、どうか、よろしくお願いします。
No.13
- 回答日時:
補足です。
Target.Address = "$A$4"
が判定基準なら、
こちらかは、
If Range("B1").Value <> "" Then
↓
If Range("A4").Value <> "" Then
に換えてください。ただし、現在のコードでは、終了すると削除されます。
この回答への補足
度重なる返信を本当にありがとうございます。
試してみましたら、マクロが実行されました。
丁寧に教えていただいた上に、その結果が、私が望んでいた形になりうれしく思っております。
更に質問しても良いでしょうか?
コードに関しては完全なんですが、新たな問題が数点でてきました。
1、バーコードの入力によって、コードが実行されるようになりましたが、そのバーコードの数値(あるいはVlookup関数での名前)の違いを認識する事はできるのでしょうか?希望としては、別のシートの名前の一覧に対応したものにしたいんですが・・・
2、コードの終了時に削除される事については、今の所全く問題はないんですが、セルが次に行かない様にする方法はあるのでしょうか。私なりに、Wendy02さんが作られたコードの下の部分に、シートのセレクトとrange("a4").selectと加え、試してみたんですが、他の作業をした場合でもEnterを押したとたんに、そのシートのa4に移ってしまうんです。何か、良い方法はあるのでしょうか。
今の所、考えられる質問としましては上記の二点です。私が全く分からないコードなので、ほとんどいじる事すらできません。希望としましては、バーコードの数値に対応したマクロをそれぞれ実行すると言う事になります。(バーコードリーダー=ユーザーフォームのコマンドボタン)
それ以上のことができるのかは分かりませんし、これ以上迷惑になるかもしれませんが、もし時間を割いていただけるのであれば、回答をよろしくお願いします。
No.12
- 回答日時:
こんにちは。
Wendy02です。>Wendy02さんのコードでも試してみました。そうしたら、今度はマクロが実行したんですが、同じ作業を繰り返した後で「スタック領域が不足」というメッセージが出ました。
たぶん、何度も同じ繰り返しで、イベントの無限ループを起こしてしまったようですね。ですが、マクロは瀕死の状態でも、どうやら生きていたようですね。^^;
おそらく、その路線は使えるような気がします。
複線を張って申し訳ないのですが、私は、一応、Calculate イベントの路線で続けさせてもらいます。その前に解決したら、こちらは離脱します。
それで、私はあくまでも、VlookUp関数などがあるという条件です。ない場合は、Now や Today関数をシートにおいておけばよいです。「出勤プログラム」の内容的なものは詳しくは分かりませんが、なるべく近い姿にしました。
イベントの除外条件は、Range("B1").Valueに数字や文字列があるかどうかの判定ですから、消されては困る場合は、何か別の手段を講じなければなりません。
'なお、これは、*シートモジュール*のみです。
'Option Explicit
Private Sub Worksheet_Calculate()
On Error GoTo ErrHandler
Application.EnableEvents = False
If Range("B1").Value <> "" Then
'実行プログラム
出勤r
'Beep '検査用
End If
Range("B1").ClearContents
ErrHandler:
Application.EnableEvents = True
End Sub
Private Sub 出勤r()
Dim m As Integer
Sheets("データ").Select
m = Cells(1, 2).Value + 5
Range("D3").FormulaR1C1 = "=TIME(HOUR(RC[-3]),MINUTE(RC[-3])-5,0)"
Cells(m, 4).Value = Range("D3").Value
End Sub
No.11
- 回答日時:
ザッと見た限りですが...
> If Target.Address = "$a$4" Then
VBA は大文字・小文字、全角・半角を区別しますので、ここが原因です。
IF Target.Address = "$A$4" Then
としてみては。
返事が遅れてしまいましたが、アドバイスをありがとうございました。
シートモジュール、標準モジュールの区別が今まで分かりませんでしたが、教えていただき大変勉強になりました。
まだまだ、初心者で我流でやっているのでまた質問する事があると思いますが、その時はどうか、よろしくお願いします。
No.10
- 回答日時:
> ちなみに、キーボードによる入力でもうまくいっておりません。
キーボードからの直接入力で Change イベントが発生しないこと事態がオカ
シイです。
基本的なことを確認したいのですが、今まで示されたコードが書かれている
場所はどこなのでしょうか?
ワークシートのイベント処理なので、シートモジュールに貼り付けなければ
ならないわけですが。
標準モジュールとかに貼ってないですか?
また、#5 で補足いただいたコードは End Sub が足りません。何かすれ違い
がある様に思います。どうも、こうした回答・補足をいくら繰り返していて
も、解決しない気がしてきました。
まず、ご自分で現在までに書いたコードを「省略しないで全て補足」して
みて下さい。
この回答への補足
返信ありがとうございます。
KenKen_SPさんの回答をいただいてすごく基本的な事が間違っている事に気がつきました。標準モジュールに貼っておりました。お恥ずかしながら、「シートモジュール」「標準モジュール」の区別が今まで全くできてなく、全て標準モジュールにて行っておりました。お手間を取らせてしまい、大変申し訳ありませんでした。
また、コードのEnd Subが抜けているご指摘の点ですが、書き込みを終わった後で気がつき、どうにもできないままご指摘を受けると言う事になってしまいました。こちらも申し訳ありませんでした。実際、後はEnd Subをつけるだけで、その他、不必要なセルの移動の部分を消しただけのコードであります。
回答の中で教えていただきました、シートモジュールに、
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$a$4" Then
出勤 '処理
End If
End Sub
そして、標準モジュールの出勤のコード
Dim m As Byte
Sheets("データ").Select '出勤時間を確定させる
m = Cells(1, 2).Value + 5
Sheets("データ").Select
Range("D3").Select
ActiveCell.FormulaR1C1 = "=TIME(HOUR(RC[-3]),MINUTE(RC[-3])-5,0)"
Range("D4").Select
Range("D3").Select
Selection.Copy
Cells(m, 4).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
にて、試みてみました。しかし、結果的に実行はしませんでした。
また、Wendy02さんのコードでも試してみました。そうしたら、今度はマクロが実行したんですが、同じ作業を繰り返した後で「スタック領域が不足」というメッセージが出ました。
ほんの少しだけ、前進したような気がします。
皆様にはお手間を取らせてしまい、大変申し訳なく思いますが、どうか、よろしくお願いいたします。
No.9
- 回答日時:
s_husky です。
全く、新しいシートを用意してテストされることをお勧めします。
多分、成功すると思います。
もし、成功したのであれば、原因はVBAの誤動作です。
その場合、プロシージャを再配置(コピー&ペースト)した可能性があります。
一度だけ他からコピーすることは許されますが、再配置は厳禁です。
再配置の後に全く予測不能の動作が始まります。
是非、全く、新しいシートで1のテストを!
成功すれば、そこに全ての処理を書けば完成です。
No.8
- 回答日時:
こんにちは。
http://barcode.technical.jp/handbook2/2-1.html
バーコードリーダーで読み取ったバーコードの値をセルに入力する
もし、このようなスタイルで、VlookUp で値が変わるなら、Calculate イベントが働くはずです。
VlookUp は、揮発性(Volatile)関数で、代入される値が変われば、イベントを生成します。
どのような値になるかは別として、簡単に書けばこのようになります。
Private Sub Worksheet_Calculate()
If Me.Range("A4").Value <> "" Then
'実行プログラム
End If
End Sub
ただ、個人的には、そういう方法は、古くなってしまうと思っています。どこかで、けじめをつけていかないといけないなって思います。もちろん、VBAについてを言っているわけではありません。
この回答への補足
返信をありがとうございます。
また、バーコードリーダーに関してのHPを教えていただき、ありがとうございます。
教えていただいたコードを使い、早速試してみたんですが、なぜか実行されませんでした。changeと同様、キーボードで値を入力してみましたが、それも実行されませんでした。
なぜそうなるのか分からなかったので、他のHPに載っていたcalculateのコードでも試してみましたが、実行されず・・・
何が原因なんでしょうか。changeやcalculateと言ったものがただ単に使えないだけなんでしょうか。
度々で申し訳ありませんが、よろしくお願いします。
No.7
- 回答日時:
問題の切り分けが必要だと思います。
2. 3.は取り合えず横においておき、まずは 「バーコードリーダからの入力を検知する」ことから考えた方が良さ
そうです。
バーコードリーダ側でバーコードを読み取ったあとに「改行を送るかどうか」
の設定項目がないですか? 「改行を送らない」設定になっているのでは?
Worksheet_Change イベントはあくまで、「セルの値が更新」されたとき発生
するものです。ここで、一般的なバーコードリーダの入力原理は、
・「キーボード入力のシミュレート」
ですから、バーコードリーダからの入力で Worksheet_Change イベントを発生
させるためには、最後に Enter キー(改行)が送信され、「値が確定」する
ことが必要です。
これが送られていないので、Worksheet_Change イベントが発生しないのでは?
バーコードリーダによっては、この設定自体がないかもしれませんが、取説を
確認してみて下さい。
# テキストボックスなら KeyDown とか KeyPress などのイベントでも
# 検知可能なので、改行が送信されなくても良いのですが...
この回答への補足
度々の返信をありがとうございます。
バーコードリーダーが値を読み込む際、入力モードは直接入力になっておりますので、Enterキーを押さなくても改行はされているようです。
ですが、改行されていても、マクロが起動しないんです。ちなみに、キーボードによる入力でもうまくいっておりません。
バーコードリーダーは会社のもので、古い型のようですので、取説はないんです・・・
No.6
- 回答日時:
s_husky です。
まず、99%プログラミングは完成しています。
3が自動実行されない原因は、既答の通りだと思います。
<解決1>
強制的にイベントを発生させる。
例えば、2でキーを送出する。(SendKeys etc.)
しかし、これは、邪道です。
<解決2>
バーコード処理そのものを見直す。
・バーコードはバーコードのみをセルに代入しており{ENTER}を送っていないのではないのか?
<わざわざと書いた理由>
私は、バーコード入力フォームを用意しています。
その小さいフォームに
・現行のセル名。
・バーコード表示テキストボックス。
を表示。
バーコードリーダは最後に{Enter}を送るように設定。
更に、このフォームから直接に2、3を実行する関数を起動。
1、2、3の処理を複数の関数に分けて書くことと一気に実行することは矛盾しないと思います。
「わざわざ」と書いた理由です。
これで、キー入力との並行処理が完成します。
なお、バーコードはキーボード部分に接続しています。
線は分岐してバーコードとキーボードを双方の信号を受け散るという訳です。
この回答への補足
返信をありがとうございます。
解決2については、入力モードが直接入力になっておりますので、Enterが押されていなくても値が入力されております。また、値をキーボードから直接入力しても、マクロが起動しないんです。
「バーコード入力フォーム」とは、どのようなものでしょうか。それを利用する事により、1→3(バーコードで数値を読み込むことで、マクロが自動的に実行)することができるのでしょうか。もし、差支えがなければ是非教えてください。どうか、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2022/06/20 09:22
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Excel(エクセル) セルを数式で指定する方法 5 2022/04/13 16:55
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- Excel(エクセル) エクセルのセル値に対応してマクロを実行する方法を教えてください セルA1が「1」の時にマクロ名「マク 2 2022/06/19 18:45
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
Excelで教えてください。 バーコードリーダーで読み込みしたあと セルを自動で次のセルに行くように
Excel(エクセル)
-
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
Excelでバーコードリーダーで読み込ませた場所に移動して日時を表示させる方法。
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの警告について
-
1.5ヶ月分の費用按分 エクセル関数
-
UNIQUE関数、配列数式を使わず...
-
エクセルで、数字の下4桁の0を...
-
エクセルの不調について
-
excelVBAについて。
-
11ケタの数字を打つと、エク...
-
Excelで、毎月の月曜と金曜の合...
-
エクセルの数式が分かりません
-
エクセル数式に問題があります
-
エクセル2021 範囲指定印刷をす...
-
Excelで合計を求めたいです
-
【Excel VBA】 テキストファイ...
-
vbe でのソースコード参照(msgb...
-
【マクロ】複数の日付データをY...
-
IF 日付範囲に入っていたら
-
【VBA】使ってたクエリの接続を...
-
【Excel】日付に連動してプルダ...
-
Excelの数式について教えてくだ...
-
8:40までの出勤は全て8:30に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルの数式バーのフォント...
-
【Excel】日付に連動してプルダ...
-
【再投稿】レイアウトが異なる...
-
Excelについて教えてください ...
-
同率順位の発生しないランキン...
-
エクセルマクロについて教えて...
-
【Excel VBA】 テキストファイ...
-
Excel 標準フォントについて教...
-
Excelの計算で差分を求める場合...
-
Excelの区切り文字について質問...
-
大容量があつかえるソフトを探...
-
エクセルの計算式について(COU...
-
エクセルについて
-
今までは、 「CSVの出力先を選...
-
Excel ショートカットで列、行...
-
8:40までの出勤は全て8:30に...
-
if関数。半角文字や全角文字で...
-
エクセルの関数
-
毎週追加して行くセルの数値を...
おすすめ情報