ファビコン。井の家紋。Google Spread Sheetのマクロ(Google Apple Script[GAS])の基本 | エクセルマクロ(VBA)実践蔵(じっせんぐら)

前の項目 - ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツール
次の項目 - Outlookマクロで迷惑メール、スパムメール、フィッシングメールの一括削除

Google Spread Sheetのマクロ(Google Apple Script[GAS])の基本最終更新日:2024-07-04

Google Spread Sheetで基本になるコードを載せて行こうと思います。トリガの設定や自動メール送信については、GASで株価の取得やトリガの設定、自動メール送信などについてに記述します。

GASのセルのデータ取得とセルのデータ設定方法<行と列でループ>

エクセルマクロに慣れている人向けに書いてみました。試しに変数名を日本語にしてみましたが、問題なく実行できました。

エクセルマクロとGoogle Spread Sheet(GAS)の大きな違いとして、エクセルマクロがPC上で動作するのに対して、GASはサーバ上で動作します。管理人は、Googleの無料枠内での利用の為、連続処理時間に制限があります。同じ環境の方は、セルの内容をまとめて配列入れて、配列を更新し、セルを更新するのをおすすめします。1セルずつアクセスして書き込みを行うとどうしても処理速度は遅くなります。

ただし、デバッグで状況確認するには、配列の方がしずらいです。セルに書いてしまった方が、状況がわかりやすいです。

あと、エクセルマクロは、英字の大文字小文字の区別をしませんが、GASの方は、別扱いになるので、気を付けてください。「SpreadsheetApp」や「getRange」などの決められているメソッド(関数)は、大文字を小文字にしてしまうとエラーになります。

変数は、「let」が便利です。数値も文字列も配列もletで可能です。配列は、0スタートになります。そのため、1行目1列目のデータが配列[0][0]に格納されます。

変数「const」は、初期値から変更できない変数です。「let」でも代用は可能です。

getValues()で、セル内のデータが配列に格納されます。

 
function test()
{
let Book = SpreadsheetApp.getActiveSpreadsheet();
let Sheet = Book.getSheetByName("シート1");
let Table = Sheet.getRange("A1:C7");
let 表配列 = Table.getValues();
let 行数;
let 列数;
let 文字列 = "書き込み";
const offset=1;

for( 行数 = 0; 行数 < Table.getLastRow() ; 行数++ )
{
for( 列数 = 0; 列数 < Table.getLastColumn() ; 列数++ )
{
if(行数 === 0)
{
表配列[行数][列数]=列数+1;
}
if( 列数 === 0 )
{
表配列[行数][列数]=行数+1;
}
// 4行目 2列目 への書き込み
if( 行数+offset === 4 && 列数+offset === 2 )
{
表配列[行数][列数]=文字列;
}
}
}
Table.setValues(表配列);
}

GASで参照する行数が可変の場合

シート内データをすべて配列に格納して、データを更新する。

 

function test2()
{
let Book = SpreadsheetApp.getActiveSpreadsheet();
let Sheet = Book.getSheetByName("シート1");
let AllRange = Sheet.getRange(1,1,Sheet.getLastRow(),Sheet.getLastColumn());
let 全データ = AllRange.getValues();

// 全データ[][]配列の編集

AllRange.setValues(全データ);
}

GASで関数を指定して実行する方法

自作した関数の実行方法は、下記の▼をクリックし、関数を選択後に実行する。

GAS起動画面

GASから開いていないシートを操作する方法

ActiveSpreadsheet以外のシートへのアクセス方法は、IDによるものになります。

IDはURLの中に含まれています。「https://docs.google.com/spreadsheets/d/」の後ろから「/edit?gid=0#gid=0」の前までが、IDになります。「~/d/ここがID/edit~」

関数化しておくと、便利です。戻り値ありの変数宣言は、関数内にreturn ○○; と記述すれば、呼び出し側で受け取れます。配列を戻したい場合は、配列名を指定すれば、配列も関数から戻せます。

 
function getMySheet(){
let Book = SpreadsheetApp.openById("XXX");
let Sheet = Book.getSheetByName("シート1");

return Sheet;
}

