同じ事例のマクロでも人によってこれだけ違う。自分なりに書いてみるのが上達への近道。同じ事例のマクロでも人によってこれだけ違う。自分なりに書いてみるのが上達への近道。同じ事例のマクロでも人によってこれだけ違う。自分なりに書いてみるのが上達への近道。先日書いたExcel複数シート集計ー複数シートの合計値を1枚に集計するマクロ【サンプルあり】ーでご紹介したマクロ。Excelの伊藤潔人さん(同じくといっても大先輩です)がブログで同じ事例のマクロを書いてくださいました。合計を集計用シートにまとめるExcelマクロこの違いがマクロの面白いところでもあり、難しいところでもあります。自分なりのルールを作るのがマクロ上達の秘訣マクロは言葉マクロはプログラムです。英語(一部日本語)でExcelに指示を出し、その指示通りに処理をしてもらいます。ある程度の厳格なルールはありますが、「言葉」ですので、書く人によって違いがあるのです。文章でまったく同じものがないように、マクロにもまったく同じものはないといっていいでしょう。(よほど単純なものを除いて)伊藤さんと私のマクロもぱっと見た感じでも印象はかなり違います。こちらが伊藤さんのマクロ。Subこちらが私のマクロです。Subこの事例(シートごとの合計値を1枚の集計シートにまとめる)では、どちらのマクロでも同じように動きます。共通しているのは、自分が使うだけではなくマクロの初心者向けにもわかりやすくどう書けばいいかを考えている点です。自分が使うだけなら、もっと簡潔に書くこともできます。簡潔=わかりやすいわけではありません。省略するとかえってわかりにくくなる場合もありますし、省略した方がわかりやすいものもあります。伊藤さんのツイートでも、こう書かれていました。おっしゃるとおり苦悩しています^_^;セミナーや執筆をやっている中で、私もまだまだ試行錯誤している状態です。伊藤さんもセミナーを開催される中で、書くマクロが変わってきているとのことでした。さんの、初心者向けにマクロをどう書くべきか苦悩の見えるコードをきっかけにした、合計を集計用シートにまとめるExcelマクロをご紹介しています。相違点=自由度があるところではかんたんに相違点をみながら、マクロを書くポイントをご紹介していきます。shuukei()マクロ(正確にはプロシージャ)の名前は、日本語、英語でもかまいません。私は、ローマ字や英語で書くことが多いです。伊藤さんは、わかりやすいように日本語で書かれています。■伊藤さんw、mrg_row、sum_row■私w、Last_row、Shuukei_cell変数とは、Excelに指示をするとき、わかりやすくするため、手間を省くために使うものです。wという変数は、ワークシート(シート)を表します。この変数は、自由に決められるのです。簡単に書くなら、小文字1文字がベストですが、後からマクロを見てもわかるようにするには、ある程度の長さで表現した方がいい場合もあります。英語を使うか、ローマ字を使うか、日本語を使うかも悩むところです。日本語は、入力モードを切り替えなければいけないため、伊藤さんも私も使っていません。(見てわかるようにすることを重視するのならば、日本語もありかもしれないと最近思っています)伊藤さんも私もワークシートのwは同じです。集計元(各シートの最後の行)を指定する変数は、伊藤さんが「まとめる」という意味のmrg_row、私は「最後の行」という意味のLast_rowを使っています。集計先を指定する変数は、伊藤さんが「合計」という意味のsum_row、私がローマ字で「集計先のセル」という意味のShuukei_cellです。このように人によってまるっきり違います。ある程度のセオリーはありますけどね。変数名に大文字をいれるかという違いもあります。伊藤さんは小文字のみ、私は大文字をいれています。後述する宣言のときにLast_rowと大文字を入れると、それ以降でlast_rowと小文字のみで入力したとき、Last_rowと補正してくれます。変数名のミスも防げるので、私はこのしくみが好きなのです。変数に大文字を入れています。使う場所の直前に書いていますマクロでは、wやLast_rowなどの変数を、「これは変数です」と宣言する必要があります。宣言しないと、マクロが混乱するからです。「おい、あれとってくれ」や「例のものを頼む」といったときに、「あれ」や「例のもの」がわからないと混乱します。「あれ」や「例のもの」が変数とすれば、それぞれが何なのかを事前に話しておく必要があるでしょう。変数も、使う場所の前に宣言すれば大丈夫です。前であればどこでもいいのですが、伊藤さんはマクロの冒頭、私は使う場所の直前に置いています。■伊藤さん随時入れています。_」(半角スペースとアンダーバー)を入れます。伊藤さんは随時いれてらっしゃいますが、私は基本的にいれません。長くなったとき以外は使わないです。最初からExcel側で準備しています項目というのは、集計先の4月〜3月のことです。伊藤さんは、この準備もマクロに入れていますが、私は最初からExcelで準備しています。Rows.Count).End(xlUp).Rowと小文字ここは非常に迷っているところです。本来セルは、「D10」というように表記します。入力するときは、「d10」と入れることが多く、もちろんマクロも動きます。マクロだけではなく関数でも同様です。以前は私も大文字にしていたのですが、実際に書くことを考えると小文字に変えています。ここは今後の検討事項です。Last_row)伊藤さんは、Worksheets(“集計”)とシートを指定しています。私は省略していますので、「今選択しているシート」とマクロ側には解釈されています。マクロをボタンで実行することを想定していますので、ボタンがあるシート=今選択しているシートになるため省略しても問題ありません。ミスの可能性を減らすならば、シートをきちんと逐一指定した方が好ましいです。ここも悩ましいところといえます。自分なりのルールを作るのがマクロ上達の秘訣わずか10数行のマクロですが、これだけの違いができます。別の方が書いたら、違ったものが出てくるでしょう。(今回、伊藤さんに記事にしていただいて非常に勉強になりました。ありがとうございます!)マクロの本やサイトを見て、なんとなくしっくり来ないことがあるのは、この違いです。文章でも、読みやすい・読みにくいといった違いはありますからね。セミナーでもお話していますが、マクロを自分のものにするなら、書きながら考えながら自分なりのルールを作っていかなければいけません。かなりの自由度がありますので、自分が読みやすい変数で書き換えてみるだけでも、印象は変わります。英語が得意かそうでないかによっても変数の付け方は違ってくるでしょう。それをやるためには、基本の部分(伊藤さんと私のマクロの共通部分)をしっかりと身に付けることが大事です。「ここは変えちゃいけない」「ここは変えていい」というものがわかるようになります。ご興味ある方はセミナーもご利用ください。9/26開催分は、本日23:00締切です。終日、書籍執筆DAY。前日のトライアスロンの疲れをほぐすためにプールにも行きました。疲労回復だけでなくフォーム確認にも役立ちます。時間とお金のバランスをとり、独立後を楽しんでいただくべく、IT・発信による効率化、時間・お金のノウハウを提供している。『税理士のためのRPA入門』『やってはいけないExcel』など39冊。日課は1日1新、ブログ。