EXCEL VBA シート内の特定のセルに値が入力された際に処理を実行するプログラム

このQ&Aのポイント
  • EXCEL VBAで作成するシート内の特定のセルに値が入力された際に処理を実行するプログラムについて解説します。
  • このプログラムでは、EXCELシートに計測データを取り込み、設定値と異なるデータが入力された場合にトリガーを出し、他のアプリケーションを操作することができます。
  • 具体的な実装方法やサンプルコードについては、以下のリンク先で詳しく説明しています。
回答を見る
  • ベストアンサー

EXCEL VBA シート内の特定のセルに値が入…

EXCEL VBA シート内の特定のセルに値が入力された際に処理を実行するプログラム EXCELシート内の特定のセルに値が入力された際に処理を実行するプログラムをEXCEL VBAで作成したいと考えています。 EXCELに計測データを取込み、このデータが設定値以外の場合のみ、トリガーを出す様なイメージで使いたいと思います。 どの様に考えれば良いでしょうか?サンプル等ありましたら紹介ください。 上記質問の”トリガー”について補足します。 あるセルに値が入力されたら、マクロを実行するという風にしたいという意味です。 単純にマクロ実行を手動で行うのでは無く、ある値が判定値以外の場合に他アプリケーションを操作したいという意味です。。

noname#230358
noname#230358
  • 開発
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
noname#230359
noname#230359
回答No.3

Private Sub Worksheet_Change(ByVal Target As Range) A = 0 '---変数A初期化 If Target.Address = "$A$1" Then '---セルA1の値が変更されたら A = Range("A1") '---変数AにセルA1の値を代入 If A < 10 Then '---変数Aの値が10より小さかったら Range("B1") = A '---セルB1に値を代入 Else  '---それ以外は変数Aに0を代入(初期化) A = 0 End If End If If Target.Address = "$B$1" Then   '---セルB1の値が変更されたら Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE", 3 '---プログラム(例はIE)を起動(最大化表示モード) End If End Sub 少々回りくどいですが、こんな感じでできました。 注釈に書いてありますが、考え方は ?セルA1の変更を受けて変数AにセルA1の値を代入 ?変数Aの値を条件分岐で条件が適った場合セルB1にAの値を代入 ?セルB1の変更を受けてプログラムを立ち上げる です。

noname#230358
質問者

お礼

ありがとうございました。 説明もわかりやすく、参考になりました。

その他の回答 (2)

noname#230359
noname#230359
回答No.2

トリガーってのがよくわからないのですが、 設定値以外の場合にのみその行を強調する手段なら VBAを使わなくとも関数と条件付き書式でできますが・・・。

noname#230358
質問者

補足

”トリガー”について補足します。 あるセルに値が入力されたら、マクロを実行するという風にしたいという意味です。 単純にマクロ実行を手動で行うのでは無く、ある値が判定値以外の場合に他アプリケーションを操作することをしたいと考えています。

noname#230359
noname#230359
回答No.1

sheet1にあるイベント Private Sub Worksheet_Change(ByVal Target As Range) ' ' ' 'Target.Column 横 'Target.Row   縦 End Sub レベルが低そうなのでスルーされてしまうとわ思っていた...orz 回答3のように 保存するなら public で 内部変数にした方がいいよ ただ初期化を ワークブックに開いた時などにしておかないといけないが Private Sub Workbook_Open() End Sub 参考 Private Sub Worksheet_Change(ByVal Target As Range) 'A1以外のところが変更されたら 抜ける If Target.Address <> "$A$1" Then Exit Sub 'A1 の 値が 100以上なら IEを起動 If Range("A1") > 100 Then Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE", 3 End If End Sub A1の値を100以上にするとIEが起動するプログラム ただし、文字列のエラー処理を入れてないので 間違った値(全角文字)を入れても IEが立ち上がる ↑ コーディングが大変なので組んでないが まあ、ちゃんとVBを理解してれば このような質問の仕方にはならないけどね 基本から精進してください

noname#230358
質問者

お礼

アドバイスありがとうございます。 質問の説明不足もありもうしわけありません。

