2021.06.26Excelセミナーレポート 6月26日「ExcelマクロVBAセミナー初級編」開催レポート こんにちは、サブ講師の鹿島です。今日は「ExcelマクロVBAセミナー初級編」の開催でした! すごい改善のセミナーは少人数制なので、講師もサブ講師も総力体制でサポートしています。 今日は、しっかりとプロシージャの意味を読み解いて身に着けようと熱心に講師&サブ講師にご質問をされる受講者さまが、いつも以上に多くいらっしゃったように感じます。 熱心に聞いてくださると、教える方もついつい熱が入りますね! さて、今日ご紹介するご質問は、こちらです。 「列番号を数字で指定していますが、途中で列挿入を行うとどうなりますか?」 ワークシートで関数を使う時、動画のように列挿入をしても、関数の参照セルが動いてくれるので、エラーになったり、意図せぬ結果になってしまったりすることはありません。 それでは、マクロではどうでしょうか?シート上で列の挿入などを行っても、VBE上のプロシージャに書いた列指定は固定値で書いた時のまま、変化することはありません。 それでは、誰かが列の追加を行う可能性がある場合には、どうすればよいでしょうか?やり方はいろいろありますが、以下のような方法が考えられます。 ・列挿入はしない、というルールを作る →アナログですが、運用ルールを作るというのは実は一番重要だったりします。 「列追加は絶対にNG!」としなくても、 「列追加は右端に付け足すのみOK」や、 「(マクロで使用する)○列より右ならOK」とすることでも運用できます。 ・毎回列位置を探す →Match関数などを使って、特定の値(列タイトル)が入っている列を探し、 その列番号を変数に入れて使用する方法です。 Dim c As Long c = WorksheetFunction.Match("ID", Range("1:1"), 0) 列番号を入れる変数cを用意し、Match関数で処理したい列の列番号を格納する ・タイトル行のセルに、名前定義をする →タイトル行に名前の定義をしておけば、セルにつけた名前を使って、 以下のような書き方ができます。 Range("ID") →「ID」という名前を付けたセル Range("ID").Columns → 「ID」という名前を付けたセルの列数(列番号) Range("ID").EntireColumn → 「ID」という名前を付けたセルの行全体 このように、解決方法はいろいろ考えられます。 マクロを作る上で、やはりある程度の制約は必要です。列の追加以外でも、シート名の変更、タイトル行のタイトル名の変更、などなどユーザに自由を許しすぎてしまうと、あらゆるパターンを想定した複雑なマクロを書かなくてはいけなくなってしまいます。 セミナーで習ったコードや、検索して調べたコードをそのまま加工せずに業務で活用できる、ということはほとんどありません。実務に即して、問題点と一緒に無期限サポートでご相談いただけば具体的なアドバイスやサンプルコードのご提供が可能です。「本に書いてあるマクロを実務に活かしきれない」、「ネットで見たけどどう加工していいのかわからない」そういうお悩みがあれば、ぜひセミナー受講&無期限サポートのご利用を! 次回のマクロセミナーは、7月31日!お申込み受付中です。合わせて読みたい [関連記事]