• ベストアンサー

エクセルで特定のセルに入力後エンターを押すとマクロが起動

エクセルで特定のセルに入力後エンターを押すとマクロが起動 エクセルで、ファームで作成したボタンを押すとマクロが起動するように して有ります。 記憶させたマクロの起動にはファームで作成したボタンを右クリックし 「マクロの登録」でモジュールを登録する方法しか知りません。 これを特定のセルにデータを入力後エンターを押して入力値が確定されたら このマクロが起動するようにするにはどうすればいいのでしょうか?

  • gx9wx
  • お礼率95% (440/460)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(1)セルのChangeイベントを使う。 (2)>特定のセルにデータを入力 はTargetという引数でデータが入力されたセルが返される(教えてくれる)から、そのアドレスがA2セルであるか判別して、該当しないときは、イベントの中ですべき処理をスルーさせれば仕舞い。 Googleで「VBA Change イベント」で照会したら記事が沢山です http://www9.plala.or.jp/siouxsie/date06.html シートモジュールにコードを書くこと。 Targetのセル限定は1セル、行・列、セル範囲 http://oshiete.nikkeibp.co.jp/qa2932094.htmlなど 、セル範囲外などのはんつき判別が必要に応じて行われる。 データの変動にはどういうものがあるか良く勉強すること。手入力は良いが、コピー貼り付け、VBAでセルの値変化、DELその他色んなケースがあって私は難しいという感じを持っている。

gx9wx
質問者

お礼

現在正常に稼動しています「印刷ボタンをクリックで起動するマクロ」を セルのChangeイベントに使用したかったのですが マクロ内に、セルの書き換え、コピペ、関数による編集が多数あり うまくいきません。 別の発想で B5セルの値が5ケタ以上になったらマクロを起動にして セルのChangeイベントでCallで前項のマクロを呼び出しで成功しました。 ありがとうございました。

その他の回答 (2)

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.2

>Private Sub Worksheet_Change(ByVal Target As Range) >を利用しますと、 >コンパイルエラーとか >End subを入れてあるのに「End subが必要です」となり >駄目なんです。 >また「初期化ボタン」を押すとセルの値が変わる為なのか >同じく >コンパイルエラーとか >End subを入れてあるのに「End subが必要です」 >となってしまいます。 これは、キチッとプログラムの組立が出来ていないからでしょう。 Sub とEnd Subは、1対1に成らなければいけません。 >Private Sub Worksheet_Change(ByVal Target As Range)では >ループしてしまって駄目なのでしょうか?  マクロの中で、セルを書き換えると、またイベントが発生します。 で、イベントを止めるコマンドを書き込んでおきセルを書き換え、 マクロから抜ける寸前に、戻します。 止める場合、「Application.EnableEvents = False」 イベントの発生を、許可する場合 「Application.EnableEvents = True」を書いておきます。 一寸、一言。 ボタン等を作るのは、「ファーム」ではなく「フォーム」です。 http://www.officepro.jp/excelvbaform/

gx9wx
質問者

お礼

>止める場合、「Application.EnableEvents = False」 >イベントの発生を、許可する場合 >「Application.EnableEvents = True」を書いておきます。 これを組み込みました。 ループとかはしなくなりました。 >コンパイルエラーとか >End subを入れてあるのに「End subが必要です」 >となってしまいます。 も直りましたが、肝心な印刷が開始しません。 >一寸、一言。 >ボタン等を作るのは、「ファーム」ではなく「フォーム」です。 申し訳ありません。 別な発想から、思っていた物が完成しました。 (シート1のセルB5が5ケタ以上なら、「現在、印刷ボタンをクリックすると起動するマクロ」をCall。) ありがとうございました。

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.1

ワークシートのイベントを利用することで、マクロを起動できます。 この場合、セルが変更されたら起動するようにしましょう。 このイベントは、何処のセルが変更されても起動するので、 マクロの中で、「特定のセル」が変更されたかを確かめる必要が有ります。 イベントは、「Worksheet_Change」です。 Help等も参考に 例 Private Sub Worksheet_Change(ByVal Target As Range) End sub

