【GAS】配列内の部分一致検索を効率的に行う方法
Google Apps Script(GAS)を使うと、配列内で部分一致する要素を検索することができます。この機能は、特定の条件に一致するデータを効率的に抽出するのに役立ちます。この記事では、配列の部分一致検索を行う方法と、具体例を詳しく解説します。
目次
配列内の部分一致検索の基本的な方法
配列内で部分一致を検索するには、JavaScriptの以下のメソッドを活用します。
基本的な検索方法
メソッド | 説明 |
---|---|
Array.prototype.filter | 条件を満たすすべての要素を抽出して新しい配列を返す |
String.prototype.includes | 部分一致の判定に使用(指定した文字列が含まれているかをチェック) |
String.prototype.indexOf | 指定した文字列が最初に現れるインデックスを取得(-1の場合は存在しない) |
部分一致検索の基本構文
const result = array.filter(item => item.includes("検索文字列"));
具体例1: 単純な部分一致検索
以下の例では、配列内に「apple」が含まれる要素をすべて抽出します。
function searchInArray() {
const fruits = ["apple", "banana", "grape", "pineapple", "orange"];
const searchTerm = "apple";
const result = fruits.filter(item => item.includes(searchTerm));
Logger.log(result); // ["apple", "pineapple"]
}
コードのポイント
filter
メソッドを使用して条件に一致する要素を抽出。includes
メソッドを使用して部分一致を判定。
具体例2: 複数条件での部分一致検索
複数の検索条件を設定し、それらに部分一致する要素を抽出する例です。
function searchInArrayMultipleConditions() {
const fruits = ["apple", "banana", "grape", "pineapple", "orange"];
const searchTerms = ["apple", "orange"];
const result = fruits.filter(item =>
searchTerms.some(term => item.includes(term))
);
Logger.log(result); // ["apple", "pineapple", "orange"]
}
コードのポイント
some
メソッドを使用して複数条件を評価。- 条件のいずれかに一致する場合のみ抽出。
具体例3: スプレッドシートのデータから部分一致を検索
スプレッドシートのデータを配列として取得し、その中で部分一致検索を行う例です。
function searchInSpreadsheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues().flat(); // 2次元配列を1次元配列に変換
const searchTerm = "apple";
const result = data.filter(item => typeof item === "string" && item.includes(searchTerm));
Logger.log(result);
}
コードのポイント
- スプレッドシートのデータを
getValues
で取得し、1次元配列に変換。 - 数値や空白を除外するため、
typeof item === "string"
で文字列を判定。
具体例4: 部分一致の検索結果をスプレッドシートに書き出す
検索結果をスプレッドシートに記録する例です。
function writeSearchResultsToSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues().flat();
const searchTerm = "apple";
const result = data.filter(item => typeof item === "string" && item.includes(searchTerm));
// 結果を新しいシートに書き出し
const resultSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Results") ||
SpreadsheetApp.getActiveSpreadsheet().insertSheet("Results");
resultSheet.clear(); // シートをクリア
result.forEach((item, index) => {
resultSheet.getRange(index + 1, 1).setValue(item);
});
}
コードのポイント
filter
で検索した結果をスプレッドシートに書き出し。- 結果を書き込む専用シート(
Results
)を作成・更新。
注意点
大文字小文字の区別
includes
はデフォルトで大文字小文字を区別します。無視する場合はtoLowerCase()
で文字列を統一します。
item.toLowerCase().includes(searchTerm.toLowerCase());
検索速度
- 配列が非常に大きい場合、
filter
の処理に時間がかかることがあります。その場合は検索条件を効率化してください。
スプレッドシートのデータ型
- 数値や空白セルを処理に含めるとエラーが発生する可能性があるため、
typeof
を使って型を確認しましょう。
まとめ
この記事では、GASで配列内の部分一致検索を効率的に行う方法を解説しました。
- 基本的な
filter
とincludes
の組み合わせ - 複数条件での検索やスプレッドシートデータの処理
- 検索結果をスプレッドシートに書き出す応用例
これらの方法を活用し、配列データの検索や分析を効率化しましょう!