はじめてのGoogle Apps Script！スプレッドシート操作の自動化に挑戦しよう


## はじめに
GoogleスプレッドシートとGoogle Apps Scriptを使うと、データの入力や編集を自動化できて非常に便利です！この記事では、まずスプレッドシートを使い始めるところから、簡単なプログラムを作って実行する手順を紹介します。プログラム初心者の方も気軽にチャレンジできる内容です。

![スクリーンショット 2024-10-09 19.28.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75802/6efa368b-fed1-31e5-ed47-c96806422ba1.png)



## 1. Googleスプレッドシートを作成する

### ステップ1: スプレッドシートにアクセス
Googleドライブにアクセスして、新しいスプレッドシートを作成します。
- [Googleドライブ](https://drive.google.com/)にアクセス
- 左上の「新規」をクリックし、「Googleスプレッドシート」を選択します

### ステップ2: スプレッドシートを設定
- スプレッドシートが開いたら、任意の名前を付けます（例: `データ管理シート`）。
- **URLの一部にあるスプレッドシートID**を後で使用するので、メモしておきます。  
  例: `https://docs.google.com/spreadsheets/d/スプレッドシートID/edit`

## 2. Google Apps Scriptを使ってみよう

### ステップ1: Apps Scriptエディタを開く
1. スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。
2. Apps Scriptのエディタが別タブで開きます。

### ステップ2: プログラムを書く
Apps Scriptエディタにサンプルコードを入力して、スプレッドシートにデータを追加してみましょう。

```javascript
function addRowToSheet() {
    var sheetId = 'YOUR_SPREADSHEET_ID';  // ここにスプレッドシートIDを置き換えてください
    var spreadsheet = SpreadsheetApp.openById(sheetId);
    var sheet = spreadsheet.getSheetByName('シート1'); // デフォルトのシート名
    
    // 追加するデータ
    var data = ['データ1', 'データ2', 'データ3'];
    
    // 最終行の次にデータを追加
    sheet.appendRow(data);
    Logger.log('データが追加されました！');
}
```

- **YOUR_SPREADSHEET_ID**を実際のスプレッドシートIDに置き換えてください。
- `sheet.appendRow(data);`で、シートにデータを追加します。

### ステップ3: プログラムを実行する
1. コードを入力したら、左上の「保存」ボタンを押します。任意のプロジェクト名（例: `スプレッドシート操作プログラム`）を付けて保存します。
2. 「関数を選択」のドロップダウンから「addRowToSheet」を選び、「▶」ボタンをクリックして実行します。
3. 初めての実行ではGoogleアカウントの許可が求められるので、指示に従って許可します。

## 3. スプレッドシートのデータを条件で検索し、更新する

次に、特定の条件に一致するデータを検索し、更新するプログラムです。

```javascript
function searchAndUpdateRow() {
    var sheetId = 'YOUR_SPREADSHEET_ID';
    var spreadsheet = SpreadsheetApp.openById(sheetId);
    var sheet = spreadsheet.getSheetByName('シート1');

    var searchValue = 'データ1';
    var newDataB = '更新データ';
    var newDataC = 'さらに更新';

    var dataRange = sheet.getDataRange();
    var values = dataRange.getValues();

    for (var i = 0; i < values.length; i++) {
        if (values[i][0] === searchValue) {
            sheet.getRange(i + 1, 2).setValue(newDataB);
            sheet.getRange(i + 1, 3).setValue(newDataC);
            Logger.log('データが更新されました！ 行: ' + (i + 1));
            return;
        }
    }
    Logger.log('指定したデータが見つかりませんでした。');
}
```

このスクリプトを実行すると、検索条件に一致する行が見つかった場合、その行のデータが更新されます。検索したい値を`searchValue`に、更新するデータを`newDataB`と`newDataC`に指定します。

## 4. 条件でフィルタリングしてデータを別シートにコピー、スタイルを設定する

次は、データを「結果シート」にフィルタリングしてコピーし、スタイルも適用するプログラムです。

```javascript
function filterCopyAndStyleData() {
    var sheetId = 'YOUR_SPREADSHEET_ID';
    var spreadsheet = SpreadsheetApp.openById(sheetId);
    
    var sourceSheet = spreadsheet.getSheetByName('シート1');
    var resultSheet = spreadsheet.getSheetByName('結果シート');
    if (!resultSheet) {
        resultSheet = spreadsheet.insertSheet('結果シート');
    } else {
        resultSheet.clear();
    }

    var targetValue = '特定の値';
    var dataRange = sourceSheet.getDataRange();
    var values = dataRange.getValues();

    var filteredData = [];
    filteredData.push(values[0]);

    for (var i = 1; i < values.length; i++) {
        if (values[i][2] === targetValue) {
            filteredData.push(values[i]);
        }
    }

    if (filteredData.length > 1) {
        resultSheet.getRange(1, 1, filteredData.length, filteredData[0].length).setValues(filteredData);

        var dataRangeForStyling = resultSheet.getRange(2, 1, filteredData.length - 1, filteredData[0].length);
        dataRangeForStyling.setBackground('#FFEB3B');
        dataRangeForStyling.setFontColor('#1B5E20');
        dataRangeForStyling.setFontWeight('bold');    
        dataRangeForStyling.setHorizontalAlignment('center'); 

        Logger.log('フィルタリングされたデータが「結果シート」にコピーされ、スタイルが適用されました。');
    } else {
        Logger.log('条件に一致するデータが見つかりませんでした。');
    }
}
```

**ポイント**
- `resultSheet.clear()`で既存のデータを消去し、毎回新しいデータを出力します。
- `setBackground()`, `setFontColor()`, `setFontWeight()`などを使ってスタイルを適用します。

## おわりに

以上がGoogle Apps Scriptを使ってスプレッドシートの操作を自動化する基本的な方法です。データ入力の自動化から、特定条件に応じたデータの加工やスタイルの設定まで、スクリプトを活用してGoogleスプレッドシートをさらに便利に使いこなしてください！