gx9wx
質問者

補足

作成したマクロなんですが以下のようになっています。 シート1=入力画面と表示画面 シート2=マスターデータ シート3=連番印刷の為のデータエリア シート1の B5のセルに英数字を入力しエンターを押して確定すると シート2のC列から同レコードを検出し、 その検出した行のD~G列の値を シート1のD5~D8に値をかえします。 データがあった場合には、シート1のD5~D8に値が表示されています。 シート2にデータが無い場合はシート1のD5~D8には「#N/A」と表示されます。 ここまでは関数なのでマクロではありません。 ここでファームで作成した「印刷ボタン」をクリックします。 ここで登録したマクロが起動します。 シート1のD5に「#N/A」が表示されている場合はメッセージボックスで 「データがありません」と出ます。 メッセージボックスの「OK」をクリックすると、 入力したシート1のB5のデータがDELETEされます。 印刷は実行されません。 D5~D8が「#N/A」以外の場合は印刷が実行されますが シート3の数値を利用した別のマクロで印刷の都度 番号を繰り上げてシート1のセルD9に表示します。 次の印刷時に有効です。印刷ボタンを押すごとにと1番づつ繰り上がります。 印刷ボタンを押すと印刷がされますがと同時に シート1のセルB5がDELETEされます。 結果シート1のD5~D8は「#N/A」が表示されます。D9はクリアされません。 印刷終了後セルの値が変化する事になります。 もう一つファームで作成した「初期化」というボタンがあります。 これをクリックするとマクロが起動して シート1のセルB5がDELETEされます。 よってシート1のセルD5~D8も「#N/A」に値が変わります。 Private Sub Worksheet_Change(ByVal Target As Range) を利用しますと、 コンパイルエラーとか End subを入れてあるのに「End subが必要です」となり 駄目なんです。 また「初期化ボタン」を押すとセルの値が変わる為なのか 同じく コンパイルエラーとか End subを入れてあるのに「End subが必要です」 となってしまいます。 マクロの中にセルの値を変化させる内容が組み込まれていると Private Sub Worksheet_Change(ByVal Target As Range)では ループしてしまって駄目なのでしょうか? 回避策はないのでしょうか?

