一致したセルを抽出して新規シートに転記する
Googleスプレッドシートのアクティブなシートから、指定したキーワードを含むセルを検索し、重複するセルを抽出して、新しいシートにコピーする
- 指定したセルを検索し、そのセルに入力された値と一致するすべてのセルを検索する
- 重複するセルを抽出し、それらのセルを新しいシートにコピーする
- 新しいシートにアクティブな選択範囲を設定する
function 検索セルを選択して重複セル全て抽出して新規シート抽出() {
var key, fnd, fnd_all, adr;
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var cell = sheet.getActiveRange();
var cellValue = cell.getValue();
range.clearFormat();
// 検索キーを取得する
key = Browser.inputBox("検索するセルを選択", Browser.Buttons.OK_CANCEL);
if (key == "cancel" || key == "") {
Browser.msgBox("キャンセルされました。");
return;
}
// Findメソッドを用いてセルの検索を行う
fnd = range.createTextFinder(key).matchCase(false).matchEntireCell(false).findAll();
if (fnd.length == 0) {
Browser.msgBox("見つかりませんでした。");
return;
} else {
fnd_all = fnd;
adr = fnd[0].getA1Notation();
}
// セルの重複を抽出する
for (var i = 1; i < fnd.length; i++) {
if (fnd[i].getA1Notation() != adr) {
fnd_all = fnd_all.concat(fnd[i]);
}
}
// 抽出されたセルをハイライトする
fnd_all.forEach(function(cell) {
cell.setBackgroundRGB(204, 255, 255);
});
// 抽出されたセルの行を新しいシートにコピーする
var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
newSheet.setName(sheet.getName() + "_" + Utilities.formatDate(new Date(), "JST", "H時mm分ss秒"));
var copiedRange = fnd_all[0].getRow() + ":" + fnd_all[fnd_all.length - 1].getRow();
sheet.getRange(copiedRange).copyTo(newSheet.getRange("A1"));
// 新しいシートをアクティブにする
newSheet.setActiveSelection(sheet.getRange("A1"));
// 完了メッセージを表示する
Browser.msgBox("完了:" + fnd_all.length + "件");
}
解説
- 変数の宣言
- key:検索キーとなる文字列
- fnd:Findメソッドで検索されたセルの配列
- fnd_all:重複セルを含むすべての検索されたセルの配列
- adr:最初に検索されたセルのアドレス
- 検索キーの取得
- Browser.inputBox()メソッドを使用して、検索するセルを選択するダイアログボックスが表示されます。このダイアログボックスで入力されたテキストは、key変数に格納されます。キャンセルボタンがクリックされた場合、または空のテキストが入力された場合は、スクリプトが終了します。
- セルの検索
- Findメソッドを使用して、セルの検索を行います。ここでは、key変数に格納された文字列と一致するすべてのセルを検索します。matchCase()メソッドとmatchEntireCell()メソッドを使用して、大文字と小文字を区別せずに、セルの部分一致を検索します。Findメソッドによって返される結果は、fnd変数に格納されます。
コメント