見出し画像

私が仕事でExcelVBAでコードを書く時にやっていること

私が仕事でExcelVBAでコードを書く時にやっていることをnoteに書いてみたいと思います。

今回の記事は初学者向けに書いていますが、VBAのエディターを開くことやマクロ記録ってどうやるんですか?っていうレベルの方は、本記事よりも、まずはVBAの初期設定について学習することをお勧めします。

  1. VBAでやりたい事、目的をはっきりさせること
    言わずもがな、ゴールが定まっていないと完成する事はできません。Excelで手作業でやっていることを出来るだけマクロ処理させたり、VBAでアプリケーション化させたりすることで作業効率を高めることを是としています。
    作業の内容を順番にノートに書き出して、最初の状態と最後の状態を列挙します。

  2. 分からないメソッドは、マクロ記録の機能を使用して確認する
    以前、Excelの帳票に丸囲み図形を一発で出すマクロのコードを公開しました。このコードを開発する時に、図形の挿入のメソッドを知らなかったので、マクロ記録を使用してメソッドを確認しました。

  3. Excelのリファレンスはマイクロソフトのサイトを閲覧する
    2で確認したメソッドについて、マイクロソフトのリファレンスのサイトを参照して構文や引数について勉強します。

  4. ノートにプログラムの流れを書いてみる
    2で調べたマクロのコードはそのままでは目的に沿ったものではありません。インターネット上に公開されているVBAやマクロのコードを自分が実現したいものに変えていく力が必要になります。

以下に、自分が開発した時の流れを書いてみます。

  1. 目的:帳票に楕円形の図形を一発で挿入すること
    こうして目的を決めると、どんな機能なのか具体的に決めなければならないことが出てきますので、それらも一つずつ洗い出します。
    機能1:図形の形は?→楕円 *塗りつぶしなしの設定
    機能2:図形のサイズ?→デフォルトのセルのサイズで言うと3行1.5列ぐらいの幅にする
    機能3:図形の個数?→1つ
    機能4:挿入位置?→帳票の特定箇所だが、選択されたセルの傍なら汎用性がありそうだ。

  2. マクロ記録を使って丸囲み図形を挿入したときのコードを調べると、このようになりました。*図形の位置は1番左上
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    '
    ActiveSheet.Shapes.AddShape(msoShapeOval, 0, 0, 108, 54).Select
    Selection.ShapeRange.Fill.Visible = msoFalse
    With Selection.ShapeRange.Line
      .Visible = msoTrue
      .ForeColor.ObjectThemeColor = msoThemeColorText1
      .ForeColor.TintAndShade = 0
      .ForeColor.Brightness = 0
      .Transparency = 0
    End With
    End Sub

  3. メソッドはAddShapeであることがわかった。リファレンスによると、msoShapeOvalが楕円の図形を示している。図形の挿入位置は座標で指定し、縦横の幅があるものは、引数で指定するということがわかった。ここで、いくつかの引数は1.の目的に沿って変数で指定すると考えます。
    Selection.ShapeRange.Fill.Visible = msoFalseが塗りつぶしなしの設定
    With句で括られた部分は図形の書式設定のことで1.の洗い出しで考えていなかったことが浮き彫りになりました。楕円図形の書式には、枠線の色や厚み、表示なしの設定などを指定することができるが、枠線はデフォルトの設定でよいので、特に設定しませんでした。
    つまり、最初の2行で図形を挿入し、塗りつぶしなしの設定なので、ここだけでよいのです。リファレンスなどで構文を理解することで、不要なコードを書かないようになると思います。

  4. プログラムの流れは、

    1. 帳票(Excelのファイル)を開く *マクロ外の範疇

    2. 丸で囲みたい文字列のセルを選択した状態 *マクロ外の範疇

    3. クイックアクセスツールバーのショートカットキーをクリック *マクロの呼び出し

    4. 選択セルの位置を同定し、座標データを変数2つで格納する

    5. 図形を挿入する *挿入位置はどこでもよく固定値とする

    6. 図形の書式設定で塗りつぶしなしに設定する

    7. 図形の移動で座標の左端、上端の位置を指定する

といった感じです。実は、6と7はコードの中で悩んだ部分です。最初から目的の位置に挿入できると思ったのですが、中々簡単な話ではなく、調べれば調べるほど分からなくなってしまったので、発想を変えて、まずは図形を挿入し、次に図形を目的の位置に移動させれば良いと考えました。
こういった事はコードをコピペするだけでは出来ない事です。実際に何か取り組むことで、自分が実現したいように変えていく力が養われていくものと思います。

ここまで読んでいただきありがとうございます。皆さんの参考になれば幸いです。


この記事が気に入ったらサポートをしてみませんか?