エクセルでマクロを始める

○○を始める

エクセルでマクロを始めたいけど、どうればいいのかわからない方も、これを読めばエクセルでマクロを始めることができます。
ここにあるサンプルコードをコピペするだけで、エクセルのマクロを体験できます。

例として楽天カードの「利用のお知らせメール」の整形を自動で行うマクロを紹介しています。

エクセルでマクロを使うためにまずはエクセルを開いて下さい。まっさらな新規シートをご用意下さい。

エクセルのメインタブに「開発」を追加する

初期のエクセルにはマクロを使うためのメニューもボタンもありません。

なので、まずはマクロを使うためのタブをリボンに追加する方法を紹介します。

まずは、ファイルメニューのオプションを選択

ファイルメニューをクリックします。

すると縦長のサイドバーが現れるので一番下にある「オプション」を選択します。
「オプション」は「その他」の中にあることもあります。

リボンのユーザー設定

リボンのユーザー設定を選択します。

リボンのユーザー設定が出てくるので、開発にチェックをいれます。

OKを押すと、開発タブが現れます。

マクロを動かす準備

次に今使っているエクセルがマクロを使える設定になっているか確認します。

マクロのセキュリティの確認

開発タブの「マクロのセキュリティ」をクリックします。

こうなっていればOKです。

マクロ初めの儀式

突然ですが初めてのマクロはエクセルに作ってもらいます。
「マクロの記録」をクリックします。

まずは、マクロに名前を付けます。

楽天カードと名付けます。

開発タブの「記録終了」をクリックします。

これでマクロ初めの儀式は終了です。

コードの編集

「マクロの記録」をクリックしてから「記録終了」をクリックするまでに何か操作をすれば、その操作が自動的にマクロになるのですが、今回は何もしなかったので空っぽのマクロができているはずです。

マクロを見る

マクロのアイコンをクリックして下さい。

リストから「楽天カード」を選択し、「編集」ボタンを押します。
この時リストの上でダブルクリックしないように気をつけて下さい。

コードを書くスペースが現れます。
現在は意味のあるコードは何も書かれていません。

コードの貼り付け

ここに以下のコードをコピーして貼り付けます。

Sub 楽天カード()
'
' 楽天カード Macro
'

    '選択範囲の円を消去
    Selection.Replace What:=" 円", Replacement:="", LookAt:=xlPart, MatchCase:=True
    '選択範囲の行数
    n = Selection.Rows.Count
    
    ActiveCell.Offset(n - 2).Select
    Range(Selection, Selection.Offset(0, 2)).Select
    
    '不要な行を下から削除
    For i = n - 2 To 1 Step -1
      If Not (i Mod 4) = 0 Then
        Selection.Delete Shift:=xlUp
      End If
      ActiveCell.Offset(-1, 0).Select
      Range(Selection, Selection.Offset(0, 2)).Select
    Next
    
End Sub

このように貼り付けて下さい。

コードの保存

フロッピーのアイコンをクリックしてマクロを保存します。

データの準備

マクロを作る目的はシートに書かれている内容を分析したり、まとめたりすることが多いと思います。
ここでも、マクロの対象となるデータをシートに入れておきましょう。

マクロの対象となるサンプルデータはこれ

下のテーブルをすべてコピーしてエクセルに貼り付けて下さい。

2024/06/01GOOGLE PLAY JAPAN160 円
支払方法:1回 | 支払月:2024/07 | 利用者:本人  
   
   
2024/06/01GOOGLE PLAY JAPAN160 円
支払方法:1回 | 支払月:2024/07 | 利用者:本人  
   
   
2024/06/01GOOGLE PLAY JAPAN480 円
支払方法:1回 | 支払月:2024/07 | 利用者:本人  
   
   
2024/06/01GOOGLE PLAY JAPAN1,000 円
支払方法:1回 | 支払月:2024/07 | 利用者:本人  
   
   
2024/06/01GOOGLE PLAY JAPAN1,000 円

データの貼り付け

上の表を貼り付けたところ、私のエクセルではこんな感じになりました。

これは、楽天カードから来たメールの一部です。メールを直接貼り付ければ、こんな感じになるのですが、今回はどちらでもいいです。

マクロを使う

マクロを使う前に、先ほど貼り付けたデータを選択状態にして下さい。

マクロの実行

再びマクロのアイコンをクリックして下さい。

リストで「楽天カード」を選択し、今度は「実行」ボタンを押します。
リストの上でダブルクリックをしてもいいです。

先ほど選択状態にした部分が、このようになれば成功です。

何が起きたのか

今、何が起きたかというと、まず右の列の金額の後ろにあった「円」が消えました。これは、「すべて置換」という命令が実行されたからです。
次に日付や金額が書かれている以外の行が削除されました。4行おきに日付や金額が書かれている行が現れるため、行数を4で割った余りに応じて行を消すか消さないかを判断するプログラムが書かれています。

おわかりいただけたでしょうか

マクロによる「処理の自動化」を経験して頂きましたが、マクロの力をお分かり頂けたでしょうか。

エクセルマクロの言語(VBA)

エクセルのマクロはVBAと呼ばれています。今後、エクセルのマクロを自分で作るとき、わからないことを検索する際は”VBA ○○”と検索すると知りたいことがみつかりやすいと思います。

スプシマクロとの比較

今回と同じ処理のスプシのマクロ(GAS)はこんな感じです。

/** 楽天カード利用のお知らせメール整形マクロ */

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  let myActiveRange = spreadsheet.getActiveRange();
  //選択範囲の円を消去
  myActiveRange.createTextFinder(" 円").matchFormulaText(true).replaceAllWith("");
  //選択範囲の最初の列番号の取得・・・この値は結局使わない
  l = myActiveRange.getColumn();
  //選択範囲の最初の行番号の取得
  m = myActiveRange.getRow()
  //選択範囲の最後の行番号の取得
  n = myActiveRange.getLastRow();
  //不要な行を下から削除
  spreadsheet.getCurrentCell().offset(n-m, 0, 1, 3).activate();
    for(let i = n-m; i > 0;i--){
    spreadsheet.getCurrentCell().offset(-1, 0, 1, 3).activate();
     //iを4で割った余りが1じゃなければ、行を削除
     if (i%4 != 1){
       spreadsheet.getActiveRange().deleteCells(SpreadsheetApp.Dimension.ROWS);
     } 
    }
};

興味のある方は、スプシでマクロを使うのが初めての人向けに、このマクロを実行するまでを説明していますので、よろしければこちらをご覧下さい。

Webアプリ版

こちらのページでWebアプリも公開しました。

本日はここまで!最後までお付き合いありがとうございました。

タイトルとURLをコピーしました