function 呼び出し側(){
let sht = getMySheet();

}

GASでセルのデータと関係なく、配列のデータをセルに書き込む

作成した配列データをセルに書き込む

 
function データ設定(){
let Book = SpreadsheetApp.getActiveSpreadsheet();
let Sht = Book.getSheetByName("シート2");

let WRow = 5; //書き込み行数
let WCol = 5; //書き込み列数
let val = [[1,2,3],[4,5,6],[7,8,9]]; //配列のデータを作成

// 書き込み 開始行、開始列、書き込み行数(配列サイズ(行))、書き込み列数(配列サイズ(列))
Sht.getRange(WRow,WCol,val.length,val[0].length).setValues(val);

return;
}

GASでFor Eachは使えるか?

健忘録として、For Eachの書き方を下記にのせます。配列をひとつづつ取り出すコードです。ただ、配列の何番目を更新したのか情報が必要な場合、アドレスを意識して求めないといけないので、結局、行数や列数で回した方がよさそうでした。

 
function test()
{
let Book = SpreadsheetApp.getActiveSpreadsheet();
let Sheet = Book.getSheetByName("シート2");

let Table = Sheet.getRange("A1:C7");
let 表配列 = Table.getValues();
let 行数;

for( 行数 = 0; 行数 < Table.getLastRow() ; 行数++ )
{
for( let colcnt of 表配列[行数] )
{
Logger.log("テスト 行数"+行数+" 値"+colcnt);
}
}
}
前の項目 - ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツール
次の項目 - Outlookマクロで迷惑メール、スパムメール、フィッシングメールの一括削除

