見出し画像

Excel自動化は、何はなくとも「マクロの記録」です!

今日の本題に行く前に、最近頂戴したうまい表現のいくつかを、ご紹介させてもらいます。

~~~~~~~~~~~~~~~~~~~~~~
・マクロは難しく考えないこと。その代わり、
 考え方をよく整理してシンプルなもので組み立てる。
 この考え方だと後でデバッグをするときにも楽。
・世の中の指南本やネットのものはわざわざ難しく
 書いてあってマクロ嫌いを作る。
・見た目難しいことの、何に注目して、他はブラック
 ボックスで良いか、それがわかってくるとマクロを
 毛嫌いする人も減ると思う。
・このやり方は、泥臭いようで間違いない方法。
 すぐに一般化を考えたくなるが、この積み上げて
 行く単純さが大好き。
・可変するポイントを見極める!この一言に尽きる。
・ネットで調べるのではなく、まずマクロの記録で
 解決しよう。とにかく困ったらマクロの記録だ!
~~~~~~~~~~~~~~~~~~~~~~

うーーーん(うなる!)、
うまい!わかる人にはよくわかってる!!
「ざぶとん 3 まい あげとくれ!!!」by 三遊亭円楽

ということで、

本日は上記「うまい表現」を具体化して解説してみますが、
要するに、

これで無駄に費やしている勉強時間やマクロ作成時間の
9割が節約できます!

まず持って、「マクロの記録」の良い所は、

同じデータで同じ操作をやったならば、誰がやっても
書けるプログラムは必ず同じコードになるという点です。

ネットで調べたコードは、人によって皆まちまち
(書き方もレベルもバラバラ)ですから、

それを使って何かをしようとすると必ず新しい書き方
を勉強しなければならないことになります。

人間の書いたコードには皆、個人差があるわけです。

それで、

最近人気の高いPythonというプログラム言語が
ありまして、Excelのデータも手軽に操作ができる
ということもありますので、もう既に名前ぐらいは
ご存じの方も多いかとは思いますが、

アマゾンで「Excel Python」と検索すればたくさん
の本も出ているのが分かります。

(但し、この言語はプロ向けの高級言語の類であります
 から、初心者が手を出すべきものではありません。)

で、

そのPythonという言語が今プログラマーに大人気
になってる理由というのが、AIに強いという点と、
もう一つには、これ「コードに個人差が少ない」
という点です。

Python言語は誰が書いても同じコードになるように、
と開発されてプログラマーの個人差が出にくい
新しいプログラミング言語になっています。

その逆を言えば、

VBAは、(皆さんネットで誰かが書いたコードを
目にすることは多くあるかと思いますが、)
誰が書いても皆書き方がバラバラで、いろいろ違う、

VBAは、書く人によって個人差が大きい言語
(個人差の出まくる)であると言えるわけです。

だから、

私がいつもやってはいけないと、口を酸っぱくして、
17年間、再三に渡って言ってきました様に、

「ネットでサンプルコード探し」

それをやってしまうと、その都度そのコードを書いた
人のクセのある書き方いうのを真似るには、
真似る為の勉強をその都度しないとならないですから、
勉強量ばかりが増えて、ほとんど理はなく終わります。

個人差は、プログラムの保守性を落とし引き継げない
コードの原因にもなります。

プログラムのコードは、皆がバラバラな書き方をする
個人差いうのが一番の大敵なのです。

くわえて、同じ個人であっても、人間は毎回まったく
同じには書けないですから(書く度にちょっとずつは
違ってくるー)、

私のようなプロのやる開発プロジェクトですと、
「コーディング規約」と呼ばれる書き方のルールを
定めている現場は多いです。

なので、

同じ操作は誰がやっても同じコードが書けてしまう
「マクロの記録」(すなわち、機械的に書くコード)
のそれは、素晴らしい点であります。

けれどよく、

ネットやVBA本では、マクロの記録は使っちゃダメ!
なんて発言を目にするかと思います。

私から言わせるとですが、それは恐ろしい勘違いです。
一般のプログラミングとマクロのプログラミングの
違いを知らずに、ごっちゃに考えているだけです。

ちなみに、

一般のプログラミングとは、コンピュータのシステム
を作るためのもので、

マクロのプログラミングとは、コンピュータの操作
を自動化するためのものです。

そもそもの目的が違うわけですが、
上級者になるとVBAでもそれなりのシステムは作れて
しまうので、どうにもごっちゃに考えてしまう人が
多い思います。

「マクロの記録は使っちゃダメ!」は、

マクロの初心者には全く関係のない話に過ぎませんから、
その様なネットの「ノイズ」には決して惑わされること
のないよう、くれぐれもご注意くださいね。

冒頭で紹介したうまい表現の中の

「ネットで調べるのではなく、
 まずマクロの記録で解決しよう。」

それが正しく、ネットの無かった時代の古来からある
マクロ作成の基本であり、根本的な本質です。

たとえばですが、