関連するQ&A

  • エクセル VBA 指定色セルを値化(全シート対象)

    エクセル2010を使用しています。 VBA(マクロ)で以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 Book内の全Sheetを対象として、 特定の色(RPG:180,198,231)のセルを全て値化したいです。 他色のセルにも式が入っているのですが、それ等は崩したくないので 個々に値化してゆくしかないのですが、 指定色(RPG:180,198,231)のセル位置がまちまちな上に多数あり、 その上シートもかなりな数あるため、自動化できたらと考えています。 ※値化するセルに入っている式は、簡単なリンク式です。 尚、必要の無い(表外)セルは無色で設定してあります。 また、その表のフチ(?)を「#」で囲っているため、 これをKyeに「次の行へ移動」や「次のSheetへ移動」等が設定できるでしょうか? 1つづつのコードは、検索すれば(参考にできるものが)出てくるものもありますが、 それらを どう組み合わせればうまく作動するのか または、処理条件を どう設定すれば良いのかが、よくわかっていません。 知識不足で申し訳ありません! ご指導いただけますと幸いです。 よろしくお願いします!!

  • エクセル:シート1のセルA1が0でなければ任意のマクロを実行したい

    エクセルマクロ(VBA)初心者です。よろしくお願いします。 (1)エクセルのsheet1のセルA1の値が”0(ゼロ)”でなければ、そのシート上で任意のマクロを実行し、ゼロであれば実行せずにsheet2へとぶ (2)同じようにsheet2のセルA1がゼロでなければ実効し、ゼロでなければsheet3へとぶ・・・の繰り返し(sheet50まであります。) このようなマクロ(標準モジュール)の書き方を教えてください。 よろしくお願いいたします。

  • VBAでエクセルの特定のセルの値に置換

    Wordの文章の中に”値1”や”値2”などと仮の値を入れておきます。 エクセルの特定のセルに具体的な値を入力します。 WordからVBAを実行すると、対象となるexcelファイルを選択する画面となり、選択するとそのエクセルファイル中の具体的な値と”値1”や”値2”などと仮の値を置換するようなコードは作れるのでしょうか? 差し込み印刷の様な感じですが、毎回excelファイルを選択するのとできるwordの書類がひとつだけというところで異なる感じです。 よろしくお願いします。

  • EXCELでワークシートを検索して値を返したい。

    こんばんは。 いろいろ調べてみたのですが、わからなかったので質問させていただきます。 EXCELで「111」「222」「333」「444」「555」という五つのワークシート名を持つブックがあります。 「111」のシートのセル"A1"に,"222"と入力すると、隣のセル"A2"にシート「222」の特定のセルの値(例えばC20のセルの値)を返し、セル"A1"に「555」と入力するとセル"A2"にシート「555」の特定のセルの値を返すといったものを作るには、どうしたらいいんでしょうか? できれば関数だけで作りたいのですが、もしむりならマクロではどういうコードになるのでしょうか? よろしくお願いします。

  • Excel VBA セルの値を変更後にVBA作動

    Excel VBAを活用して、特定のセルの値が変更されたときに、VBA処理を発動させることになりました。 処理といたしましては、C列(3列目)の4行目以下の空白セルに数値を入力するか、セルに入力されている数値を変更した場合にVBAを発動させたいです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 4 Then MsgBox "セルの値が更新されました" End If End Sub 上記のコードを実行してみたところ、3列目(C列)の4行目を選択した段階でVBAが作動してしまいます。 セルの値変更後に作動するようにするには、どう修正すればよろしいでしょうか?

  • VBA セルの値を別セルにコピーするには

    VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

  • EXCEL VBAで複数シート内のセルをまとめて表を作成

    EXCELマクロ(VBA)を教えてください。 なやんでいることは、 目的:シート1からシート5までの表の値をシート6に一覧表を作成させる。 ・シート1からシート5まで シート内の表からセル値をコピーしてマクロで(ボタンか何かで)シート6にシート1からシート5のセル値を貼り付けていくような動作をさせられるようなプログラムをつくりたいです。    表(一覧)を作成させたいので わかる方プログラミングを教えてください。よろしくお願いします。

  • Excel VBAでシート間でセルの値がコピペできない

    今日は、Excel VBAでシート間でセルの値を単純に飛ばすだけなのですが何故か隣のセルではうまくいくのにあるセル だけには、どうしてもその値が入っていきません。 勿論セル番地は間違っていません。 何か原因があるのでしょうか。 皆さん、同じような経験をされた方原因を教えて下さい

  • エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされて

    エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされてしまう VBAマクロ初心者です。 エクセルVBAマクロで、以下の様なプログラムを作成し計算させていますが、 一度入力した値がテキストポックスに残ってしまい、なんとかならないかなと 思っています。 (1)複数シートにそれぞれコマンドボタンを配置し、クリックすると同じユーザー フォームが立ち上がるようになっています。 (2)そのユーザーフォーム内に、テキストボックスが複数あり、それぞれ値を入力 して計算スタートさせると、ワークシートの1行目から数千行目まで計算して 各行に計算結果を表示します。 (計算は、既に各行に入力済みのデータとこのテキストボックスの値を元に算出されます) (3)次に、別のシートでコマンドボタンをクリックし、ユーザーフォームを立ち上げると、 前のシートで入力した値がそのまま各テキストボックスに入ってしまいます。 (これは、必ず起こる訳ではなく、時々起こるのですが、起こる場合は、コマンドボタン をクリックしてからユーザーフォームが立ち上がるまでの時間が若干短い感じがします) ※一度、上記の計算をさせるとテキストボックスの値がそのシートの特定のセルに入り、 次回ユーザーフォームを立ち上げた際に、テキストボックスに入るようになっています。 (Private Sub UserForm Initialize を使っています) パソコンの構造を、私はよく知らないのですが、おそらく、一度テキストボックスに値 を入力して計算させると、どこかのメモリにそれが残っていて、次にユーザーフォーム を立ち上げた際にそれが入ってしまうのかな、と思っています。 (ただし、もし前の値が入ってしまったとしても、一度そのユーザーフォームを消して から、再度立ち上げると、正常な値(そのシートの特定のセルを参照)が必ず入ります) 何か、プログラムにより、このメモリ?を消す?、あるいはうまく解決する方法など 考えられませんでしょうか? もし、詳しい方がおられましたら、御教示いただけませんでしょうか。 よろしくお願いいたします。

  • VBAで特定のシートを複数選択する方法

    エクセルのマクロで複数のシートから特定の文字のみが入力されているシートを全て選択したいのですが、どのようにプログラムすればよいのでしょうか? 最近勉強し始めたばかりでVBAについての知識が乏しく、完全に行き詰ってしまいました。