• ベストアンサー

エクセルでマクロを自動的に実行

表題の通りなんですが、エクセルで、あるセルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのですが、そういったことってできるのでしょうか。 具体的には、  1、バーコードリーダーで数値をセルに入力  2、その数値に対応する名前をvlookup関数にて表示  3、その名前が入力された時点でマクロが自動的に実行 と言うものです。  3の部分がよく分からずに困っています。できるかどうか分かりませんが、もしできるようであるならその方法を教えていただければありがたいです。どうか、よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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 の件については、修正されておりません。

atom002
質問者

お礼

返信をありがとうございます。 また、こちらからの返信が遅れてしまい申し訳ありません。 試してみたんですが、なぜかは分かりませんが、マクロが実行されませんでした。 シートの方に貼り付けて試したんですが、数値を入れてもうまくいきませんでした。 少し、私自身が簡単に考えすぎだったのかもしれません。 正直、全く分からないレベルの話になってきていて、そのままコピー・ペーストで試して分からないという事で、またコードをお願いすると言う繰り返しで、かなり私自身が甘え過ぎている気がして、大変申し訳なく思っております。 とりあえず、今回の自動でマクロを実行するという事に関しては、目的が達成されているので、逆に途中で終了するのもどうかとは思いますが、一回閉めさせてもらいたいと思います。 ひょっとしたら、また再度お聞きする事があるかもしれないですし、またお世話になることがあるかもしれません。その時はどうか、よろしくお願いします。 今回は、本当にありがとうございました。

その他の回答 (14)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>が、わざわざ、その仕組みが必要でしょうか? 私の書き込みに対するものだと思いますが、必要かどうかはわからなくても、もう少し情報がほしいです。それが必要か必要でないかは、ご質問者ご自身が決めてくださればよいです。 確かに、通信で一定期間に入ってくるものなら、タイマー機能で監視させれば良いかもしれませんが、不定期で入ってくるものに、常時監視させる方法としてはあまり関心しません。 それに、思ったようなイベントが発生しているかは、分からないです。手作業で入れるなら、話は簡単ですが、そうでない場合は、Change イベントでは、引っかからないこともあったような記憶があります。 私は、そんなに詳しい人間ではないので、もう少し詳しいことを確認したほうが良いと思ってお聞きしたまでです。 今の時点では、ご質問者の望むようなものには、直接結びつかないような気がしています。 これだけの回答で解決すると思っていらっしゃるのなら、それはそれでよいのですが。

atom002
質問者

補足

タイマー機能での監視の話ですが、以前の書き込みにそのような事が書いてあったので、使えるかと思っていたんですが、その内容を見る限りでは私の望んでいるものではありませんでした。 先ほどの書き込みにもお書きしましたが、できれば、バーコードリーダーにてバーコードを読み込ませる動作=コマンドボタンをクリックする動作 と言う使い方をしたいんです。 分かりにくい部分が多いかと思いますが、その際は再度補足します。どうか、よろしくお願いします。

noname#22222
noname#22222
回答No.3

まあ、タイマー監視すれば、当該セルに変更があったか否かは判るとは思います。 が、わざわざ、その仕組みが必要でしょうか? 1でイベントは発生していますので、そこで2、3を一気に処理すれば事足りると思いますが・・・。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ご質問は、とても興味があります。 >セルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのです 私の思っているのと同じであれば、おそらく出来ると思います。 同じような経験が2度ありますが、私は、ハードがさっぱり分かりません。 >具体的には、 > 1、バーコードリーダーで数値をセルに入力 > 2、その数値に対応する名前をvlookup関数にて表示 > 3、その名前が入力された時点でマクロが自動的に実行 もう少し、詳しく教えください。 バーコードリーダーで数値をセルに入れるのは、どのようにしているのですか? 通信の手段を教えてください。どのように入ってくるのですか? その名前が入力された時点でマクロが自動的に「何を」実行すればよいのですか? ある程度の内容は教えてください。 イベント・ドリブン型だと、たぶん、イベントを感知しないのではないかと思います。 私は、掲示板では、ハード系から情報を入れて加工するマクロは提供したことがありますが、最後まで、その仕組みを良く分かりませんでした。うまくいったそうです。 その時の通信手段は、DDEでした。今のOfficeは、OLEが中心ですが、未だに、そういう方式で、Excelにデータを入れているとのことです。 なお、VlookUp は、必要ないような気がします。あればあったで、そこから、イベントを取れます。

atom002
質問者

補足

こんにちは。先日は、「ユーザーフォームに現在の時間を入れる」事に関してお世話になりました、ありがとうございます。 >バーコードリーダーで数値をセルに入れるのは、どのようにしているのですか? >通信の手段を教えてください。  これは、何桁かの数値に対応してあるバーコードをあらかじめ用意して、それに読み込ませるとセルにその数値が出てくるというものです。 通信手段は、USB端子につなげるだけでできるものです。 >その名前が入力された時点でマクロが自動的に「何を」実行すればよいのですか? >ある程度の内容は教えてください。  回答になるかどうかは分かりませんが、ユーザーフォームのコマンドボタンをクリックすることとまったく同じ事をしたいんです。具体的には、バーコードの番号に対応したシートに移動し、そのシートに書かれている日にちに現在の時間を打ち込みたいんです。(タイムカードをエクセルで行いたいんです)  コマンドボタンでは、納得のいくものができたんですが、バーコードリーダーでの対応がまったく分からないんです。  まだまだ、初心者な事もあって、十分に説明できていない部分もあるのではないかと思うので、もし、分かりにくい部分がありましたら、再度補足しますので、よろしくお願いします。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

仮にその対象セルがC3だとすると、以下のようなマクロを「そのシートのシートモジュール」に記述すればよいです。これはシートのデータが変更されたというイベントによって起動されます。(だから1.、2.の時点でも起動されますので、変更セルのアドレスをIf文で聞いています) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$3" Then '処理 End If End Sub

atom002
質問者

補足

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

関連するQ&A

専門家に質問してみよう