以下のような表があります。
表の上の登録フォームに値を入力して「登録」ボタンを押すことで、表の先頭行(6行目)に挿入される仕組みをノーコードで実現していきます。
ノーコードで作成するために、こちらでは「マクロの記録」を活用します。
マクロの記録は、[開発]タブの中の[マクロの記録]から行えます。
「マクロの記録」とは、記録を開始してからの操作内容が自動で記録され、自動でVBA(マクロを開発するためのプログラム)を作成する機能になります。
無駄な操作を行うと、その内容まで記録されてしまうため、結果的に処理が重くなったり予期せぬエラーに繋がり兼ねます。
そのため、マクロの記録を開始する際は、予め記録する手順を確認してから行うと良いです。
また、記録された内容を放置すると機能がブラックボックス化(仕組みが分からない状態)します。
そうなると、正しく処理されるという保証がなくなります。
たまたま上手く実行出来ているけど、ある日を境に正しく実行できなくなるということが起こりやすいです。
これは、最近話題のChatGPTにVBAを書かせることに関しても同様です。
内容を理解せずに運用するということは、急に業務が回らなくなるリスクがあるということになります。
そのため、今回の内容に関しては、実質ノーコードで作成しますが、作成されたプログラムの内容についても振り返りたいと思います。
・記録する手順を確認する
まずは、記録する手順を確認します。
登録フォームに値が入力されている前提で、どのようにしたら、先頭行にデータが挿入されるかと考えます。
今回は、次のような手順を行います。
①登録フォーム全体を選択し、コピー(Ctrl+C)する
②表の1行目を選択し、右クリックのメニューから[コピーしたセルの挿入]を選択する
③次の画面で[下方向にシフト]を選択し、[OK]で確定する
④再度、登録フォーム全体を選択し、値を削除(Delete)する
⑤登録フォームの日付の項目を選択する
この手順ならば、登録フォームの入力値に関わらず、常に対応ができるかと思います。
最後に、登録フォームの日付の項目を選択した理由は、次のデータの入力へと誘導するためです。
・マクロの記録を行う
[開発]タブの中の[マクロの記録]を選択します。
以下の画面にて、開発するマクロの名前(こちらでは「登録」)を入力し、[OK]で確定します。
次に、先ほどの①~⑤の手順を無駄な操作なく行います。
※無駄な操作を行うと、処理が正しく記録されなくなります。
手順が完了しましたら、[開発]タブの中の[記録終了]を選択します。
以上で、マクロが自動で作成されます。
・記録したマクロを確認する
記録したマクロは、[開発]タブの中の[マクロ]を選択することで、確認できます。
以下の画面から記録したマクロ名(こちらでは「登録」)を選択して[実行]を選択すると、記録した処理を実行することができます。
また、[編集]を選択すると、記録されたVBA(プログラム言語)の内容を確認することができます。
→VBAの内容についての解説と改善方法については、最後に解説します。
[実行]を選択し、記録した内容が正しく実行できることを確認します。
また、[編集]を選択して確認できるプログラムは以下になります。
※「Option Explicit」は設定によっては表示されません。
ただ、このプログラムには無駄な処理があります。
この無駄な処理によって、実行時に画面がパカパカするかと思います。
後から無駄な処理については解説するため、一度のこのままで実行ボタンを作成していきます。
・記録したマクロをボタンに割り当てる
記録したマクロは、好みの図形や画像、ボタンに割り当てることができます。
割り当てることで、その図形や画像、ボタンを選択するだけで、処理を実行することができるようになります。
ボタンを作成するには、[開発]タブの中の[挿入]にある[ボタン]を選択します。
※フォームコントロール内のボタンを選択してください。
選択後は、通常の図形と同じようにボタンを作成することができます。
作成後に、[マクロの登録]という画面が表示されるため、記録したマクロ名(こちらでは「登録」)を選択します。
ボタンの名前に関しては、好みの名前を設定します。
※ボタンを作成後に選択すると、処理が実行されてしまいます。そのため、作成後のボタンを編集する場合は、Ctrlキーを押しながら選択します。
これで機能を開発することができました。
・記録したマクロを改善する
記録したマクロの内容を細かく確認し、画面のパカパカに関しても改善していきます。
こちらのプログラムでは、「Sub」から始まり、次に登場する「End Sub」までの処理が、上から順番に行われます。
この中の「○○.Select」というのは、該当する要素を選択するという処理になります。
「Range(“B3:D3”).Select」の場合は、セルB3からD3を選択するという処理です。
また、この中に「Selection」というものがあります。
これは、その時点で選択しているものに対して処理を行うというものです。
「Selection.Copy」の場合は、その前の行でセルB3からD3が選択されているため、セルB3からD3をコピーするという処理です。
「Selection.Insert Shift:=xlDown」の場合は、その前の行でセルB6が選択されているため、セルB6を基準に下方向にコピーしたセルを挿入するという処理になります。
最後の「Selection.ClearContents」は、その前の前の行でセルB3からD3が選択されているため、セルB3からD3の値を削除するという処理になります。
「Application.CutCopyMode = False」は、コピーモードを解除するという処理になります。
この中の無駄な処理は、以下の2つになります。
・毎回セルを選択する必要がない → 画面がパカパカする原因に繋がる
・コピーモードの解除に関しては、セルの値を削除すると同時に勝手に解除されるため、記述する必要がない
この2点を改善したコードが以下になります。
最後の登録フォームの先頭を選択する処理に関しては「Select」を残していますが、それ以外に関しては全て修正しました。
実際は、これだけで同じ処理を実現することができます。
また、この処理の中には、毎回セルを選択する処理がないため、画面がパカパカしません。
こちらで使用したファイルは、以下にて配布します。
というような感じで、「マクロの記録」は便利な機能ではありますが、無駄が多いということも分かったかと思います。
AIも発達してきたため、より誰もがプログラムを開発しやすい時代にはなってきましたが、最低限の知識は今後も必要になることが考えられます。
「マクロの記録」の活用を機に、プログラムを学習してみるのも、良いかと思います。