見出し画像

【GAS】GoogleAppsScript 100本ノック 11~20本目

初心者向けの、GASの学習教材が少ないため、作成しました。
全100問まで、投稿予定です。

GoogleAppsScriptは、Googleの各種ツールとの連携が魅力ですので、各種ツールとの連携を一通り学べるような内容にしています。

記事作成の励みになりますので、是非「スキ」をお願い致します。



▼ 前回はコチラです。


11. 範囲のクリア

問題文:
Google Sheetsの範囲A1のデータをクリアするスクリプトを作成しなさい。

回答:

function clearRange() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:B10');
range.clear();
}

解説:
このスクリプトは、範囲A1のデータをクリアします。
range.clear()で指定された範囲内のセルの内容、フォーマット、およびコメントをすべてクリアします。


12. 条件付き書式の設定

問題文:
Google Sheetsの範囲A1に、セルの値が50より小さい場合に赤色の背景色を設定する条件付き書式を追加するスクリプトを作成しなさい。

回答:

function setConditionalFormatting() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:A10');
var rule = SpreadsheetApp.newConditionalFormatRule().whenNumberLessThan(50).setBackgroundColor('#FF0000').setRanges([range]) .build();
var rules = sheet.getConditionalFormatRules();
rules.push(rule);
sheet.setConditionalFormatRules(rules);
}

解説:
このスクリプトは、範囲A1に条件付き書式を追加し、セルの値が50より小さい場合に赤色の背景色を設定します。SpreadsheetApp.newConditionalFormatRule()で新しい条件付き書式ルールを作成し、whenNumberLessThan(50)で条件を設定し、setBackgroundColor('#FF0000')で背景色を指定しています。


13.セルの背景色変更

問題文:
Google Sheetsの範囲B1の背景色を青色に変更するスクリプトを作成しなさい。

回答:

function changeBackgroundColor() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('B1:B10');
range.setBackground('#0000FF');
}

解説: このスクリプトは、範囲B1の背景色を青色に変更します。
range.setBackground('#0000FF')で指定された範囲のセルの背景色を青色に設定します。


14. セルのフォントスタイル変更

問題文:
Google Sheetsの範囲C1のフォントを太字に変更するスクリプトを作成しなさい。

回答:

function changeFontStyle() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('C1:C10');
range.setFontWeight('bold');
}

解説:
このスクリプトは、範囲C1のフォントを太字に変更します。
range.setFontWeight('bold')で指定された範囲のセルのフォントを太字に設定します。



15. セルのコメント追加

問題文:
Google SheetsのセルD1に「This is a comment」というコメントを追加するスクリプトを作成しなさい。

回答:

function addComment() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var cell = sheet.getRange('D1');
cell.setComment('This is a comment');
}

解説:
このスクリプトは、セルD1に「This is a comment」というコメントを追加します。
cell.setComment('This is a comment')で指定されたセルにコメントを追加します。


16. 特定の文字列を含むセルをハイライト

問題文:
Google Sheetsの範囲A1で、「Error」という文字列を含むセルを黄色でハイライトするスクリプトを作成しなさい。

回答:

function highlightCellsWithText() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:C10');
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
 for (var j = 0; j < values[i].length; j++) {
  if (values[i][j].toString().indexOf('Error') != -1) {
   sheet.getRange(i+1, j+1).setBackground('yellow');
  }
 }
}
}


解説:
このスクリプトは、範囲A1で「Error」という文字列を含むセルを黄色でハイライトします。
range.getValues()で範囲内のセルの値を取得し、二重ループを使用して各セルをチェックします。
文字列に「Error」が含まれる場合、そのセルの背景色を黄色に設定します。


17. シートからデータを検索

問題文:
Google Sheetsの範囲A1で、「John」という名前を検索し、見つかった場合はそのセルのアドレスをログに表示するスクリプトを作成しなさい。

回答:

function searchData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:B10');
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
 for (var j = 0; j < values[i].length; j++) {
  if (values[i][j] === 'John') {
  Logger.log('Found "John" at: ' + sheet.getRange(i+1, j+1).getA1Notation());
  }
 }
}
}

解説:
このスクリプトは、範囲A1で「John」という名前を検索し、見つかった場合はそのセルのアドレスをログに表示します。
sheet.getRange(i+1, j+1).getA1Notation()でセルのアドレスを取得し、Logger.logでログに表示します。


18. 正規表現を使ったデータ検索

問題文:
Google Sheetsの範囲A1で、メールアドレス形式の文字列を検索し、見つかった場合はそのセルのアドレスをログに表示するスクリプトを作成しなさい。

回答:

function searchWithRegex() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:B10');
var values = range.getValues();
var emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
for (var i = 0; i < values.length; i++) {
 for (var j = 0; j < values[i].length; j++) {
  if (emailPattern.test(values[i][j])) {
  Logger.log('Found email at: ' + sheet.getRange(i+1, j+1).getA1Notation());
  }
 }
}
}

解説:
このスクリプトは、範囲A1でメールアドレス形式の文字列を検索し、見つかった場合はそのセルのアドレスをログに表示します。
正規表現emailPatternを使用して、文字列がメールアドレス形式かどうかをチェックします。

19. シートの保護と解除

問題文:
Google Sheetsのアクティブシートを保護し、特定のユーザーに編集権限を与えるスクリプトを作成しなさい。
また、シートの保護を解除するスクリプトも作成しなさい。

回答:

function protectSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var protection = sheet.protect().setDescription('Protected Sheet');
protection.addEditor('user@example.com');
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}

function unprotectSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var protection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
if (protection) {
protection.remove();
}
}

解説:
protectSheet関数はアクティブシートを保護し、特定のユーザー(user@example.com)に編集権限を与えます。
protection.removeEditors(protection.getEditors())で他のすべての編集者を削除し、setDomainEdit(false)でドメイン全体の編集権限を無効にします。

unprotectSheet関数はシートの保護を解除します。
sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0]でシートの保護オブジェクトを取得し、protection.remove()で保護を解除します。


20. シートのフィルタ機能の使用

問題文:
Google Sheetsの範囲A1にフィルタを適用し、B列の値が「Complete」の行のみを表示するスクリプトを作成しなさい。


回答:

function applyFilter() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:B10');
var filter = range.createFilter();
var criteria = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('Complete').build();
filter.setColumnFilterCriteria(2, criteria);
}

解説:
このスクリプトは、範囲A1にフィルタを適用し、B列の値が「Complete」の行のみを表示します。
range.createFilter()でフィルタを作成し、SpreadsheetApp.newFilterCriteria().whenTextEqualTo('Complete').build()でB列の値が「Complete」の行を表示する条件を設定します。
filter.setColumnFilterCriteria(2, criteria)でB列にフィルタ条件を適用します。

この記事が気に入ったらサポートをしてみませんか?