スプレッドシート用にGoogleアプリでスクリプトを作成しています。これにより、列Hにアスタリスク(*)が含まれる行を非表示にできます。スプレッドシートは現在 700 行以上あります。スクリプトを実行すると、完了するまでに約 90 秒かかり、結果を確認できます。誰もデータに時間を割いていないので、より効率的にしようとしています。
これは、つなぎ合わせたコードがどのように見えるかであり、より高速に書き直す方法についての手がかりがありません。ここでインスピレーションを得ました。セルの最初の文字に基づいて Google スプレッドシートの行を非表示にする
/**
* Hides rows where H = Astrisk, Unhides where H != Astrisk
*/
function updateProgram() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Week 1-4");
var data = sheet.getRange('H:H').getValues();
//iterate over all rows
for(var i=0; i< data.length; i++){
//compare first character, if asterisk, then hide row
if(data[i][0].charAt(0) == '*'){
sheet.hideRows(i+1);
} else sheet.showRows(i+1);
}
}
現在、すべての行を実行し、単一の条件で関数を実行し、すべての行で関数を実行しています。可能な解決策としてこれについて考えました。
- H = * || の場合 行が表示されている
- H != * || の場合 行が非表示の場合に表示
- そうでなければ何もしない
したがって、非表示/表示が必要な行のみが取得されます。
時間を割いて読んでいただきありがとうございます。お役に立てれば幸いです。
アップデート;
行をグループ化して、値に応じて多数の行を表示および非表示にする方法を見つけました。コードは次のようになり、実行に 10 秒かかります。
これは私の最初の自己記述コードの一部なので、フィードバックは大歓迎です!
function updateProgramWeek1to4() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Week 1-4");
var row = s.getRange('G:G').getValues();
var maxRows = s.getMaxRows();
s.showRows(1, maxRows);
for(var i=0; i< row.length; i++){
if(row[i] == '0'){
s.hideRows(i+1, 11);
}
else if(row[i] == '1'){
s.hideRows(i+3, 9);
}
else if(row[i] == '2'){
s.hideRows(i+4, 8);
}
else if(row[i] == '3'){
s.hideRows(i+5, 7);
}
else if(row[i] == '4'){
s.hideRows(i+6, 6);
}
else if(row[i] == '5'){
s.hideRows(i+7, 5);
}
else if(row[i] == '6'){
s.hideRows(i+8, 4);
}
else if(row[i] == '7'){
s.hideRows(i+9, 3);
}
else if(row[i] == '8'){
s.hideRows(i+10, 2);
}
else if(row[i] == '9'){
s.hideRows(i+11, 1);
}
else if(row[i] == '10'){
s.hideRows(i+12);
}
else if(row[i] == '11'){
s.hideRows(i+1);
}
}
}