データベースと呼ばれる別のシートからデータを取得しています。これはベストプラクティスではないことを理解していますが、目的を果たします...これまでのところ約900行あり、列に値がある場合は列13から一意の値を取得することを考えると、コードの読み込みに時間がかかります。 1はセルB3にあるものと一致します。不思議なことに、他のシートでも問題なく動作しましたが、これで設定が完了しました。
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Edit Entry');
var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Database");
var periodList = new Array();
var activeCell = ss.getActiveCell();
if (ss.getSheetName() === "Edit Entry" && activeCell.getColumn() == 2 && activeCell.getRow() == 3) {
activeCell.offset(1, 0).clearContent().clearDataValidations();
ss.getRange("A7:L").clearContent();
var dataRng = dataSheet.getRange(2, 1, dataSheet.getLastRow(), 15).getValues();
for (var i = 0; i < dataRng.length; i++) {
if (dataRng[i].indexOf(activeCell.getValue()) != -1) {
periodList.push(dataRng[i][12]);
}
}
//This function removes duplicates from the list/array
function removeDups(periodList) {
var outArray = [];
periodList.sort();
outArray.push(periodList[0]);
for (var n in periodList) {
//Logger.log(outArray[outArray.length-1]+' = '+versionList[n]+' ?');
if (outArray[outArray.length - 1] != periodList[n]) {
outArray.push(periodList[n]);
}
}
outArray.sort();
return outArray;
}
var newPeriodList = removeDups(periodList);
var validation = SpreadsheetApp.newDataValidation();
validation.setAllowInvalid(false);
validation.requireValueInList(newPeriodList, true);
activeCell.offset(1, 0).setDataValidation(validation.build());
}
}
どんな助けでも大歓迎です!乾杯、
あなたのスクリプトを見たとき、それactiveCell.getValue()
がループで使用されていることに気づきました。これがあなたの問題の理由の一つかもしれないと思いました。そのため、今回は以下の修正を提案したいと思います。
for (var i = 0; i < dataRng.length; i++) {
if (dataRng[i].indexOf(activeCell.getValue()) != -1) {
periodList.push(dataRng[i][12]);
}
}
var v = activeCell.getValue(); // Added
for (var i = 0; i < dataRng.length; i++) {
if (dataRng[i].indexOf(v) != -1) { // Modified
periodList.push(dataRng[i][12]);
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加