Excelセミナーレポート
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」という名前を付けたセルの行全体
このように、解決方法はいろいろ考えられます。
マクロを作る上で、やはりある程度の制約は必要です。
列の追加以外でも、シート名の変更、タイトル行のタイトル名の変更、などなど
ユーザに自由を許しすぎてしまうと、あらゆるパターンを想定した
複雑なマクロを書かなくてはいけなくなってしまいます。
セミナーで習ったコードや、検索して調べたコードを
そのまま加工せずに業務で活用できる、ということはほとんどありません。
実務に即して、問題点と一緒に無期限サポートでご相談いただけば
具体的なアドバイスやサンプルコードのご提供が可能です。
「本に書いてあるマクロを実務に活かしきれない」、
「ネットで見たけどどう加工していいのかわからない」
そういうお悩みがあれば、ぜひセミナー受講&無期限サポートのご利用を!