プロが教える店舗&オフィスのセキュリティ対策術

複数人でスプレッドシート利用して業務管理を行おうとしています。
初心者のため色々なサイトやテンプレをコピペしながらスクリプトを作成しましたが、
エラーがでてしまうので、スクリプト記述をご教示いただきたいです。

管理表はスプレッドシートの列にいくつか項目を設けており、
A列:進捗ステータス、B列:担当者に対して処理を行いたいです。

①選択しているセルのA列が「完了」でない、かつ、B列に必ず担当者が記載されている
→スクリプトを実行すると、A列に「完了」と入力し、担当者欄を青にする
→「完了しました」のメッセージボックスを出す
②A列が「完了」になっている、もしくは選択しているセルがグレー
→メッセージボックス「完了しています」
③それ以外
→「処理できません」

①~③の処理をスクリプトで処理しようとコピペ等で作成しました。
追加メニューの自動処理から実行する形になります。
-----------------------------------------------
function finished(){

var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();
var contents = sheet.getRange(i,1).getValues()

if(i = 1; contents[i][0] == '' && contents[i][2] != ''){ //処理①
sheet.getRange(i, 1).setValue('完了');
sheet.getRange(i, 2).setBackgroundRGB(0, 0, 255);
Browser.msgBox('完了しました');
}else if(contents[i][0] == '完了){ //処理②
Browser.msgBox('完了しています');
}else{ //処理③
Browser.msgBox('処理できません。');
}
}

//シートを開いたら実行
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();

//カスタムメニュー「自動処理」作成
var subMenu = [
{name: '完了処理', functionName: 'finished'},
];

sheet.addMenu('自動処理', subMenu);

}
-----------------------------------------------
理解もできていないままつぎはぎで記述しているのでエラーばかりです。。。
またグレーRGB(242, 242, 242), RGB(217, 217, 217), RGB(192, 192, 192)を取得したいのですが、取得方法がわからず記載できてません。
また複数人で同時に処理を行う場合もありますので、重複しないようにする方法はありますでしょうか?
ご教示いただけますと幸いです。よろしくお願いいたします。

質問者からの補足コメント

  • ご回答いただいありがとうございます。
    大変助かりました。

    処理②ですが、スクリプトを実行したところセルがグレーの場合に処理①が実行されてしまいました。
    こちらの原因がわからず…
    セルの色が指定のグレーと違っている以外に原因は考えられますでしょうか?
    度々のご質問となり申し訳ございませんが、ご教示いただけますと幸いです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/01/18 13:36

A 回答 (2件)

どうぞ。



function finished(){

var blue = '#0000ff';
var glay1 = '#f2f2f2';
var glay2 = '#d9d9d9';
var glay3 = '#c0c0c0';

var aColumn = 1;
var bColumn = 2;
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();
var finishCell = sheet.getRange(range.getRowIndex(), aColumn);
var personCell = sheet.getRange(range.getRowIndex(), bColumn);
var activeColor = range.getBackground();

if(finishCell.getValue() == '' && personCell.getValue() != ''){ //処理①
finishCell.setValue('完了');
personCell.setBackground(blue);
Browser.msgBox('完了しました');
}else if(finishCell.getValue() == '完了' || activeColor == glay1 || activeColor == glay2 || activeColor == glay3){ //処理②
Browser.msgBox('完了しています');
}else{ //処理③
Browser.msgBox('処理できません。');
}
}

//シートを開いたら実行
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();

//カスタムメニュー「自動処理」作成
var subMenu = [
{name: '完了処理', functionName: 'finished'},
];

sheet.addMenu('自動処理', subMenu);

}


>またグレーRGB(242, 242, 242), RGB(217, 217, 217), RGB(192, 192, 192)を取得したいのですが、取得方法がわからず記載できてません。
取得できないようなので16進数のまま使うのが良いかと思います。
どうしても使いたかったら自前で変換しましょう。

var glay1 = '#f2f2f2'; ・・・=(242, 242, 242)
var glay2 = '#d9d9d9'; ・・・=(217, 217, 217)
var glay3 = '#c0c0c0'; ・・・=(192, 192, 192)

>また複数人で同時に処理を行う場合もありますので、重複しないようにする方法はありますでしょうか?
こちらは存じません。
通常の編集ではログインしている人と編集しているセルが見えるはずですが・・・
この回答への補足あり
    • good
    • 0

補足に回答します。



A列が空、B列が空ではない場合、処理①に入ってしまうため、処理②になりません。

対応するには以下のようにしてください
・処理①と処理②の順序を変える
または
・処理①の条件にグレー以外という条件を加える
→if(finishCell.getValue() == '' && personCell.getValue() != '' && !(finishCell.getValue() == '完了' || activeColor == glay1 || activeColor == glay2 || activeColor == glay3))
    • good
    • 0
この回答へのお礼

補足していただいた条件に変更したところ正常に処理を実行することができました!
ありがとうございました。

お礼日時:2017/01/18 19:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!