初めて自分の家と他人の家が違う、と意識した時

表題の通りなんですが、エクセルで、あるセルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのですが、そういったことってできるのでしょうか。

具体的には、
 1、バーコードリーダーで数値をセルに入力
 2、その数値に対応する名前をvlookup関数にて表示
 3、その名前が入力された時点でマクロが自動的に実行
と言うものです。 

3の部分がよく分からずに困っています。できるかどうか分かりませんが、もしできるようであるならその方法を教えていただければありがたいです。どうか、よろしくお願いします。

A 回答 (15件中11~15件)

こんにちは。

KenKen_SP です。

> 一度試してみて、うまくいったと思ったんですが、その後はどうやっても
> うまくいかなかったです。

zap35 さんの言われている「対象セルがC3...」は、バーコードリーダーか
ら数値が入力されるセルのことだと思いますが、単純な勘違いがありそうなの
で確認して下さい。「対象セルがC3...」のセルと

> その数値に対応する名前をvlookup関数にて表示

のセルとごちゃ混ぜになってませんか?

関数による表示の変化では Change イベントは発生しません。つまり VLOOKUP
関数の結果でセルの表示が変更されても Change イベントは発生しないという
ことです。Change イベントでこのセルを指定してないですかね...

それで、1回目はうまくいくが、2回目は動作しない...となっているのでは
ないですか?

この回答への補足

返信をありがとうございます。zap35 さんのコードを少々アレンジして、
 Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$a$4" Then
 出勤   '処理
 End If
 
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("D3").Select
Selection.Copy
Cells(m, 4).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
と言う事で、a4にはバーコードで数値を読み込ませると、「出勤」のマクロが実行されるんじゃないかと思ったんですが、うまくいきませんでした。「出勤」のマクロ自体は単独で実行を押してもうまくいきますが、バーコードでは何度試してみてもうまくいきません。もし、原因が分かるようでしたら、よろしくお願いします。

補足日時:2006/08/24 21:17
    • good
    • 0

>が、わざわざ、その仕組みが必要でしょうか?



私の書き込みに対するものだと思いますが、必要かどうかはわからなくても、もう少し情報がほしいです。それが必要か必要でないかは、ご質問者ご自身が決めてくださればよいです。

確かに、通信で一定期間に入ってくるものなら、タイマー機能で監視させれば良いかもしれませんが、不定期で入ってくるものに、常時監視させる方法としてはあまり関心しません。

それに、思ったようなイベントが発生しているかは、分からないです。手作業で入れるなら、話は簡単ですが、そうでない場合は、Change イベントでは、引っかからないこともあったような記憶があります。

私は、そんなに詳しい人間ではないので、もう少し詳しいことを確認したほうが良いと思ってお聞きしたまでです。

今の時点では、ご質問者の望むようなものには、直接結びつかないような気がしています。

これだけの回答で解決すると思っていらっしゃるのなら、それはそれでよいのですが。

この回答への補足

タイマー機能での監視の話ですが、以前の書き込みにそのような事が書いてあったので、使えるかと思っていたんですが、その内容を見る限りでは私の望んでいるものではありませんでした。

先ほどの書き込みにもお書きしましたが、できれば、バーコードリーダーにてバーコードを読み込ませる動作=コマンドボタンをクリックする動作 と言う使い方をしたいんです。

分かりにくい部分が多いかと思いますが、その際は再度補足します。どうか、よろしくお願いします。

補足日時:2006/08/24 21:16
    • good
    • 0

まあ、タイマー監視すれば、当該セルに変更があったか否かは判るとは思います。


が、わざわざ、その仕組みが必要でしょうか?
1でイベントは発生していますので、そこで2、3を一気に処理すれば事足りると思いますが・・・。
    • good
    • 0

こんにちは。



ご質問は、とても興味があります。

>セルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのです

私の思っているのと同じであれば、おそらく出来ると思います。
同じような経験が2度ありますが、私は、ハードがさっぱり分かりません。

>具体的には、
> 1、バーコードリーダーで数値をセルに入力
> 2、その数値に対応する名前をvlookup関数にて表示
> 3、その名前が入力された時点でマクロが自動的に実行

もう少し、詳しく教えください。
バーコードリーダーで数値をセルに入れるのは、どのようにしているのですか?
通信の手段を教えてください。どのように入ってくるのですか?

その名前が入力された時点でマクロが自動的に「何を」実行すればよいのですか?
ある程度の内容は教えてください。

イベント・ドリブン型だと、たぶん、イベントを感知しないのではないかと思います。

私は、掲示板では、ハード系から情報を入れて加工するマクロは提供したことがありますが、最後まで、その仕組みを良く分かりませんでした。うまくいったそうです。

その時の通信手段は、DDEでした。今のOfficeは、OLEが中心ですが、未だに、そういう方式で、Excelにデータを入れているとのことです。

なお、VlookUp は、必要ないような気がします。あればあったで、そこから、イベントを取れます。

この回答への補足

こんにちは。先日は、「ユーザーフォームに現在の時間を入れる」事に関してお世話になりました、ありがとうございます。

>バーコードリーダーで数値をセルに入れるのは、どのようにしているのですか?
>通信の手段を教えてください。
 これは、何桁かの数値に対応してあるバーコードをあらかじめ用意して、それに読み込ませるとセルにその数値が出てくるというものです。
通信手段は、USB端子につなげるだけでできるものです。

>その名前が入力された時点でマクロが自動的に「何を」実行すればよいのですか?
>ある程度の内容は教えてください。
 回答になるかどうかは分かりませんが、ユーザーフォームのコマンドボタンをクリックすることとまったく同じ事をしたいんです。具体的には、バーコードの番号に対応したシートに移動し、そのシートに書かれている日にちに現在の時間を打ち込みたいんです。(タイムカードをエクセルで行いたいんです)
 コマンドボタンでは、納得のいくものができたんですが、バーコードリーダーでの対応がまったく分からないんです。

 まだまだ、初心者な事もあって、十分に説明できていない部分もあるのではないかと思うので、もし、分かりにくい部分がありましたら、再度補足しますので、よろしくお願いします。

補足日時:2006/08/24 13:11
    • good
    • 0

仮にその対象セルがC3だとすると、以下のようなマクロを「そのシートのシートモジュール」に記述すればよいです。

これはシートのデータが変更されたというイベントによって起動されます。(だから1.、2.の時点でも起動されますので、変更セルのアドレスをIf文で聞いています)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then
'処理
End If
End Sub

この回答への補足

返信をありがとうございます。
一度試してみて、うまくいったと思ったんですが、その後はどうやってもうまくいかなかったです。
理由もぜんぜん分かりません・・・

補足日時:2006/08/24 13:54
    • good
    • 1

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

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


おすすめ情報