Excelマクロは、繰り返しのタスクを実行するミニプログラムのようなもので、時間と入力の手間を大幅に節約できます。例えば、Excelでは巨大なスプレッドシート全体を計算するのに10分の1秒もかかりません。しかし、手作業による操作こそが作業を遅らせる原因です。だからこそ、これらの作業をすべて1秒で完了する単一のトランザクションにまとめるマクロが必要なのです。
Excelマクロ:始めるためのヒント
初めてのマクロの書き方をご紹介します。マクロを使ってタスクを自動化するのがいかに簡単か、一度体験すればもう手放せなくなるでしょう。
まず、マクロ用にデータを準備する方法に関するヒントをいくつか紹介します。
- マクロは常にホーム位置から開始します (すぐにホーム位置に移動するには、 Ctrl + Homeキーの組み合わせを使用します )。
- 方向キー(上、下、右、左、End、Home など)を使用して移動し、ショートカット キーを使用して移動を高速化します。
- マクロは小さく、特定のタスクに絞りましょう。これはテストや編集(必要であれば)に最適です。これらのミニマクロは、完成度が上がったらいつでも1つの大きなマクロにまとめることができます。
- マクロでは「相対」セルアドレスが必要です。つまり、マクロ内で実際の(または「絶対」)セルアドレス(A1、B19、C20など)をハードコードするのではなく、セルを「指定」することになります。スプレッドシートは動的であり、常に変化するため、セルアドレスも変化します。
- 名前、住所、ID番号などの固定値や静的情報は、通常事前に入力されるため、マクロの一部ではありません。これらのデータはほとんど変更されないため(変更されるとしても、新しいレコードの追加または削除のみ)、この関数をマクロに含めることはほぼ不可能です。
- まずデータを管理します。レコードを追加、編集、または削除し、更新された値を入力します。その後、マクロを実行します。
ミニマクロから始めるのが簡単な理由
この例では、ある店主が1店舗から12の主要都市に12店舗へと営業範囲を拡大しました。現在CEOである彼女は、長年にわたり自ら会計業務を行ってきました。1店舗の経営では容易なことではありませんでした。そして今や12店舗にまで拡大し、各店舗からデータを収集し、統合して会社全体の健全性を監視する必要があります。
次のタスクを実行するためのミニマクロをいくつか作成しました。
- 12 店舗からのデータを収集し、マスター 3 次元スプレッドシートの 1 つのワークブックに結合します。
- データを整理して並べ替えます。
- 結合されたデータを計算する数式を入力します。
ミニマクロを記録し、テストし、完成したら、それらを1つの大きなマクロに統合するか、ミニマクロのままにしておくことができます。いずれにしても、ミニマクロは残しておいてください。長くて詳細なマクロをステップ実行してエラーを探すよりも、小さなマクロを編集して再結合する方がはるかに簡単で効率的だからです。
上記のシナリオに対応したサンプルワークブックをご用意しましたので、ぜひご参照ください。もちろん、ご自身のスプレッドシートも自由に作成いただけます。
ダウンロード
このサンプルExcelワークブックは、マクロの作成と使用の練習に役立ちます。JD Sartain
準備作業: マスタースプレッドシート
スプレッドシートを一から作成する場合は、マスタースプレッドシートから始めましょう。A1に日付の計算式、B1に店舗の所在地を入力します。下のスクリーンショットをご覧ください。
セルA1に日付の式=Today()を入力します。これで、このセルには常に今日の日付が表示されます。ただし、店舗の所在地(支店名と番号)はセルB1に入力されていることを確認してください。
2. 2行目は空白のままにしておきます。静的データと初期の動的データが入力されたら、2行目は合計に使用します。奇妙な慣習に思えるかもしれませんが、マクロスプレッドシートでは、この行は常に表示されるため、最適な方法です。
3. 次に、フィールド名 (および/またはその他のフィールド固有の情報) を 3 行目 (たとえば、A3 から J3 まで、またはスプレッドシートに必要なフィールド数) に入力します。
ヒント:データが長い場合は、個々のセル内の情報をテキストで折り返すことができます。例えば、店舗の連絡先情報をすべて1つのセルに入力し、行を折り返すことができます。Alt +Enterキーを押すと、セル内に行が追加されます。
4. 次に、A列に静的データを入力します。これは、スプレッドシート内でほとんど変更されないレコード情報です。商品番号やIDコードを使用している場合は、商品ごとに1つのコードしかないため、A列の4行目以降に入力します(5行目には飛ばさないでください)。その他の静的データフィールドには、商品名、商品価格、売上税率などがあります。
列Aの行を飛ばしたり、空白のままにしたりしないでください。すべての行には、一意のフィールドのデータ(製品コードでない場合は、他の一意の識別子)が含まれている必要があります。これは、次の2つの理由から行います。
- 列Aは主要なナビゲーション列です。マクロは、ホーム(A1)の位置と列Aに基づいてスプレッドシート内を移動します。このルールを無視すると、空白行が方向キーの動作を妨げるため、マクロは失敗します。
- ピボットレポート用に複数のテーブルやリレーショナルテーブルを後から作成する場合は、関連するテーブルを接続するための一意のキーフィールドが必要です。詳しくは、Excelピボットテーブルチュートリアルをご覧ください。
JD・サルティン / IDGワールドワイドまずマスタースプレッドシートを作成します。
5. 通常、製品の説明はB列、販売数量はC列、製品価格はD列、合計金額はE列、割引はF列、売上税はG列、合計金額はH列に表示されます。列の合計は2行目の上部に表示されます。フィールド名の長さに基づいて列幅を設定し、すべての行の高さを20に設定します。上/下揃えを中央に変更し、好みの配置(左、右、中央)を選択して、スプレッドシートの「スタイル」を好みに合わせて設定します。
6. マスターデータベースの設定が完了したら、何も移動しないでください。フィールドを追加する必要がある場合は、「 列の挿入」 コマンドを使用します。例えば、2つ目の売上税を追加したい場合は、H列(合計)の任意の場所にカーソルを置き、「ホーム」>「挿入」>「シートの列の挿入」タブをクリックします。新しい列がH列として挿入され、「合計」列はI列に移動します。この処理はマクロには影響しません。
7. 行にも同じ手順が適用されます。通常、アクティブなデータベース領域の「内側」に行を挿入することをお勧めします。例えば、数式が =SUM(B3:B20) で、数式の範囲外の行(B21 など)を挿入または使用した場合、新しいレコードのデータは数式に含まれず、計算は行われません。
8. 次に、数式範囲を設定します。2行目に以下の数式を入力します(これは1回限りの作業です)。
C2: =SUM(C4:C500)
E2: =SUM(E4:E500)
F2: =SUM(F4:F500)
G2: =SUM(G4:G500)
H2: =SUM(H4:H500)
次に、これらの列に次の数式を入力します (これも 1 回限りのイベントです)。
E4: =SUM(C4*D4)、E4からE5:E500までコピーします。
F4: =SUM(E4*10%)、店舗の現在の割引率、次に F4 から F5:E500 までコピーします。
G4: =SUM(E4-F4)*6.25、6.25はあなたの地域の消費税です。次に、G4からG5:G500までコピーします。
H4: =SUM(E4-F4+G4)、次に H4 から H5:E500 までコピーします。
スプレッドシートの計算式がすべて揃ったので、あとは販売されたコンピュータ(日次、週次、月次)の数量(列C)を入力するだけです。価格が変更された場合は、列Dに新しい価格を入力します。データベースの残りの部分はすべて数式または静的な情報です。
JD・サルティン / IDGワールドワイド列と行を計算する数式を入力します。
9. 上で示したように、「マクロ」スプレッドシートでは、数式の範囲を最終レコードから数行先まで設定するため、最後に新しいレコードを追加するだけで、範囲の調整を気にする必要がありません。マクロはデータベースをソートするため、新しいレコードは適切な位置に配置されます。この例のスプレッドシートのデータは210行目で終了しています。数式の範囲は500行目まで拡張されているため、次の新しいレコードを211行目に追加しても問題ありません。
10. スプレッドシートの構造、静的データ、正しい数式を定義し、設定が完了したら、ワークシート2から13に12個のコピーを作成します。下部のタブを編集して、個々の店舗を識別できるようにします。シート1のタブの名前を「Master」に変更します。これはマスターデータベースファイルです。
11. 1行目の位置情報を変更し、12枚のスプレッドシートすべてで、タブの店舗と一致する店舗情報を特定します。次に、各支店のスプレッドシートの電子コピーを各店舗マネージャーにメールで送信します。例えば、ボストンのシートはボストンに、ダラスのシートはダラスに送信するなどです。
これらのコピーには、個々のスプレッドシートで機能するスプレッドシートの数式が含まれます (ただし、ワークブック内の結合されたスプレッドシートの数式は含まれません)。
12. マクロはマスターシートの計算式を提供します。マスターシートは、全店舗の合計金額を表示するスプレッドシートです。すべてのデータを集計し、マスターシートのマクロを実行する担当者であり、かつ個々の店舗も管理している場合は、コピーした12枚のシートのうち、自分の店舗用に1枚使用してください。マスターシートは総計のみに使用されます。
13. 各支店が個別のスプレッドシートを電子メールで送信したら、12 店舗のワークブックから個別のシートを手動でコピーする方が安全です。
JD・サルティン / IDGワールドワイドマスタースプレッドシートを 12 回コピーし、タブに名前を付けます。
マクロをプログラムする準備ができました!次のページをクリックしてください。
プログラミングマクロ
マクロ1: データの収集と結合
1. データベースフォルダにアクセスし、MasterDB.xlsxというタイトルのスプレッドシートを開きます。
2. 新しいストアのスプレッドシートの1つ(BostonDB.xlsxなど)を開きます。
3. カーソルを MasterDB に戻してアクティブ シートにします。
4. 「開発」タブを選択し、「マクロの記録」をクリックするか、ALT+L+Rを押します。マクロ名欄に「Macro1」と表示されているので、これで問題ありません。
5. 必要に応じて、[Shortcut_key]フィールド ボックスにショートカット キーを入力します (文字「M」を入力) (後でリボン メニューにボタンを作成できます)。
JD・サルティン / IDGワールドワイドマクロ記録ダイアログボックス、マクロショートカットキー
6. [マクロの保存先]フィールド ボックスで下矢印をクリックし、リストから[個人用マクロ ブック]を選択して、 [OK]をクリックします。
これでマクロを記録します。
以下の指示に正確に従い、マウスを使ってスプレッドシート内を移動してください。角括弧内の語句は、ヒント、注意、および指示の説明です。これらの語句やその内容をマクロに含めないでください。
1. BostonDBスプレッドシートに戻り、「Boston」タブを右クリックします。ポップアップメニューで「移動またはコピー」を選択します。
2. [移動またはコピー]ダイアログで、 [コピー]というボックスをオンにします。
3. [選択したシートの移動]ダイアログで、[ブックへ]フィールド ボックスの横にある下矢印をクリックします。
4.リストから「MasterDB.xlsx 」を選択します。
5. 2 番目のダイアログで、[シート] の前にあるリストの最初のスプレッドシート「マスター」を選択し、[OK]をクリックします。
8. Excelがシートをコピーし、カーソルをMasterDBに移動します。「Boston2」という新しいタブが表示されます。セルA1の情報が店舗番号と最近の日付(この例では2018年9月29日)になっていることを確認してください。もしそうであれば、準備完了です。
9. 元の Boston スプレッドシートのタブを右クリックし、ポップアップ メニューから[削除]を選択します。
10. Excel のダイアログボックスに「元に戻すことはできません... 削除またはキャンセルしますか?」という警告が表示されます。削除しても問題ない場合は、「削除」をクリックしてください。なぜでしょうか? ボストンのマネージャーから送られてきた新しいボストンのシートに置き換えたいからです。
11. 「Boston2」タブをマスタータブと「Chicago」タブの間に移動させます。「Boston2」の「2」を残しておくと、どのシートが毎月更新されたかがすぐに分かります。
13. Ctrl+Homeキーを押してカーソルをセルA1に移動し、日付式=TODAY()を再度入力し(この式がない場合)、Enterキーを押します。
JD・サルティン / IDGワールドワイドマクロを記録し、データを結合し、重複したシートを削除します
マクロを実行する
1. [開発] タブをもう一度選択し、[記録の停止]をクリックするか、ALT + T + M + Rを押します。
2. マスター ファイルを保存し、BostonDB ファイルを保存します。
3. MasterDB スプレッドシートに戻り、マクロを実行します。Ctrl + Mを押します。
注意:プラス記号は「同時」のキー操作を意味します。つまり、Ctrl+Shift+J は、左手で Ctrl キーと Shift キーを押したまま、右手で J キーを押し、3 つのキーを同時に放すことを意味します。ダッシュ(またはハイフン)は「連続」のキー操作を意味します。例えば、End-Down は、End キーを押して放し、次に下矢印キーを押して放すことを意味します。これらは互換性がないため、記号に注意してください。
4. マクロが期待どおりに動作する場合は、残りの 11 個のスプレッドシートごとにこのプロセスを再度繰り返し、マクロを実行してファイルを保存し、マスター以外のすべてのスプレッドシートを終了します。
注:使用できるショートカットキーは、 Ctrl + M(既に使用済み)、Ctrl + Shift + M、Ctrl + J、Ctrl + Shift + Jのみです。ショートカットキーの数が限られており、文字の組み合わせも論理的に意味をなさないため、ミニマクロに最適な解決策は、リボンメニューのマクロボタンに意味のある名前を付けることです。例えば、ボストンマクロの場合は「Boston」、ダラスマクロの場合は「Dallas」などです。Excelマクロのハウツー記事では、マクロの作成、命名、使用方法について詳細な手順が説明されていますので、ぜひご覧ください。
マクロ2: データの整理と並べ替え
これは簡単ですが、スプレッドシートがたくさんある場合、手動で行うのは大変な作業になる可能性があります。Excelにはすべてのスプレッドシートを一度に変更する方法がありますが、並べ替えの際には信頼性が低くなります。
マクロの記録手順(上記マクロ1の4、5、6)に従って、次のマクロを作成します。マクロの名前を「マクロ2」とし、ショートカットはCtrl+Shift+Mです(後でリボンメニューにボタンを作成できます)。このマクロはMasterDB内のすべてのスプレッドシートに影響するため、このファイルが開いていてアクティブになっていることを確認してください。
1. Ctrl+Homeキーを押してカーソルを A1 に移動します。
2. 下矢印キーを3回押します。
3. Shift キー、End キー、下矢印キー、End キー、右矢印キーの順に押します(Shift キーを押したまま、End キーを押して放し、下矢印キーを押して放し、End キーを押して放し、右矢印キーを押して放します)。
4. 「データ」>「並べ替え」を選択します。「並べ替え」ダイアログで、「並べ替え基準」フィールドボックス のドロップダウンリストから「モデル番号」を選択し、「並べ替えの基準」フィールドボックス から「値」を選択し、 「並べ替え順序」フィールドボックス から「AZ」を選択して、「OK」をクリックします。
JD・サルティン / IDGワールドワイドマクロはモデル番号でスプレッドシートを並べ替えます
5. Ctrl + Homeを押します。
6. 下部の次のタブをクリックして次のスプレッドシート(例:ボストンの次のシカゴ)にアクセスし、上記の手順1~6をすべて繰り返してから、以下の手順に進みます。マクロはこれらの手順すべてを記録し続けます。
7. [マスター スプレッドシート] タブをクリックし、Ctrl + Home キーを押します。
8. [開発] タブ (リボン メニューから) を選択し、[記録の停止]をクリックするか、 ALT + T + M + Rを押します。
9. マスターファイル MasterDB を保存します。
10. カーソルを MasterDB スプレッドシート内に置いたまま、マクロを実行します。Ctrl + Shift + Mを押します。
マクロ3: 数式を入力する
各店舗のスプレッドシートの計算式は既に設定されています。上記の準備作業セクションのステップ9で入力したものです。これらの計算式はマスタースプレッドシート用で、他のすべての計算を行い、総計を1つの「マスター」シートにまとめます。この処理には、手動で12回行うのではなく、マクロを使用します。
マクロの記録手順(上記マクロ1の4、5、6)に従って、次のマクロを作成します。マクロの名前を「マクロ3」とし、ショートカットはCtrl+Jです(後でリボンメニューにボタンを作成できます)。このマクロはMasterDB内のすべてのスプレッドシートに影響するため、このファイルが開いていてアクティブになっていることを確認してください。
1. Ctrl+Homeキーを押してカーソルを A1 に移動します。
2.下-右-右を押す
3. =SUM(Boston:Denver!C2) Enter [この数式をセルC2に入力します。ここで、「Boston」と「Denver」というタブは、ワークブックの最初と最後のスプレッドシートのタブ名を表します。もちろん、マスターセルは除きます。最初のタブ「Boston」から最後のタブ「Denver」まで、セルC2のすべての値を計算し、その合計をマスターセルのセルC2に入力するためです。Enterキーを押します。
4. 上矢印、Ctrl+C [カーソルをセルC2まで戻し、この数式をコピーします]
5.右 - 右 - Shift - 右 - 右 - 右 Enter [カーソルを右に 2 回移動してセル E2 で停止し、Shift キーを押したまま右に 3 回移動すると、セル E2 から H2 が強調表示され、Enter キーを押します]。
JD・サルティン / IDGワールドワイドマスターシートで複数のシートの計算式を入力+計算する
6. [これらのセルがハイライト表示されている間に] Shift+Ctrl+4を押します
7. ALT + T + M + R [これらのキーを同時に押すか、[開発] タブを選択して [記録の停止] をクリックします。]
保存、コピー、配布
1. Ctrl+Home
2. マスターファイル MasterDB を保存します。
3. MasterDB のコピーをすべての店舗マネージャーに送信します。
マクロのデバッグ
Excelでマクロをデバッグするのは、実は想像以上に簡単です。マクロを印刷して読み進めることで、Excelのマクロ言語(Visual Basic)の仕組みをより深く理解することができます。マクロをデバッグするのにプログラマーである必要はありません。知識が深まるほど、デバッグは簡単になります。
1. まず、さまざまな命令が Visual Basic でどのように見えるかを確認できるように、簡単なマクロを作成します。
2. [開発] タブを選択し、[マクロの記録] アイコン/ボタンをクリックします。
3. 自動化するタスクを実行するキーストロークを入力し、マクロ停止アイコン/ボタンをクリックします。
4. マクロを表示するには、マクロ アイコン/ボタンをクリックするか、Alt + F8を押します。
5. 「マクロ」ダイアログが表示され、「開いているすべてのブック」領域に保存されているすべてのマクロが表示されます。
6. マクロを見つけてクリックして選択し、「ステップ イン」ボタンをクリックします。
7. マクロコードがVisual Basicのマクロデバッグウィンドウに表示されます。
最初の行は次のように書かれています: Sub macroname()
Subはサブルーチンを意味し、Excelにマクロが続くことを知らせます。「Sub」でマクロが始まり、「End Sub」で終わります。次の行はマクロ名です(私はxdebug()と名付けました)。
サブxdebug()
次のセクションでは次のように述べられています。
範囲C3を選択します。アクティブセルに数式=SUM(RC[-1]*10%)を入力します。
以下のコマンドは似ています:
範囲D3を選択します。アクティブセルに数式=SUM(RC[-2]*32%)を入力します。
範囲E3を選択します。アクティブセルに数式=SUM(RC[-3]:RC[-1])を入力します。
次にこう書かれています。
C3からE3の範囲を選択してコピー
C4からE12までの範囲を選択して貼り付けます
Application.CutCopyMode = False [これはクリップボードをクリアすることを意味します]
そして次のように続きます。
範囲E4を選択
Endキーを選択し、1行下に移動します
範囲E13を選択します。アクティブセルに数式=SUM(R[-10]C:R[-1]C)を入力します。
次の行はテキスト配置コマンドです。
範囲E13を選択
選択あり(形式は以下のとおり)
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.方向 = 0
.AddIndent = False
.インデントレベル = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
終わりに
選択あり(形式は以下のとおり)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.方向 = 0
.AddIndent = False
.インデントレベル = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
終わりに
終了サブ
JD サーティン / IDGマクロをデバッグする方法
HTML や他のほとんどの言語と同様に、開始ステートメントまたはオープン ステートメントを持つ特定のステートメント (またはコマンド) には、終了ステートメントも必要です。
変更するには、変更したい内容を入力し、Alt+Qを押してスプレッドシートに戻ります。Excel に「このコマンドはデバッガーを停止します」というダイアログウィンドウが表示されます。「OK」ボタンをクリックすると、マクロが消えます。
編集ミスをしてマクロを終了し、その後実行すると、Excel は「コンパイルエラー: 構文エラー」というエラーメッセージを表示します。コンパイルとは、このプログラム/マクロを機能させるために必要な形式に「コードを変換する」ことを意味します。構文とは単に「文」を意味し、基本的にコマンド文の1つにエラーがあることを意味します。
「OK」ボタンをクリックすると、Excelの画面にマクロコードが表示されます。エラー箇所は赤で表示されるので、直接その箇所に移動して修正できます。修正が完了すると、赤文字が黒文字に変わります。修正が完了したら、再度保存し、Alt+Q キーを押して再度実行してください。修正が正しく行われていれば、マクロは正常に動作します。
JD サーティン / IDGマクロエラーメッセージの理解