A1からC12までのセルに罫線を引く操作を
「マクロの記録」で記録してみると、

記録されるプログラムのコードは、

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1:C12").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

    ・
    ・ (長くなるので途中省略します。)
    ・

    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
End Sub

と、このようになりますから、、これを見て

「ああー、何が何だかさっぱりわからん!」
「もういやだ!見たくない。」

となって、

「マクロの記録は使っちゃダメだ!」
「マクロは Sub から手で書くものだ!」

などというバカげた考え(マクロの歴史も本質も
まるで分かっていない・・・)に陥って
しまってる人が多い訳かと思いますが、

違います!!!

違うと言うか、正確には、そう考える人は
「目の付け所」が間違っているのです。

このコードで注目すべき「目の付け所」
と言うのは、最初の

    Range("A1:C12").Select

この 1行 だけです。それでもし、罫線の範囲をE20までに変えたければ、

    Range("A1:C12").Select
↓
    Range("A1:E20").Select

と書き直して、ちょい修正すればよいだけです。
(カッコ内の C12 の部分を E20 に変えるだけ。)

至って簡単ですね。

あともし、

罫線の線種を、やっぱ「太線」に変えたいと思った
なら、

もう一度、その「太線」の線種でのマクロの記録を
やってみれば、

Sub Macro2()
'
' Macro1 Macro
'

'
    Range("A1:E20").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With

    ・
    ・ (長くなるので途中省略します。)
    ・

    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
End Sub

と、こうした長いプログラムがまた記録されます。

けれど、

今度はこのコードの1行ですら修正する必要性は
ありませんから、
これらすべてが「ブラックボックス」でOKです。

その名の通り「ブラックボックス」の中身の
コードはわざわざ理解する必要も、気にする
必要も、見る必要すらまったくありません。

それで、できればこのコードの冒頭部分に、

Sub Macro2()
'
' 2重の罫線を引くマクロ(罫線の範囲は1行目だけ修正してね!)
'

'
    Range("A1:E20").Select '← ココ

    ・
    ・
    ・

End Sub

ってな具合に、

こうした説明のコメント文だけ書き加えて置けば、もう
完成です。ここまで、ものの3分と掛かりませんね。

この様に、「マクロの記録」の賢い使い方いうのを
知っているか?知らないか?

マクロを作るとは、

古(いにしえ)の昔から(私がマクロを始めた30年以上
も前の時代から・・・)ずっと変わらず、これに尽きる
わけです。

(マクロの記録は、VBA誕生の以前には「コマンド記録」
 などと呼ばれていました。)

そのソフト(ここではExcel)を使うユーザーの誰もが、
ちょっとしたマクロであれば手軽に作れなければ、
「マクロ」とは呼べない
のです。

私から言わせると、

「マクロ」=「一般ユーザーが手軽に作れるもの」

それが唯一無二の定義です。

これが、マクロが一般的なプログラミング方法とは
少々(かなり?!)異なる点であります。

ここで勉強しているExcelのマクロの場合、
そのソフトの一般ユーザーがExcelユーザーの皆さん
自身です。

だからこそ、

その辺をよく理解してくれた皆さんからの
冒頭にもあるようなうまい表現(感想やご意見)
へと繋がっていくわけです。

話を戻しますが、

先ほどの罫線を引く例で言うと、ブラックボックス
内の

 Selection.Borders

ってなんだろ?

 .LineStyle = xlContinuous

って意味が知りたい!

ってなっちゃって、ネットで調べたりしてしまうと、
時間かかってしまうだけで何も得るものはないです
から、

離婚の泥沼に踏み込みたくないのであれば、
パートナーのスマホの中身は見ないほうがいいだろう・・
言うのと、これは一緒ですね。
(おっと失言をしてしましたm(__)m、笑)

よほど暇で暇で、時間を持て余して仕方がない
という人ならいいですが、仕事が忙しい人は、
絶対にこの「目の付け所」だけは間違えては
なりません。

人生の時間は貴重で、且つ、有限です。

そもそもが、そんな調べものする時間のある人は、
時間を掛けて(全部手作業で)Excelやればいい
だけの話ですから、わざわざマクロを覚える
必要事態がありませんね。(笑)

マクロは、忙しい人ほどやるべきものです。

何故ならば、ちょとマスターすればマクロは
忙しいあなたに自由な時間を生み出す、
まさしく「打ち出の小槌」になるからです。

それでは、今日のまとめです。

「マクロの記録」の最大の利点は、
書き方に個人差が生じないこと。

だから、

無視できる部分がいつも一緒で
~~~~~~~~~~~~~~

わかりやすいのです。

それゆえの、
「マクロ」=「手軽に作れるもの」です。

この辺、ご理解頂けましたでしょうか?

本日は、以上です。

皆さんの職場の周りにも、
この正しいマクロの認識を広めて頂けますよう、
切にお願いします。m(__)m

マクロを広めて、日本の遅れている

IT生産性を劇的に改善とDX(データの利活用)
して行きましょう!!


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