今日も今日とてマクロのお話

エロい情報じゃなくて申し訳!
というより、当ブログで人気の記事は「すきャンダル」(1回目2回目3回目4回目)へ行ったお話みたいですね…何とも不思議!w
さておき、「会社では見辛いけど、役に立つ」的なサイトを目指して、もう少し情報を掲載していこう!…今回も、超特急で作った会社でのマクロ話です…。

今回のマクロでは、行数が違うが、入力されている列方向の内容が同じリストデータが複数シートにまたがるデータを一つのシートにまとめてしまうというお仕事をしていました。その時に作ったコードをサンプルとして扱ってみましょ。こういうのは見ることも大事だし、公開することも…大事!

シートを網羅する繰り返し処理

Sub シート繰り返し()
Dim Sheet_buf As Worksheet
Dim Count_buf As Long
Dim i As Long

Count_buf = 1
For Each Sheet_buf In ThisWorkbook.Sheets
    Do Until Sheet_buf.Cells(Count_buf, 1) Like "*計*"
        Count_buf = Count_buf + 1
    Loop
    For i = 16 To Count_buf - 1
        '処理内容
    Next
Next
End Sub

ざっくりと作るとこんな感じになります。
「For Each 変数 In Book.Sheets ~ Next」とすることで、ワークブックの中に含まれているシートを網羅的に繰り返す処理を行うことができます。まぁ、この表現手法は、ワークブックに行う使い方が多いため、上記のコード方法を覚えれば、幅広く応用が利きますので、基礎知識として覚えておきましょう。
また、本来だと、「ThisWorkbook.Sheets」としている部分についても、ワークブックを変数に入れて処理してあげたほうが理想的かなぁ…とかって思います。
後々の可読性についても、そのほうが処理しやすくなるのでオススメ。
今回に関して言えば、集約したいデータが存在しているブック上に直接マクロを書き込んで、新規ブックを展開してそこに追記する法案としたので、一番簡単で手間が少ない処理方法を選びました。

さらにさらに、各シートに書かれている表の最終行は合計行を示す「計」という文字列が含まれているセルがA列にあるため、Do~Loopをうまいところ利用して、「計」が出てくる列を取得していますね…はい。
UntilとWhileという書き方があるわけですが、間違えると永続ループに陥ることが多々あります(1敗)。…ので、必ずステップインで「ループが正常に終わる」ことを確認しましょう。トライ&エラーとデバッグ作業がマクロ作成をするうえで肝要なのです。

表データが始まる行の開始位置はすべてのシートで同じ16行目のため、For ~ Next処理では、16 To Count_bufとしています。Count_bufは、上記のDo ~ Loop処理で取得した、最終行となりますが、最終行の合計は必要なかったため、「-1」として、処理を行う最終行を1行分上にずらしました。…処理内容は諸々の事情から今回は省略させていただいておりますので、ご了承ください。

余談…いつもの

ちなみに、私自身は口を開けば「マクロ使えば楽できる!」ということを言っていますが、作成段階のお話で行けば、マクロだけの利用だと絶対楽できません!(矛盾が生じた!)…理由はいくつかありますが、繰り返し処理を行うために、繰り返し同じような構文をダラダラと書かなければいけません。その構文については、ほぼほぼコピペを利用しているのですが、集計用のマクロを作ると、集計先が1行ずれで連番っていうことがめちゃくちゃあります。コピペしてその部分だけ手作業でコツコツと直す…やってられん!
そんな時に、エクセルには超絶便利な機能があります…そう、フィル機能で連番を出力できるヤツです。マクロ使いは、必ずエクセル使いである必要があります…なぜなら、手を抜くための機能がたっぷりと詰まっているからです!
…で、コピペを行う場合、フィルで連番を作ったセルから直接コピペしても良いんですけど、コピーして貼り付けて、シートに戻って、次のセルを指定してコピーして…とすることすらめんどくさくなることがあります息をするのも面倒だそんなときに利用するのが、テキストエディタです。この辺は人気が色々と別れていますが、10年以上使っている「TeraPad」を個人的には推したいところです。その他で人気なのは、秀丸エディタとかサクラエディタとかが人気ですかね…特に、プログラマには、サクラエディタが人気だったと記憶しております。…まぁ、ほぼほぼTeraPadでおなか一杯になれます。
テキストエディタに、エクセルで作成したデータをコピペして、あとは、こいつからカット&ペーストをするとセルの縦移動をしなくてよくなります。…この辺は、操作に慣れる必要がありますが、Shift+「↓」キーで1行を選択して、Ctrl+Xでカットして、Alt+Tabで切り替えて、Ctrl+Vで張り付けをするという操作をすると…めちゃくちゃ早く操作できます(慣れれば)。
この操作方法については、昔通っていた編プロにてデザイナーさんがテキストデータの流し込み作業をする際に行っていた手法を参考としています。

※流し込み作業…ライターから提出されるテキストデータを誌面に入力する作業で、エクセルで提出されることが多い。エクセルのままコピペすると、書式設定まで持ってきてしまうことが多々あるので、テキストエディタを挟んでコピペするという手法で「超絶スピード」を実現している人もいます…いましたw

それでは、良いExcelマクロライフを!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA