• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Google Apps Scriptのシート名選択)

Google Apps Scriptのシート名選択

spacious2の回答

  • ベストアンサー
回答No.1

こんにちは。 この質問をきっかけに触ってみた感じなので、ベストなやり方かどうか不明ですが、とりあえず以下のようにしてみたところ、ご希望の動作と同じ挙動になったようです。 「作業中のシートのシート名が'シート1'だったら」という条件を加えました。 function insertLastUpdated() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('シート1'); // rangeXとYにカーソル座標を代入 var rangeX = sheet.getActiveCell().getColumn(); var rangeY = sheet.getActiveCell().getRow(); // シートの座標1,1(A1)が編集されたらB1に現在時刻を打刻(トリガーを編集時に指定) if((rangeX==1&&rangeY==1)&&(ss.getActiveSheet().getName()=='シート1')){ sheet.getRange("B1").setValue(new Date()); } }

RINACHIN55
質問者

お礼

出来ました! ありがとうございます。 まだ = とか & とかエクセルとの違いに頭悩ませちゃたり 出来るってだけで嬉しいのですごく助かりました。 ifの作りとかドットの使い方とか何をどう呼び出すかとかピンときた気がします、 ご教授ありがとうございました。

関連するQ&A

  • Google Scriptの別シートの参照

    現在、アクティブなスプレッドシートと同じシート名で、 別のスプレッドシートの同じシート名を 参照したいのですが、 getRangeで、リファレンスエラーになります。 var mySS = SpreadsheetApp.getActiveSpreadsheet(); mySS.getSheets()[j].activate(); var ss_copyFr = SpreadsheetApp.openById(GetID); var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet(); var sheet_copyFr = ss_copyFr.getSheetByName(name); var sheet_copyTo = ss_copyTo.getSheetByName(name); var d = sheet_copyFr.getRange('A1').getValues();              ~~~~~~~~~~~~~~~~~~~~~~~~~~ 何か、 よい解決策は、ありますでしょうか? よろしくお願いします。

  • Googleドライヴのスクリプト実行

    Googleドライヴの「承認が必要です」で困っています。 さて今回なのですが、Googleドライヴに関する件なのですが Googleドライヴにあるエクセルのシートなのですが(本当はgsheet) 月替わりに消し込みのスクリプトを実行しています、シートの上部の「ツール」から「スクリプトエディタ」で スクリプトの実行(▶)をクリックで実行していましたが、最近「承認が必要です」と出ます先々月まではアカウントのクリックで「詳細を表示」で「安全では無いページ」クリックで実行していたのですが最近テキストを入力画面が出て、何を入力したら良いのか分からずスクリプトが実行出来ません。 できれば「承認が必要です」を出なくする方法が知りたいです、難しい場合は、テキストを入力画面で何を入力すればスクリプトが実行されるか教えて下さい。 宜しくお願い致します。 ちなみにスクリプトは以下です。 function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('Sheet01'); sheet.getRange('F5:F32').clearContent(); sheet.getRange('H5:H32').clearContent(); sheet.getRange('J5:J32').clearContent(); sheet.getRange('L5:L32').clearContent(); sheet.getRange('N5:N32').clearContent(); sheet.getRange('P5:P32').clearContent(); sheet.getRange('R5:R32').clearContent(); sheet.getRange('T5:T32').clearContent(); sheet.getRange('V5:V32').clearContent(); sheet.getRange('X5:X32').clearContent(); sheet.getRange('Z5:Z32').clearContent(); sheet.getRange('AB5:AB32').clearContent(); sheet.getRange('AD5:AD32').clearContent(); sheet.getRange('AF5:AF32').clearContent(); sheet.getRange('AH5:AH32').clearContent(); sheet.getRange('AJ5:AJ32').clearContent(); sheet.getRange('AL5:AL32').clearContent(); sheet.getRange('AN5:AN32').clearContent(); sheet.getRange('AP5:AP32').clearContent(); sheet.getRange('AR5:AR32').clearContent(); sheet.getRange('AT5:AT32').clearContent(); sheet.getRange('AV5:AV32').clearContent(); sheet.getRange('AX5:AX32').clearContent(); sheet.getRange('AZ5:AZ32').clearContent(); sheet.getRange('BB5:BB32').clearContent(); }

  • google apps scriptの終了のさせ方

    google apps scripの初心者ですが、次のような関数setDatafromCurrent()の(1)でプログラムを終了するにはどうすればよいのでしょうか?  /* 転記PTデータ ピボットテーブルのデータを新しい列に貼り付けてそのまま実行してください。 カレントセルがデータの挿入列位置として使われます。 */ function setDatafromCurrent() { var SRCy = 10; var SRCx = 5; var DESTy = 7; var DESTx = 5; var DESTyLEN = 8; var mySheet = SpreadsheetApp.getActiveSheet(); var cCur = mySheet.getActiveCell(); SRCx = cCur.getColumn(); SRCy = cCur.getRow(); if (SRCx==1 && SRCy==1) { Browser.msgBox("他の人が利用している可能性があります。"); } DESTx = SRCx; var rSRC = mySheet.getRange(SRCy, SRCx, SRCy, 2); // var rSRC = mySheet.setActiveRange(cCur.offset(0, 0, SRCy, 2)); rSRC.setBackgroundColor("#dcdcff"); // rSRC.setBackgroundRGB(220,220,255); var rData = mySheet.getRange(DESTy,DESTx, DESTyLEN,1); rData.setBackgroundColor("#e6ffe6"); var ynAns = Browser.msgBox("転記しますか?",Browser.Buttons.YES_NO); if (ynAns=="no") { ・・・ (1)  ここで、プログラムを終了させたい。! } else { rData.activate(); cCur = mySheet.getActiveCell(); cCur.offset(1,0).setValue(rSRC.offset(1,1,1,1).getValue()); cCur.offset(7,0).setValue(rSRC.offset(5,1,1,1).getValue()); cCur.offset(8,0).setFormula("=SUM(R[-3]C[0]:R[-1]C[0])"); mySheet.setActiveRange(cCur.offset(0, 1, 1, 1)); } ynAns = Browser.msgBox("元のデータを消去しますか?",Browser.Buttons.YES_NO); if (ynAns=="no") { } else { rSRC.clearContent(); } rSRC.clearFormat(); rData.clearFormat(); } function 背景色の取得() { var mySheet = SpreadsheetApp.getActiveSheet(); var cCur = mySheet.getActiveCell(); cCur.setBackgroundRGB(230, 241, 210); var BG_color = cCur.getBackgroundColor(); Logger.log(BG_color); Browser.msgBox(BG_color); }

  • Google Apps Scriptの記述

    フォームに入力したら、フォームに基づいてメールを送れるようにしたいと考えています。 そこで次のScriptを記述しました。しかし、フォームに入力し終わってもメールが送信されません。 Google Apps Scriptの参考サイトも無い事と、Googleも仕様を次々新しくしているので持っている書籍があまり参考になりません。 トリガーは次の通りです。 現在のプロジェクトのトリガーで、実行 mySendhokoku イベントスプレッドシートからフォーム送信時 としています。 scriptは function mySendhokoku(e) { var mail_to=e.nameValues["送信先"]; var datetime= new Date(); var hokoku=e.nameValues["報告種類"]; var kaisi=e.nameValues["開始時間"]; var shuryo=e.nameValues["終了時間"]; var kyukei=e.nameValues["休憩時間"]; var biko=e.nameValues["本文備考"]; var today=formatDate(datetime,"MM/dd"); var subject=hokoku+"連絡"+today+"名前"; var body="名前"+"\n\n"; var body=body+"開始時刻"+kaisi+"\n\n"; var body=body+"終了時刻"+shuryo+"\n\n"; var body=body+"休憩時間"+kyukei+"\n\n"; var body=body+biko+"\n\n"; MailApp.sendEmail(mail_to,subject,body); } ちなみに”名前”と言うところは実際は私の名前が入っています。読み替えてください。 日付は5/5などの様に記述したいと思っています。 初心者で至らない点ありますが、よろしくお願いいたします。

  • スクリプトについて、ご回答をお願いいたします。

    スクリプト初心者です。。。 どなたかご教示いただけますと幸いです。 スプレッドシートにて勤怠管理シートを作成しています。 チャットワークからの打刻データ(時間と社員ID)をもとに、それをスプレッドシートに出力するというスクリプトです。 スクリプトを組んでみたのですが、 動作は無事にしているのですが、 ”データ”シートのE列・F列、つまりは打刻時間が表示される部分に 通常では、時間のみ(10:00)という打刻のみ表示されるようスクリプトを組んでいるはずのなのですが、 1899/12/31 10:07:00といったように日付と時間それぞれが打刻されてしまい、 勤怠管理シートの計算がうまくいかないようになってしまいました。 スプレッドシートの表示切替を10:00などにしても、 入力されているデータが上記日付と時間のため、 上手く計算が実行されないのです……。 お忙しいところ、大変恐縮ではございますが、 どなかたご教示お願いできますでしょうか…?

  • Googleスプレッドシートとスクリプト

    Googleスクリプトで、別に作ったスプレッドシートを利用したいのですが、 var SheetID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; var EventSpSheet = SpreadsheetApp.openById(SheetID); var sheet = EventSpSheet.setActiveSheet(EventSpSheet.getSheets()); と書くと、「Array を Sheet に変換できません。」とエラーが返ってきます。 どこがいけないのか分かる方教えて下さい。 よろしくお願いいたします。

  • スクリプトの#N/A対策

    前回は大変丁寧な回答ありがとうございました。 申し訳ありません、今一度スプレットシートで 1つ教えて頂けないでしょうか。 前回同様の内容に入力列を1つ追加したいのです。 入力シートと単価シートがあります。 入力シートはA列から品番,単価1,単価2,単価3,部品,単価1,単価2,単価3となります。 単価シートはA列から品番,単価1,単価2,単価3で3行、1行空けて6行からは 部品,単価1,単価2,単価3で3行になります。 品番  単価1 単価2 単価3 あ   50 60 70 い   80 90 100  う   110 120 130 QQ   10 20 30 WW   40 50 60 EE   70 80 90 この様になります。 入力シートのA列で品番,E列で部品を入力すると単価シートを参照し B列からD列に品番単価,F列からH列に部品単価が表示されるようにしました。 そこで現状のコードだとE列に値が無くても部品単価1,2,3に#N/Aが セットされてしまいます。 下記のコードをA列,E列がセットされていない時は何もしないようにしたいのです。 function WriteVlookup() { var sheet = SpreadsheetApp.getActive().getSheetByName('入力シート'); var myCell = sheet.getActiveCell(); var myRow=myCell.getRow(); var myColumn=myCell.getColumn(); if(myColumn==1 && myRow>=2 ){ for(var i = 2; i <= 4; i++) { strformula ='=VLOOKUP($A' + myRow + ',\'単価シート\'!$A$2:$D$4,' + i + ',False)'; sheet.getRange(myRow, i).setFormula(strformula); strformula2 ='=VLOOKUP($E' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False)'; sheet.getRange(myRow, i + 4).setFormula(strformula2); } } }; 例えば入力シートであと A列に入力すると E列まだ空白なのでF列からは#N/Aと表示されてしまいます。 A   B C D E F G H あ  50 60 70 #N/A #N/A #N/A い 80 90 100 QQ 40 50 60 上記のコードをどのように修正すれば#N/Aが 表示されなくなりますか? 宜しくお願いします。

  • スプレッドシートの自動更新日付ずれる

    スプレッドシートである管理表を作成して、何かしたらのセルを編集するとB列の更新日に自動で現在日時が反映されるスクリプト組んで使用していました。 ところが、いつからか管理表を更新するとB列は自動更新されるのですが、現在日時より16時間前の日付で表示されるようになってしまいました。 例えば実際にセル更新した日時が2024/05/29 16:45だとすると、B列のセルには2024/05/29 00:45と表示されるようになります。 スクリプトは設定変更していないため、原因がわかりません。 実際に設定しているスクリプト構文を記載しますので、原因等わかれば教えてほしいです。 function insertLastUpdated() { var ss = SpreadsheetApp.getActiveSheet(); var currentRow = ss.getActiveCell().getRow(); var currentCell = ss.getActiveCell().getValue(); var updateRange = ss.getRange('B' + currentRow) //更新日をいれる列をstringで指定。この場合はB列 Logger.log(updateRange); //更新日の記入 if(currentRow>1){ if(currentCell) { updateRange.setValue(new Date()); } } }

  • スプレッドシートのVLOOKUPについて

    スプレッドシートで1つ教えて下さい。 A列のプルダウンで選択すると別シートの品番単価表を参照し B列からD列に単価が表示されるようにしました。 同様にE列プルダウンで選択すると別シートの部品単価表を参照し F列からH列に単価が表示されるようにしました。 単価の値を変更後、再度プルダウンから値を選択すると 再度参照するように前回いろいろと教えて頂き下記のようなコードを書きました。 function WriteVlookup() { var sheet = SpreadsheetApp.getActive().getSheetByName('入力シート'); var myCell = sheet.getActiveCell(); var myRow=myCell.getRow(); var myColumn=myCell.getColumn(); if(myColumn==1 && myRow>=2 ){ for(var i = 2; i <= 4; i++) { strformula ='=VLOOKUP($A' + myRow + ',\'単価シート\'!$A$2:$D$4,' + i + ',False)'; sheet.getRange(myRow, i).setFormula(strformula); strformula2 ='=VLOOKUP($G' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False)'; sheet.getRange(myRow, i + 6).setFormula(strformula2); } } }; しかしE列に値がなくてもセットしてしまい #N/Aが表示されてしまいます。 例えば 単価シート(2から4行目は品番単価、6から8行目は部品単価) 品番  単価1 単価2 単価3 あ   50 60 70 い   80 90 100  う 110 120 130 QQ 10 20 30 WW 40 50 60 EE 70 80 90 入力シート A   B C D E F G H あ  50 60 70 #N/A #N/A #N/A い 80 90 100 QQ 40 50 60 上記の式をどのように修正すれば#N/Aが 表示されなくなりますか? 分かる方おられましたら 教えて頂けないでしょうか。 宜しくお願いします。

  • GASスプレッドシートの編集した行を取得

    Googleappsのスプレッドシートのスクリプトで 何か文字を入力したらその行を取得したいのです onEditイベントにて function onEdit(event) { var sheet = event.source.getActiveSheet(); var range = event.source.getActiveRange(); var rowidx = range.getRow();  sheet.getRange(rowidx, 1, 1, 4).setBackgroundColor('#a9a9a9'); } このようにすると編集した行の色が変わるので確かにrowidxに編集した行を取得できていると 思います・・・ でも編集した行と1行目の2つの色がかわってるので色を変えたことにより もういっかい編集イベントが発生してしまっているのかな??? でここからが本題なのですが Logger.log(rowidx);を最後の行に追加して確認すると 1.0という値がセットされているのです スプレッドシートを編集したのは10行目だとしても・・・ もしかしてイベントが2回発生していてログには最後に実行されたものしか セットされてないから1.0になっているのかなと想像し 最後の行に以下のように記述して値を確認しました MailApp.sendEmail("hogehoge@xxxxx.xx", "test", rowidx); 飛んでくるメールは1通だけ(イベントは2回発生していない?) 値は1.0がセットされています スプレッドシートの何か値を変更したらその行番号の値を 取得するにはどうしたらいいでしょうか?