関連するQ&A

  • エクセルのマクロで入力文字確定(Enter)したら印刷開始し入力文字を

    エクセルのマクロで入力文字確定(Enter)したら印刷開始し入力文字をDeleteする。 エクセルで自分が作成したファイルを開きます。 これにはマクロが入っていて、ファイルを開くと セルのD4がアクティブになるようにして有ります。 (カーソルがD4の所に行って点滅で文字入力待ちの状態) シート保護をしてあり、セルD4だけがロックをはずしてあるので セルD4にしか入力は出来ません。 文字入力をすると当然D4のセルに入力がされるのですが 入力後その文字を確定する為にEnterキーを押します。 そうしたらそのシートの印刷がされる(1部です)ようにで来ますか。 そして印刷終了後、セルD4の文字はDeleteされて またアクティブ(カーソルがD4の所に行って点滅)にして 次の入力を待ちたいです。 (文字入力→Enterの瞬間印刷と同時に文字入力が消えるので  入力者は入力確定を見れなくなりますが → 2秒後にDeleteとか出来ますか?  または、Enterキーを押すと画面に「印刷中です」と表示したあと  セルD4をDeleteとか。)  現在は、 表示-ツールバー-フォームから作成したボタンにマクロを登録してあります。 セルD4に文字を入力しEnterキーで確定後、このボタンを押すと印刷が実行され セルD4の文字がDeleteされてアクティブ(文字入力待ち状態)になります。 このボタンを押すのを省きたいです。 よろしくお願いします。

  • Enterキーでマクロを起動さす。

    Excelの(例)A1のセルに検索値を入力しEnterキーを押すと事前に組まれたマクロが起動する方法を教えて下さい。 又はEnterキーにマクロは設定できませんか?

  • エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい

    エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい。 たとえばセルA1に、1以上の数値が入力されたときに、セルA2に今日の日付を入力させる マクロの記述はどうすれば宜しいでしょうか? 以下の記述で、セルA2に日付は入力させられるのですが、 セルA1に1以上の数値が入力された場合に起動させる方法が分かりません。 Range("A2").Select SendKeys "^(;){ENTER}" ご教授の程、宜しくお願い申し上げます。

  • エクセルでエンターを押すと隣のセルではなく指定したセルに!

    エクセルでエンターを押すとセルが右隣に移動します。 次に入力したいのは4個右のセルなので、エンターキー を4回押しています。 一回エンター押すと指定したセルに飛ばすにはどうし たらいいのか教えて下さい。

  • エクセルマクロ特定のセル

    マクロの勉強したばかりですみませんが、 エクセル2003で、特定のセルが選択されたときにマクロを実行したいのですが、可能でしょうか? どうやればよいか教えていただきたいです。

  • エクセルで Alt+Enter を入力すると新しい

    エクセルで セルを入力状態にせず、Alt+Enter を入力すると新しいファイルが作成されます。 調べてもAlt+Enter はセル内改行としか出てこず、新規作成はCtrl+N のはずです。入力状態にし忘れるたびに新しいファイルが立ち上がってくるのは煩わしいのですが、直し方はありますか?

  • エクセル アクティブ中のセルにマクロ実行

    表題の件について質問させていただきます。 基本的に数字の入っているセルなのですが、たまに数字の前に備考として特定の文字を入力しています。  特定文字例:東京・千葉・埼玉・鈴木・木村・佐藤  入力後の例:東京232・木村50 その特定の文字の入力には、マクロ登録してあるボタンで実行しています。  ActiveCell.FormulaR1C1 = "特定の文字" さて、質問なのですが、上記ではセルを選択しているときにボタンを押すことで特定文字の入力はきるのですが、入力中っていうのかな?カーソルが点滅している最中にはマクロが実行できないのです。 その為、数字の入った後のセルを選択してボタンを押すと、いちど数字の上に特定文字が上書きで入力されて数字が消えてしまいます。 現在は、ボタンを押して特定文字を入力した後に再度数字を入力しています。 どうにか、セルの選択中でもカーソル点滅中でもマクロを動かすことはできないでしょうか。 よろしくお願いいたします。

  • エクセルで数字の入力

    エクセルで、セルに「9092123800037414」と入力して、Enterを押すと、「9.092+15」 と表示され、ツールバー(関数の挿入ボタンの右の部分)には、「9092123800037410」と表示されてしまいます。 最後の0を消して、4に入力しなおしても、Enterを押すと、同じようになります。 セルの書式設定で、数値、の表示にしても最後が0のままの表示になってしまいます。 なぜそうなるのでしょうか?またどうすれば、正しく入力したままの数字が確定されるのでしょうか?

  • excelで セルの移動時にマクロ実行を設定したい。

    エクセルでボタンオブジェクトを作りクリックすると実行するようなマクロのを登録方法はわかるのですが、特定のセルB2に数値を入力してEnterKeyを押した際に実行するようにマクロを登録するにはどうするのでしょう。マクロの編集画面で 最初の行が Sub となっていますが、あそこに何かをいれたらいいのでしょうか?教えてください。よろしくお願いします。

  • 入力しエンターを押すと、同じ値のセルを検索し指すマクロの記述 についてお願いします。

    いつもおせわになっています。 以下のような検索機能を目的としたマクロがあります。 ****************** C列に3桁の数字が並んでいます。 セルA1に3桁の数字を入れて、 CommandButtonをクリックすると、 A1と同じ値が入ったD列のセルに飛びます。(選択します。) ****************** これを、以下のように変えたいのですがどのように記述を変えれば良いのでしょうか。 A1に検索したい数字を入力し、入力を確定するエンターのあと、もう一度エンターを押すと検索する。 (CommandButtonを押すことと同じ機能。) もしくは、 A1セルを選択している時にエンターを押すと、CommandButtonをクリックすることになる。 よろしくお願いします。

専門家に質問してみよう