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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2100閲覧

GASを用いた自動転記をしたい(onEdit(e)を使用)

qck

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/12/21 06:01

編集2020/12/21 08:05

前提・実現したいこと

現在使用しているスプレッドシートにて
1)B列に"済"との変更があった場合、2)該当行のD列からF列に入力されている情報を取得して、3)隣のシートの最終行のD列からF列に自動転記
を行いたく思います。

発生している問題・エラーメッセージ

function onEdit(e){ を使用しているため、ログでの確認等が困難で、具体的なミスが解明できません。

該当のソースコード

Google

1function onEdit(e) { 2 var bk = SpreadsheetApp.getActiveSpreadsheet(); 3 var sht2 = bk.getSheetByName('sheet2'); 4 var sht1 = bk.getActiveSheet(); 5 if(e.range.getColumn() === 2) { 6 if(e.range.getValue() === "済") { 7 //ここまで動作確認済 8 var i = e.range.getRow(); 9 var j = sht1.getRange(i,4,1,3).getvalues(); 10 var x = sht2.getRange('D:D'); 11 var k = x.getLastRow; 12 sht2.getRange(k+1,4,1,3).setvalues(j); 13 sht2.getRange(k+1,2).setValue("未対応"); 14 } 15 } 16}

試したこと

動作確認済まではBrowser.msgboxで確認できましたが、以降はメッセージボックスを記述しても出てこず困っています。

補足情報(FW/ツールのバージョンなど)

以前同様の処理をVBAで記述しており、そちらでの動作確認はできています。
GASに明るくないため、うまく動かせていないのが現状です。

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

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

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

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

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

guest

回答2

0

javascript

1const onEdit = (e) => { 2 const targetSheetName = ""; 3 const sourceSheetName = ""; 4 if (e.value !== "済") return; 5 const curRangw = e.range; 6 if (curRange.getSheet().getSheetName() !== sourceSheetName) return; 7 if (curRange.getColumn() !== 2) return; 8 const dat = ["","未対応",""].concat(curRange.offset(0,2,1,3).getValues()[0]); 9 e.source.getSheetByName(targetSheetName).appendRow(dat); 10}

onEdit でもログは出せるはずです。出せないとしても、適当なセルに書き込みすればどうなっているかは確認可能だと思います。

投稿2020/12/21 21:05

papinianus

総合スコア12705

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

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

qck

2020/12/22 03:07

丁寧にご回答頂きありがとうございます。 .getLastRow()でシートの最終行(1000行目)を取得していたのが、大きな問題点でした。 JavaScriptも含めてもう少し勉強していければと思います。 ありがとうございました。
guest

0

ベストアンサー

目視でチェックしただけですが、getValuesgetvalues(Vが小文字)になっているのとgetLastRowの呼び出しに()がありません。

Diff

1 function onEdit(e) { 2 var bk = SpreadsheetApp.getActiveSpreadsheet(); 3 var sht2 = bk.getSheetByName("sheet2"); 4 var sht1 = bk.getActiveSheet(); 5 if (e.range.getColumn() === 2) { 6 if (e.range.getValue() === "済") { 7 //ここまで動作確認済 8 var i = e.range.getRow(); 9- var j = sht1.getRange(i, 4, 1, 3).getvalues(); 10+ var j = sht1.getRange(i, 4, 1, 3).getValues(); 11 var x = sht2.getRange("D:D"); 12- var k = x.getLastRow; 13+ var k = x.getLastRow(); 14- sht2.getRange(k + 1, 4, 1, 3).setvalues(j); 15+ sht2.getRange(k + 1, 4, 1, 3).setValues(j); 16 sht2.getRange(k + 1, 2).setValue("未対応"); 17 } 18 } 19 }

function onEdit(e){ を使用しているため、ログでの確認等が困難で、具体的なミスが解明できません。

try ~ catch使ってエラーが出てないか確認するとか色々方法あります。

投稿2020/12/21 09:58

draq

総合スコア2577

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

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

qck

2020/12/22 03:05

丁寧にご回答頂きありがとうございます。 .getLastRow()でシートの最終行(1000行目)を取得していたのが、大きな問題点でした。 調べながら改良して無事作動させることができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問