これで楽に!?VBA活用こんにちは、Ryoです。VBAでのコード実行にボタン等を使うことが多いのですが、用途によっては自動的に実行して欲しいこともありますよね。今回はセルの内容が変更された時(入力された時)に処理が実行されるChangeイベントについてサンプルを交えて書いていこうと思います。サンプルとしては「対象列に特定文字が入力されたらメッセージ表示」、その応用として「特定文字が入力⇒対象行をコピー⇒別Sheetへ貼付け」の二つになります。1.サンプルその1◆対象列に特定の文字が入力されたらメッセージボックスを表示サンプル用として以下画像の表を準備しています。この判定欄に「NG」という文字が入力されたらメッセージボックスを表示するものです。Subセルの内容が変更されたときに処理を行うにはChangeイベントを使用します。Subセルに対してなので当然ながら「シートモジュール」に記述します。引数Targetはセルやセル範囲を表していますので、本サンプルではB列に入力された文字列をTarget.Valueで取得して「NG」かどうか判定しています。その際に大文字や小文字、全角/半角で判定が変わると厄介なのでStrConvとLCaseで半角小文字に統一しています。他には範囲を指定するとエラーになるので、範囲選択した際の返り値に含まれる”:”を確認する処理も合わせて実施することで余計なエラーを防ぎます。後はB列で且つ「NG」であればメッセージボックスを表示する処理をしています。SelectionChangeイベントの記事でも書きましたが、便利なようでやや面倒ですよね(笑)2.サンプルその2使用する票はサンプル1と同じなのですが、「判定」欄に「NG」が入力されると、対象行をコピーして、別シート(サンプルでは”Sheet3”)「◆NG判定された品番一覧」の表に順次自動的に貼付けを実行するものです。先程の表に上からNG⇒OK⇒NGを入力します。画面は固定化して処理するので変わりませんが、別Sheetにはこのように貼り付けられていきます。Sub対象とするB列に「NG」が入力されたことを判定するまではサンプル1と同様ですが、その後の処理として「行/列番号」を取得しコピーしたい範囲を指定します。3)).Copy次に貼り付けるSheet3の表見出しにジャンプし、そのSheet3の最終入力行を取得します。ここで大事なのは「Sheet3をアクティブにしているだけでは正確に取得しない」点ですね。1と記述してしまうと元の表がある実行Sheet側で処理されてしまうので、必ず処理対象のSheetを指定します。後は対象セルに対して「値のみ貼り付ける」指定をして実行Sheetをアクティブにし、カットコピーモードを解除すればOKです。Falseこれらのコードを記述することで、別Sheetに人知れずコピーされていきますから特定条件などで別に集計したい場合には参考になればと思います。3.まとめ今回取り上げたChangeイベントも何れ記事にしようと思っていたところ、関連する内容で問合せをいただいたこともあってサンプル交えて書いています。シートモジュールに記述することで自動的に処理できる反面、条件をきっちり指定しないと余計なエラーが出るので面倒な部分もありますが、用途によっては有効ですから機会があればご検討くださいませ!以上、セルに書き込まれた(内容変更)時に処理を実行する方法についてでした!今回の記事が何かの参考になれば幸いです。【VBA】入力モードの設定や入力文字数を制限するVBAのUserForm(ユーザーフォーム)上のTextBox(テキストボックス)を使用する際に、用途によって入力する文字数の制限をしたいことや入力モード(全角/半角英数字など)を設定したいこともあるかと思います。今回はその方法について書いていきます。記事を読む【VBA】ワークシート表示/非表示を切り替えるVBAで処理する都合上、設定用のワークシートを作ることもあるかと思いますが、このシートはユーザーに触れてほしくない部分ですから保護したいですよね。そんな時に使えそうなのがワークシート表示/非表示の切替えですが、指定によってはExcel上の操作から再表示させないことも出来ますので、今回はその方法について書いてみます。記事を読む【VBA】シートコピーの実用例(WorkSheet操作)Excelで仕事をしているとWorkSheetも複数になっていきますが、それを大別すると(例)基準A、B、C_Sheet等になっていて、それぞれの基準とするSheetに複製があったりしますが、そのSheet群最後尾をコピー先としたい場合もあるかと思います。今回はその方法についてサンプルコード含めてご紹介します。記事を読む【VBA】セルに網掛け(パターン)を設定するExcelは標準で多彩な網掛けパターンを持っていますので、用途に応じて使用する機会も多々あるかと思います。この網掛けはVBAでもPatternプロパティ、xlPatternクラス定数を使用することで設定できますので、今回はその内容について書いていきたいと思います。記事を読むVBAで上書き保存時にtmpファイル化して困っている方へ!OSがWin10、Win7で社内LANや同期用のNASクラウドフォルダへVBAで上書き保存処理する際にTMPファイルになって困っていませんか?Excelのセキュリティ設定やLAN通信設定を変えてみても改善しない場合、保存処理を工夫することで対処できるかもしれませんので、その内容について書いていきます。記事を読む【VBA】セルへ数式の入力や取得/編集を行うExcelを日々扱う中で数式を使うことも多いと思いますが、VBAで集計などの処理を行った際に数式も設定したいことや、既に入力されている数式を修正したいこともあるかもしれませんので、今回は数式に関するFormulaプロパティについて簡単なサンプルを交えて書いていきたいと思います。記事を読む【VBA】ユーザーフォームのスピンボタンを活用するVBAで利用する機会の多いUserFormですが、特定の範囲を増減させるインターフェースとしてスピンボタンがあります。クリック操作で値を増減させることが出来るので何かと使用する機会も多いのではないでしょうか。今回はそのスピンボタンの値設定や取得、増減幅設定やボタンを押した際のイベントなどについて書いていきます。記事を読む【VBA】セルサイズをcm(センチメートル)指定するExcelのセルサイズはポイントなのでラベルシートなど規定寸法サイズに合わせた行高さや列幅をVBAで指定する際にcm(センチメートル)で処理したいケースがあるかと思います。ポイントはインチなのでイメージしにくいことがあると思いますから、そのポイントをcmに変換する方法について書いてみようと思います。記事を読むVBAでファイルを移動する方法VBAで処理しているとデータ取り込み完了したファイル等を別フォルダに移動したくなることが多々あるかと思いますので、今回はファイル移動について書いてみたいと思います。Nameを使う場合、MoveとGetFileを使う場合の2通りでサンプルコードを掲載しています。記事を読む【VBA】ウィンドウサイズが変更された時に処理を実行する画面表示などを考慮してウィンドウサイズが変更されないようにしたいケースもあるかと思います。その場合はWindowResizeイベントを使うことでサイズ変更を捉えて処理を行うことが出来ます。今回はWindowResizeイベントとウィンドウの最大化/最小化/通常表示を維持するサンプルについて書いてみたいと思います。※当サイトはロリポップ!のハイスピードプランです。はじめまして!Ryoと申します。中小企業製造メーカー勤務で主に生産技術業務に勤しむ一方、社内PC管理やVBAで業務効率化を図る日々を送っていますので、これまでの経験や実践してきた内容をここで発信していきたいと考えています。困った時の一助になれるようなブログ作りを目指します。「自恃ろぐ」はAmazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。