質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Q&A

解決済

1回答

522閲覧

複数シートのアクティブセルの属するシートに応じた処理の構文について

0000a

総合スコア18

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

0グッド

0クリップ

投稿2021/10/02 13:00

caseに挙げられている、A~Eシートのうちのアクティブシートのアクティブセルを起点として、offsetで移動した先のセルの値をFというシートの一行目の特定箇所に貼り付けたいのですが、どうも意図した数字を拾ってくれないのですが、その原因をご教示いただけますでしょうか?

例えばCシートのH5をアクティブセルにしてこれを回すと、
Fシートの
A1 にCシートのH1(本当はCシートのA1の値を貼り付けたい)
B1 にCシートのB5(本当はCシートのH1の値を貼り付けたい)
G1 にCシートのC5(本当は税と表記してほしい)
O1 にCシートのC5(本当は税と表記してほしい)
D1、L1には意図した通りCシートのC5が反映される
となっております。大変お手数がどうぞよろしくお願い致します。

function 無題() {
var ss = SpreadsheetApp.getActiveSpreadsheet();

var sheet = ss.getSheetByName("F");
sheet.getRange(1, 1).setValue("日付");
sheet.getRange(1, 2).setValue("名");
sheet.getRange(1, 3).setValue("No");
sheet.getRange(1, 4).setValue("科目");
sheet.getRange(1, 5).setValue("補助");
sheet.getRange(1, 7).setValue("税");
sheet.getRange(1, 9).setValue("c");
sheet.getRange(1, 12).setValue("科目");
sheet.getRange(1, 13).setValue("補助");
sheet.getRange(1, 15).setValue("税");

var sheet0 = ss.getActiveSheet();
var cell = sheet0.getActiveCell();
if (cell.getColumn() != 1) {
var row = cell.getRow();
var column = cell.getColumn();

switch (sheet0.getSheetName()){
case 'A':
var value1 = cell.offset((row-1)(-1),0).getValue();
var value2 = cell.offset(0,(column-1)
(-1)+2).getValue();
sheet.getRange(1, 1).setValue(value1);
sheet.getRange(1, 4).setValue(value2);
sheet.getRange(1, 13).setValue(value2);
break;

case 'B':
var value3 = cell.offset((row-1)(-1),0).getValue();
var value4 = cell.offset(0,(column-1)
(-1)+3).getValue();
var value5 = cell.offset(0,(column-1)*(-1)+1).getValue();
sheet.getRange(1, 1).setValue(value3);
sheet.getRange(1, 4).setValue(value4);
sheet.getRange(1, 12).setValue(value5);
var valueOfTarget = sheet.getRange(1, 1).getValue().split(",")[2];
if (valueOfTarget == 1){
sheet.getRange(1, 13).setValue(value5);
} else if (valueOfTarget == -1) {
sheet.getRange(1, 5).setValue(value5);}
break;

case 'C':
var value6 = cell.offset((row-1)(-1),(column-1)(-1)).getValue();
var value7 = cell.offset((row-1)(-1),0).getValue();
var value8 = cell.offset(0,(column-1)
(-1)+2).getValue();
var value9 = cell.offset(0,(column-1)*(-1)+3).getValue();
sheet.getRange(1, 1).setValue(value6);
sheet.getRange(1, 2).setValue(value7);
sheet.getRange(1, 4).setValue(value8);
sheet.getRange(1, 12).setValue(value8);
sheet.getRange(1, 5).setValue(value9);
sheet.getRange(1, 13).setValue(value9);

case 'D':
var value10 = cell.offset((row-1)(-1),0).getValue();
var value11= cell.offset(0,(column-1)
(-1)+2).getValue();
var value12= cell.offset(0,(column-1)*(-1)+1).getValue();
sheet.getRange(1, 1).setValue(value10);
sheet.getRange(1, 7).setValue(value11);
sheet.getRange(1, 15).setValue(value11);
sheet.getRange(1, 2).setValue(value12);
break;

case 'E':
var value13 = cell.offset((row-1)(-1),(column-1)(-1)).getValue();
var value14= cell.offset((row-1)(-1),0).getValue();
var value15 = cell.offset(0,(column-1)
(-1)+2).getValue();
var value16= cell.offset(0,(column-1)*(-1)+3).getValue();
sheet.getRange(1, 1).setValue(value13);
sheet.getRange(1, 2).setValue(value14);
sheet.getRange(1, 4).setValue(value15);
sheet.getRange(1, 12).setValue(value15);
sheet.getRange(1, 5).setValue(value16);
sheet.getRange(1, 13).setValue(value16);
break;

}
sheet.getRange("A1").activate();
}}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Cシートで実行した場合に思い通りにならない原因は、末尾にbreakがなく次のDのケースまで実行されているからと考えられます。

下記のようにbreakを追加してください。

diff

1function 無題() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 4 (略) 5 switch (sheet0.getSheetName()) { 6 case 'A': 7~~ 略~~ 8 break; 9 10 11 case 'B': 12~~略~~ 13 break; 14 15 case 'C': 16 var value6 = cell.offset((row - 1) * (-1), (column - 1) * (-1)).getValue(); 17 Logger.log(value6) 18 var value7 = cell.offset((row - 1) * (-1), 0).getValue(); 19 var value8 = cell.offset(0, (column - 1) * (-1) + 2).getValue(); 20 var value9 = cell.offset(0, (column - 1) * (-1) + 3).getValue(); 21 sheet.getRange(1, 1).setValue(value6); 22 sheet.getRange(1, 2).setValue(value7); 23 sheet.getRange(1, 4).setValue(value8); 24 sheet.getRange(1, 12).setValue(value8); 25 sheet.getRange(1, 5).setValue(value9); 26 sheet.getRange(1, 13).setValue(value9); 27+ break; 28 29 case 'D': 30 (以下略) 31

このように、switch文ではbreakを書き忘れるリスクがあるため、switch文を非推奨とし、
if~else文または関数の連想配列を使用すべき、としている説明もあります。

投稿2021/10/02 13:28

編集2021/10/03 00:13
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問