GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

固定→可変のコツで、らくらくマクロ作りしましょう!

2020-06-03 19:24:14 | マクロ作成のコツ
これぞ「マクロ作りの肝!」という話をしてみたいと
思います。


以前にも書きましたが、「マクロ」っていうのは
主にCAD(設計図を描く為のソフト)の世界で発展を
遂げてきたものであります。

読者の皆さんは、Excelの操作が大変だ!面倒だ!だから
マクロの勉強でもしてみるか、ということで、このような
メルマガを読んでくれているのだろうと思いますが、、

こう言っては何ですが、設計図を描くCADソフトの大変さ
と言ったら到底、Excel操作の比ではありません!

Excelが誕生するずっと以前から、そうしたCADの操作に
苦労してきた人達の間で、広く使われて広まったと言うのが
マクロ(操作の自動化)になるわけです。

で、よくExcelVBAの世界では、「マクロの記録」をただの
辞書だという認識で使ってる人が多くおられますが、、

それだと、辞書持ち歩いての学校英語の勉強と一緒なので、
ただ辛いだけですね。

それ故に、Excelの世界ではどうにもマクロが広まらない、
Excelではマクロの利用者極めて少ない現状になってる、
その原因なのだろうと思われます。


話戻しますが、

それで「マクロの記録」(CADで言う所のコマンド記録)
をうまく組み合わせて便利に使う方法いいますのが、Excel
の誕生以前から皆がやってきたマクロ作りの作法です。

その為の(マクロの記録をただの辞書ではなくー、便利な
活きた道具にする為の)肝となりますのが、以下にお話し
する

記録したコードの「固定部分の可変化」というものです。

今回お配りする構文集の最新版には、その様な、すなわち
「固定の部分」を「固定じゃない様に変える」その書き方
集というのをまとめて新たに掲載しましたので、これは

「固定→可変」の方法をまとめた構文集(コード集)です。

つまり、これが「マクロの記録」をフル活用してらくらく
マクロ作りをする為の肝となる、Excelが生まれるずっと前
の昔から、皆がやってきた正しいマクロの作り方の方法
になります。

で、「固定→可変」とは何か?と言うことなんですが、

この最新版にどんなものを載せのたかを、具体的に詳しく
以下に説明します。

まず、たとえば、ループを回す際の回数の場合です。

 For i = 1 To 20

これは、20回の固定です。ループは1~20回、回ります。

 For i = 1 To 100

これも100回の固定です。同様にループは100回回ります。

で、データ数がその都度変わるという場合には、これを

 For i = 1 To 100
↓
 n = Cells(Rows.Count, "B").End(xlUp).Row
 For i = 1 To n

この様に、いつもここのレッスンでやっているこの
構文(指定した列のデータのある最後の行までループを
回す処理の意味。)

これが、行方向に関するループ処理での「固定→可変」
のコードの基本的な直し方になりますので、

これで、データ数が毎回変わるシートを処理する際にも、
プログラムの修正は一切不要、そのまま(別のデータで)
データ処理が自動化できるようになります。


また、シートが固定名の場合には、たとえば、データの
並べ替え(ソート)をマクロの記録で記録した場合に、

 ActiveWorkbook.Worksheets("Sheet1").Sort・・・

といったコードが記録されてきますが、

ここに出てくるシート名の部分の"Sheet1"、
これは固定の名称となっていますので、このままだと
"Sheet1"上のデータしかソートはできないマクロです。

ですから、
ここも「固定→可変」にちょっと以下の修正をして

 ActiveWorkbook.Worksheets("Sheet1").Sort
↓
 ActiveWorkbook.ActiveSheet.Sort

(Worksheets("Sheet1")をActiveSheetに直すだけ)

数か所ある"Sheet1"の部分を探してこう直してやれば、
いま開いてるシートのデータに対してのソート処理を自動化
できるマクロに簡単に変身させることができます。

これが、シート名の「可変方法」の一つです。

でもう一つ、シートの「可変方法」として背番号を使います。

エクセルのBookに存在する各シートには、(名称に関わらず)
左から順番に内部的な番号が割り振られています。
一番左側にあるシートがSheets(1)です。

この番号を使って、たとえば

 ActiveWorkbook.Worksheets("Sheet1").Sort・・・
↓
 Sheets(i).Sort・・・

(ActiveWorkbook.Worksheets("Sheet1")をSheets(i)に直すだけ)

これで、iで回すループの中で、全てのシートを次々とソート
していく為のマクロが容易に組めます。これもシート名の
「可変化」です。

ちなみに、シートの数は Sheets.Count で取得できますので、
下記の使用例(構文集に掲載)を参考に、これで「シート数
の可変」に対応したマクロも容易に組むことが出来る思います。

使用例)
Sub Macro1()
    n = Sheets.Count
    For i = 1 To n
        Sheets(i).Select
        MsgBox ActiveSheet.Name
    Next i
End Sub

こうすると(シートの背番号を使うことで)、沢山のシートで
同じ処理をしたいと言った場合にも、マクロで全シートの一発
処理が可能となりますから、同様なデータのシートが沢山ある
Bookを扱っている人には、これは大変便利ですね。

初心者の方は、シートを複数作って(適当にシート名変更して
みてー)、ぜひこれ試してみてください。


以上のデータ数やシート数の「固定→可変」の例の他にも、

・Book数の可変のやり方だったり、
・図形やグラフについての可変だったり、

も、色々構文を載せています。


コメント    この記事についてブログを書く
« 初級マクロ検定の結果発表 | トップ | VBAでよくある勘違い »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

マクロ作成のコツ」カテゴリの最新記事