\r\n\r\n
MacのExcelは、Windowsのようにパワフルであるとは限りません。マクロは、Mac専用に作られたものでなければ、実際には機能しません。
2013年から、マイクロソフトはマクロを復活させました。マクロには、クイックレコード操作で作成できるものと、VBAを使用してより高度な自動化処理を設計するものがあります。Office 2016では、Excelはすべてのプラットフォームで同じコードベースを使用しています。この変更により、プラットフォーム間でのマクロの動作が容易になります。
macOSでの動作を見てみましょう。
MacでExcelを使用する場合、デフォルトでマクロが有効になっていない場合があります。この設定は、マクロがマルウェアのベクターになる可能性があるためです。最も簡単な方法は、Excelのリボン上に「開発者」タブがあるかどうかを確認することです。表示されない場合は、有効化するのは簡単です。
メニューバーの「Excel」をクリックし、ドロップダウンリストから「Preferences」を選択します。メニューの中の「リボンとツールバー」をクリックします。右側のリストで、Developerが一番下にあるはずなので、チェックボックスをクリックします。最後に「保存」をクリックすると、リボンの端に「デベロッパー」タブが表示されます。
マクロを使用して各ワークブックを作成した後、ファイルを再度開いた後にマクロを使用できるように、新しい形式.xl**で保存してください。もし忘れても、Excelが保存しようとするたびに思い出させてくれます。また、ファイルを開くたびにマクロを有効にする必要があります。
マクロを書くこともできますが、すべての人に適しているわけではありません。VBAを使い始める準備ができていない場合、Excelでは、既存のワークシートにマクロの手順を記録することができます。開発者」タブをクリックすると、オプションが表示されます。
リボン内の3番目のオプション「マクロの記録」を探しているのでしょう。これをクリックすると、マクロの名前とキーボードショートカットを設定するダイアログボックスが表示されます。マクロの範囲を現在のワークブック、新しいワークブック、個人用マクロのワークブックに制限することができます。パーソナルマクロワークブックは、ユーザープロファイルの中にあり、ファイル間でマクロを使用することができます。
一度記録したアクションは、同じタブで確認することができます。マクロをクリックすると、ワークブックに保存されているマクロが表示されます。マクロ名をクリックし、「実行」をクリックすると、記録されたアクションが実行されます。
マクロの例として、売上を時間ごとの合計で区切った日次売上表を実行します。マクロは、毎日の売上合計を加算し、各時間サイクルの最後の列に平均を加算します。小売業などの営業職の方は、収益を把握するのに便利な表です。
1枚目のシートを貼る必要があります。最初のスペースをテンプレートとして使い、毎日新しいタブにコピーすることで、時間を節約することができます。最初の列/行に時間/日付を入力します。一番上に月曜日から金曜日を追加します。
そして、最初の欄には、時間ごとの合計を8から5まで分解してください。私は24時間制を採用しましたが、ご希望であればAM/PMの表現も可能です。ワークシートは、上記のスクリーンショットと一致する必要があります。
新しいタブを追加し、その中にテンプレートをコピーします。そして、その日の売上データを記入する。(このワークシートに入力するデータがない場合は、すべてのセルに =randbween(101000) と入力することでダミーデータを作成することができます)次に、リボン内の「Developer」をクリックします。
次に、「マクロの記録」をクリックします。ダイアログボックスにAverageandSumという名前を入力し、このワークブックに保存します。ご希望により、ショートカットキーを設定することができます。マクロの機能についてより詳しい情報が必要な場合、説明を入力することができます。OK]をクリックすると、マクロの設定が開始されます。
時間帯別一覧の一番下に1日の合計を入力します。その隣のセルに、=SUM(B2:B10)と入力します。その後、残りの列にコピー&ペーストしてください。次に、ヘッダーの最後の列の後に平均を追加し、次のセルに =Average (B2:F2) と入力します。そして、列の残りのセルに貼り付けます。
その後、クリックすると録画が停止します。ワークブックに新しいワークシートを追加するたびに、マクロを使用できるようになりました。別のデータシートができたら、Developerに戻り、Macrosをクリックします。マクロがハイライトされているはずなので、「実行」をクリックして合計と平均を追加します。
この例では、いくつかのステップを省くことができますが、より複雑な操作では、これらのステップが加算される可能性があります。同じ形式のデータに対して同じ操作を行う場合は、記録されたマクロを使用します。
Excelで手動で記録したマクロは、常に同じサイズと形状のデータを扱う場合に便利です。また、ワークシート全体に対して操作を行いたい場合にも有効です。マクロを使って実証することができます。
ワークシートに別の時間と曜日を追加して、マクロを実行します。マクロが新しいデータを上書きしていることがわかります。この問題を解決するには、VBA(visualbasicのlite版)を使って、コードでマクロをよりダイナミックにすることです。導入はオフィスオートメーションに重点を置いています。
Applescriptのように簡単にアクセスできるわけではありませんが、Officeの自動化はすべてVisual Basicを中心に構築されています。ですから、ここで一度使ってしまえば、他のオフィスアプリケーションでもすぐに使いこなすことができます。(仕事でWindows PCを使っている場合も、かなり助かります)。
ExcelでVBAを使用する場合、別ウィンドウがあります。上のスクリーンショットは、記録したマクロがコードエディタに表示されたものです。ウィンドウモードは、コードを使用する際の学習プロセスに役立ちます。マクロがハングアップした場合、デバッグツールで変数やワークシートのデータの状態を確認することができます。
Office 2016では、Visual Basicのフルエディタが利用できるようになりました。これまでWindows版に限定されていた「オブジェクトブラウザ」や「デバッグツール」を利用できるようになります。オブジェクトブラウザは、「表示 >オブジェクトブラウザ」を選択するか、Shift+Command+Bキーを押すことでアクセスできます。そして、利用可能なすべてのクラス、メソッド、プロパティを参照することができます。これは、次節のコードを構成するのに非常に有効です。
マクロを書き始める前に、テンプレートにボタンを追加してみましょう。このステップにより、初心者の方でもマクロにアクセスしやすくなっています。タブやメニューに深く入り込むことなく、ボタンをクリックしてマクロを呼び出すことができるのです。
前回作成した白紙のテンプレートシートに切り替えます。開発者]をクリックすると、タブに戻ります。タブを表示させたら、ボタンをクリックします。次に、テンプレート上のワークシートのどこかをクリックして、ボタンを配置します。マクロメニューが表示されるので、マクロに名前を付けて[新規]をクリックします。
Visualbasicのウィンドウが開きます。プロジェクトブラウザにModule2として表示されているのがわかると思います。コード」ペインには、上部にSub AverageandSumButton()、下部に数行が表示されています。マクロの始まりと終わりなので、この2行の間にコードを記述する必要があります。
まず、すべての変数を宣言する必要があります。それらは以下のコードブロックにありますが、どのように構成されているのかが重要です。変数名の前にDimを使い、すべての変数をdatatypeで宣言する必要があります。
Sub AverageandSumButton() Dim RowPlaceHolder As Integer Dim ColumnPlaceHolder As Integer Dim StringHolder As String Dim AllCells As Range Dim TargetCells As Range Dim AverageTarget As Range Dim SumTarget As Rangeさて、すべての変数が揃ったので、早速いくつかの範囲変数を使う必要があります。範囲とは、ワークシートの様々な部分をアドレスとして保持するオブジェクトのことです。変数 All Cells には、ワークシート上のすべてのアクティブなセルが設定され、これには列と行のラベルが含まれます。ActiveSheetオブジェクトを呼び出してから、UsedRangeプロパティを呼び出せばOKです。
問題は、ラベルが平均値や合計値のデータに含まれないようにすることです。代わりに、AllCellsの範囲のサブセットを使用することになります。これがTargetCellsの範囲となる。その範囲を手動で宣言することができます。その開始アドレスは、範囲の2列目の2行目のセルになります。
AllCellsレンジを呼び出し、そのCellsクラスで(2,2)を使って特定のセルを取得することで呼び出すことができます。今回はSpecialCellsメソッドを使用して、プロパティxlCellTypeLastCellを取得します。
Set AllCells = ActiveSheet.UsedRange Set TargetCells = Range(AllCells.Cells(2, 2), AllCells.SpecialCells(xlCellTypeLastCell))次の2つのコードは、それぞれのループに特有のものです。これらのループは、オブジェクトを介してそのオブジェクトの各サブセットに対して作用する。この例では、この操作を行と列のそれぞれに対して2回ずつ実行します。ほとんど同じなので、ここには1つしかありませんが、両方ともコードブロックの中にあります。細部はほぼ同じです。
各行に対するループを開始する前に、ループが各行の平均を書き込む対象列を設定する必要があります。このターゲットを設定するために、ColumnPocholder変数を使用することができます。AllCells の Cells クラスの Count 変数に設定します。1を追加して、データの右側に+1して移動します。
次に、それぞれのループを使用してループを開始します。そして、サブセット(この場合はサブルーチン)用の変数を作成したいと思います。入力の後、TargetCellsを解析しているメインオブジェクトを設定します。最後に.Rowsを追加して、ループを範囲内の各セルではなく、各行だけに制限します。
ループの中で、アクティブページセルメソッドを使用して、ワークシート上の特定のターゲットを設定します。座標は、Set SubRowsを使って現在のループ内の行を取得することで得られます。そして、ColumnPlaceHolderを他の座標として使用することになります。
3つのステップ全てに使用します。1つ目は、括弧の後に.valueを追加して、ワークシート関数に設定します。平均値(サブタイトル)。これにより、行の平均を表す数式が目的のセルに書き込まれます。次の行のスタイルを "Currency "に設定します。このステップは、ワークシートの残りの部分と一致します。最後の行に、.を追加します。ボールドフォントでtrueに設定します。(この行はブール値であるため引用符で囲まれていないことに注意)この行は、サマリー情報をワークシートの他の部分から目立たせるために太字になっています。
この2つのステップは、以下のコード例にあります。2番目のループでは、行と列を入れ替え、数式をSumに変更しています。このメソッドを使用して、現在のワークシートの形式に計算をバインドします。そうでない場合は、マクロを記録したときのサイズに連動します。したがって、日数や時間をかけて作業すればするほど、データが増えれば増えるほど、関数も大きくなっていきます。
ColumnPlaceHolder = AllCells.Columns.Count + 1 For Each subRow In TargetCells.Rows ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Value = WorksheetFunction.Average(subRow) ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Style = "Currency" ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Font.Bold = True Next subRow RowPlaceHolder = AllCells.Rows.Count + 1 For Each subColumn In TargetCells.Columns ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Value = WorksheetFunction.Sum(subColumn) ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Style = "Currency" ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Font.Bold = "True" Next subColumn次に、新しい行と列をマークし、RowPlaceHolderとcolumnpocholderを再度設定します。まず、すべてのセルを使用します。行は、範囲の最初の行を取得し、次にすべてのセルを取得します。Columns+1 で最後の列を取得します。そして、ループと同じ方法で、値を「平均売上」に設定します。同じ方法を使うのでしょう。Bold font 属性で新しいラベルを太字にする。
また、太字にする必要があります。
この2つのステップは、次のコードのブロックにあります。end Subで示されるマクロの終了です。これで、マクロ全体ができあがり、ボタンをクリックするだけで実行できるようになります。もしごまかそうと思えば、これらのコードブロックをすべてエクセルシートに貼り付けることもできますが、それのどこが楽しいのでしょうか?
ColumnPlaceHolder = AllCells.Columns.Count + 1 RowPlaceHolder = AllCells.Row ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Value = "Average Sales" ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Font.Bold = True ColumnPlaceHolder = AllCells.Column RowPlaceHolder = AllCells.Rows.Count + 1 ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Value = "Total Sales" ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Font.Bold = TrueEnd Sub記録されたマクロは、予測可能な繰り返しに最適です。すべてのセルのサイズを変更したり、見出しを太くしたりといった簡単なことでも、時間を節約することができます。よくあるマクロのミスを防ぐ
visualbasicは、Mac-Excelユーザーにオフィスオートメーションへの道を開くもので、従来はWindowsでしか利用できなかった。これにより、マクロを動的にデータに適応させることができ、より汎用性の高いものとなります。根気よく続ければ、より高度なプログラミングへの入り口となるかもしれません。
スプレッドシートの時間短縮のヒントをもっと知りたいですか?Excelで条件付き書式を使って特定のデータを自動的にハイライトする方法と、Macで数値条件付きハイライトを使用する方法をご紹介します。