単純に、 ss.getActiveSheet().getSheetName() でシート名を取得し、
if文かswitch文で、シート名に応じて処理を分けるというのではだめなのでしょうか。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const activeSheet = ss.getActiveSheet();
const activeSheetName = activeSheet.getSheetName();
const sheet4 = ss.getSheetByName('シート4');
// 各シートのボタンに紐付けているスクリプトは、myFunction(共通)
function myFunction() {
let values = null;
// シート名に応じて処理を分ける
switch (activeSheetName) {
case 'シート1':
// シート1の処理
values = activeSheet.getRange("A1:D3").getValues();
break;
case 'シート2':
// シート2の処理
values = activeSheet.getRange("E1:H3").getValues();
break;
case 'シート3':
// シート3の処理
values = activeSheet.getRange("A10:D12").getValues();
break;
default:
// activeSheetNameが「シート1」「シート2」「シート3」以外の場合、何もしない。
return;
}
// シート4に対して共通処理を行う
if (values != null) {
sheet4.getRange("C3:F5").setValues(values);
// ~~
}
}
コメント中のコードの修正ですが、下記のようになります。
(先頭が「+」となっている行は追加、「-」となっている行は削除)
diff
1 function 無題() {
2 var ss = SpreadsheetApp.getActiveSpreadsheet();
3
4 var sheet = ss.getSheetByName("展開");
5 sheet.getRange(1, 1).setValue("日付");
6 sheet.getRange(1, 2).setValue("会社名");
7 sheet.getRange(1, 3).setValue("No");
8
9
10 var sheet0 = ss.getActiveSheet();
11 var cell = sheet0.getActiveCell();
12
13 if (cell.getColumn() != 1) {
14 var row = cell.getRow();
15 var column = cell.getColumn();
16
17 - function myFunction() { // ここでは不要。
18 - let values = null; // 変数valuesは下記caseの中では使用していないので不要
19 - switch (sheet0) { // シートオブジェクトでswitchしてしまっているためNG。
20 + switch (sheet0.getSheetName()) { // ここではシート名でswitchするのが正しい。
21 case "T/B":
22 var value1 = cell.offset((row-1)*(-1),0).getValue();
23 var value2 = cell.offset(0,(column-1)*(-1)+2).getValue();
24 sheet.getRange(1, 1).setValue(value1);
25 sheet.getRange(1, 4).setValue(value2);
26 sheet.getRange(1, 12).setValue(value2);
27 break;
28
29 case "消費税":
30 var value3 = cell.offset((row-1)*(-1),0).getValue();
31 var value4 = cell.offset(0,(column-1)*(-1)+2).getValue();
32 var value5 = cell.offset(0,(column-1)*(-1)+1).getValue();
33
34 sheet.getRange(1, 1).setValue(value3);
35 sheet.getRange(1, 7).setValue(value4);
36 sheet.getRange(1, 15).setValue(value4);
37 sheet.getRange(1, 2).setValue(value5);
38 break;
39
40 }
41 }
42
43 sheet.getRange("A1").activate();
44
45 - }} // 「myFunction{」に対応する 「}」を削除
46 + }
今回は、無題()関数の中に、さらに関数myFunctionを入れる必要はないので、function myFunction{と対応する}の行を削除しています。
注意:switch文を使う場合、各処理の終わりのbreak を忘れないでください。
break文を適切な場所に書いていないと、次の処理まで実行されてしまいます。
(break文を忘れるリスクがあるため、switchは非推奨とし、代わりにif~else文や、関数の連想配列を使用すべき、としている説明もあります)