2017-02-27 3 views
0

特定の条件が満たされると、データシートを実際には1つのシートから別のシートに移動するスクリプトがあります(この場合はonEdit Col17 = "Yes"の場合)。宛先の行が空でない限りデータをコピーすることはできません

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, 1).copyTo(target); 

ここで、「s」はアクティブシートで、「targetSheet」は宛先シートです。

宛先シートが空白の場合は完全に機能します。

ただし、コピー先のシートの他の列にデータを入力し、このスクリプトを列Aでのみ使用したいとします。他の列にデータを追加すると、スクリプトは既存の値列Aにデータがあるかどうかにかかわらず、データが含まれています。

例私はセルB1、B2、B3、B4、B5にA、B、C、D、Eという1,2,3のセルA1、A2、A3を持っています。私はスクリプトを実行します。新しいデータがA6(最初に完全に空の行)に挿入されます。 A4(Col Aの最初の空の行)に移動します。

答えて

0

スプレッドシートの実際のlastRowにデータがある可能性があります。スプレッドシートにlastRow + 1行はありません。 スプレッドシートのlastRowにデータを挿入するときは、lastRowの後に行を挿入してからデータを追加する方が良いでしょう。

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
targetSheet.insertRowAfter(targetSheet.getLastRow()); 
s.getRange(row, 1, 1, 1).copyTo(target); 
0

IはgetLastRow機能にうんざりしてしまった - 私はそれをgetLastRowもちょうど私の範囲内の行数ではなく、データを含む数を返す範囲を提供するたびに。

最後に、データを含むセルをカウントする単純なループを作成し、その代わりに使用しました。おそらく最高の解決策ではなく、効果的です。さて、あなたのデータを考慮し

0

A1 B1 
A2 B2 
A3 B3 
    B4 
    B5 

のように見えることで、データを持っている最後の行が列Bの行5であるため、.getLastRow()の予想される応答は、5になりますあなたはシートで作業していることを考えてみましょう。これで、最後の項目が列Aのどこにあるかを特定できるようになりました。代わりにarray = getRange('A:A').getValues()を使用し、最初の空の配列インデックスに値を追加し、を使用して列を更新してください

+0

はい、私はgetLastRowの問題を理解しましたが、Col Aを指すgetRangeを使用しようとする私の試みはすべて、 '5'。私はその構文のどこかに誤りがあったに違いない。 アレイのご提案いただきありがとうございます。私は自分のループで書き直すよりも、きれいなソリューションだと思います! – SilkyJohnston

関連する問題