2025/03/31 11:22 ExcelCalendar:こんにちは。対応ありがとうございます。丁寧な解説もありがとうございます。
2025/03/28 19:48 ExcelCalendar:【管理人】勉強中ということだったので、六曜追加対応の解説も追記しました。
2025/03/28 15:00 ExcelCalendar:【管理人】連絡ありがとうございます。段数が少ない月の調整を3段に対応するように修正しました。
2025/03/28 13:17 ExcelCalendar:こんにちは。六曜の件で質問があります。2025年1月でマクロを実行すると一行挿入されています。六曜の終わりも31日で終わらない月もあります。確認の程、宜しくお願い致します。
2025/03/26 10:26 ExcelCalendar:六曜の対応、ありがとうございます。勉強を始めたばかりで分からない点が多いですが、こちらのサイト見てマクロに強くなりたいと思います。今後とも宜しくお願い致します。
2025/03/25 11:32 ExcelCalendar:【管理人】エクセルでカレンダーを作成するマクロに六曜対応を追加しました。ダウンロードは六曜非対応版と2つに分けています。
2025/03/25 09:49 ExcelCalendar:【管理人】そうですね。六曜はwebAPIからなら取得できそうなので、処理時間は増えそうですが、考えてみます。
2025/03/24 13:25 ExcelCalendar:こちらを使用しております。六曜の対応をしたいのですが分かりません。テンプレートはございますか?
2025/03/18 18:48 MailDelete:【管理人】前回更新のOutlook迷惑メール削除マクロのバグ対応による更新。および、注意事項を追記しました。
2025/03/14 12:15 MailDelete:【管理人】Outlook迷惑メール削除マクロを更新しました。ホワイトリストチェックの追加と処理の軽量化、および、空メールの削除を追加。
2025/03/12 16:21 GetJPNHoliday:【管理人】2026年までの春分の日・秋分の日は、更新前のものでも対応できていることを確認したため、他のページはそのままにします。
2025/03/12 16:18 GetJPNHoliday:【管理人】国民の祝日を取得するエクセルマクロ。2050年までの春分の日秋分の日の暫定日が国立天文台のHPに記載があったため、このページのみ更新しました。
2025/03/11 11:54 MakeFolderAndStore:【管理人】ダウンロードファイル内のみ同じマクロを含むため、こちらも更新しました。#Windows日付表示形式変更対応
2025/03/11 11:52 GetFileMadeDate:【管理人】画像の撮影日取得マクロのWindows日付表示形式変更対応。更新しました。
2025/03/11 11:23 MakeFolderAndStore:【管理人】なるほど。Windowsの設定で表示形式が変更可能なのですね。対処しておきます。連絡ありがとうございます。
2025/03/10 22:05 HowToResolutionERROR:こちらの環境で、https://dekiru.net/article/23658/ これをやったからですね。windowsは表示日付のフォーマット変更が出来るので、その影響を受けたためかと。
2025/03/10 22:01 HowToResolutionERROR:replaceでは2が空文字に置き換わっているため、「"5/03/09(日)"」になっています
2025/03/10 22:01 HowToResolutionERROR:topString = Mid(dateString, 1, 1)では2が取得されており、
2025/03/10 22:01 HowToResolutionERROR:日時変換(dateString As String) の段階で"25/03/09(日) 21:36"になり、
2025/03/10 14:30 MakeFolderAndStore:【管理人】撮影日に曜日の日本語が入るケースがこちらの環境では確認できませんでした。再現できない事象に関しては対処が難しいです。Win11やWin10で書き換えをした場合、曜日は入らないです。
2025/03/10 12:57 AllFile-Trimming:【管理人】画像まとめて一括トリミングに高解像度画像の保存版を追加しました。半自動程度と思ってください。正しく対応するならPublisherを使用する必要がありそうです。
2025/03/09 21:48 MakeFolderAndStore:If IsDate(日時変換(dateString)) = True Then ここが日付判定されずに落ちますね。日時変換の中身が「"5/03/09(日)"」になっています。
2025/03/07 14:41 AllFile-Trimming:【管理人】バグ対応 画像まとめて一括トリミング 拡張子の大文字対応に不備があったので、上げなおしました。申し訳ありません。(v3r1)
2025/03/07 14:38 AllFile-Trimming:【管理人】ユーザ操作の模倣で、「図の保存」操作をVBにさせることでできるか試してみます
2025/03/07 14:37 AllFile-Trimming:【管理人】書き込みありがとうございます。確かに今の保存方法だと96dpiですね。VBからの画像ファイル書き出し命令では、解像度維持が難しそう。
2025/03/04 13:59 AllFile-Trimming:オプション「ファイル内のイメージを圧縮しない」にチェックを入れたりしてみたのですが変わりませんでした。もしご存じでしたら圧縮されない方法をご教示いただけますと幸いです。
2025/03/04 13:58 AllFile-Trimming:一括トリミングを使用させていただいたのですが、保存前(300dpi)後(96dpi)で解像度が変わってしまいます。
2025/02/28 12:40 AddPictWord:【管理人】新規記事 「Wordへの画像貼り付けマクロ(Wordマクロ)」を追加しました。
2025/02/28 12:39 AllFile-Trimming:【管理人】画像まとめて一括トリミングを更新。拡張子が大文字の場合に対応しました
2024/12/26 09:45 MakeFolderAndStore:【管理人】同じくファイルを年月別のフォルダに振り分けを行うマクロの撮影日取得箇所に同じ修正処置を入れています。
2024/12/26 09:43 GetFileMadeDate:【管理人】画像ファイルや動画ファイルの撮影日を取得するマクロのバグ対応を処置して更新しています。
2024/11/24 18:53 ExcelFlowChart:試してみたいと思います。ありがとうございます。
2024/09/09 11:11 MoveSheetstoOtherBook:ありがとうございます!
2024/09/05 09:38 GetJPNCodeStock:【管理人】Windows Updateによって、EdgeのVersionが上がったのであれば、Edgeドライバも最新にしてください
2024/09/05 09:35 GetJPNCodeStock:【管理人】確認しましたが、サイトに変更はないため、コードに変更はありません。
2024/08/30 12:50 GetJPNCodeStock:昨日がら取得エラーになってしまいます。
2024/08/10 09:40 MailDelete:削除済みに入っているようです。確認不足で申し訳ありませんでした。
2024/08/08 10:53 MailDelete:受信タイミングで deleteした場合削除済みに入らず、消えてしまうようなのですが、削除済みに入れれますか。
2024/08/08 10:19 MailDelete:受信タイミングで Call item.Delete
2024/08/05 13:32 MoveSheetstoOtherBook:【管理人】フォルダ参照へのリンクミスを修正
2024/08/05 11:02 AllFile-Trimming:【管理人】保存フォルダを開くボタンの追加と対象画像ファイルを明記しました。あとは、パスが長すぎると保存できないかもしれません。
2024/07/31 19:34 AllFile-Trimming:画像をまとめて一括でトリミング出来るツールを探していて、こちらにたどり着きました。DLさせていただいたのですが、トリミングした写真が保存できません。使用方法が間違っているのでしょうか?
2024/06/02 08:11 MailDelete:【管理人】コメントありがとうございます。質問はうちの記事と関係なそそうですが、「セル範囲のロック」で調べてみてください。
2024/07/24 09:49 MailDelete:ハイパーリンクを消そうとすると「選択範囲が保護されており・・」で出来ません、良い方法をご教示ください。
2024/07/24 09:34 MailDelete:まさにほぼ同じブラックリストで削除するのが大変でした。私は迷惑メールホルダーに隔離していますが、
2024/06/13 14:04 SearchWordFileTool:【管理人】ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツールで図形検索を追加対応しました。
2024/06/12 16:26 SeikiHyougenTool:【管理人】エクセルで正規表現検索と置換を行うためのツールに図形内文書も追加対応しました。
2024/06/06 22:03 FixNumbering:【バグ対応】章番号や項目番号の連番を自動訂正 正規表現の半角/全角 区別を修正(IgnoreCase=TRUEをFALSEに変更)
2024/06/02 08:11 SeikiHyougenTool:【管理人】新規記事の追加「エクセルで正規表現検索を行うためのツール」
2024/06/02 08:09 StringOperation-VBA:【管理人】バグ対応「文字列操作・正規表現」半角/全角 区別の判定が逆だったので、訂正。
2024/05/13 11:09 inputSupport-ShortCut:【管理人】バグ対応「自作カレンダーフォームをショートカットキーで呼び出そう」で複数ブックからの呼び出しで既にブックが閉じられていた場合の処置が抜けていたので追記
2023/08/31 10:01 CalendarForm:8/29に質問をしたものです。自己解決できましたので連絡いたします。お騒がせいたしました。
2023/08/29 10:24 CalendarForm:お世話になっております、「クラス型の変数を配列定義」の部分で「ユーザー定義型が定義されていません」と表示されてしまいます。何か確認、設定すべき事項はありますでしょうか?
2023/08/28 13:40 GetFilesPath:【管理人】バグ対応 ファイルリストの作成(GetAllFile)呼び出しの変更
2023/08/28 13:39 Supportffmpeg:【管理人】記事追加のおしらせ。ffmpegを使用した動画編集補助ツールの記事を追加しました。
2023/07/16 23:38 StringOperation-VBA:【管理人】RExp_FindStrArr関数で一致文字列が見つからない場合のバグ対応を実施
2023/07/03 18:40 ExcelFlowChart:【管理人】フローチャート入力補助ツールにコメント文をテキスト出力する機能を追加しました
2023/06/24 14:50 GetFilePath:【管理人】ファイル参照(初期フォルダ指定)のバグ対応を行いました
2023/06/12 12:13 CalendarForm:【管理人】カレンダーフォームを祝日表示に対応させました。
2023/06/07 12:35 CalendarForm:コメントありがとうございます。自作のカレンダフォームは、祝日に対応していません。
2023/06/07 09:51 CalendarForm:大変参考になります。祝日を列挙したシートがありますが、祝日を赤色にする方法はご説明されていますでしょうか
2023/06/07 09:51 inputSupport-ShortCut:祝日を列挙したシートがありますが、祝日を赤色にする方法はご説明されていますでしょうか
2023/05/19 14:09 Init-Excel:管理人による書き込み確認