2016-04-26 5 views
0

これはおそらく最も単純な質問ですが、私はこれを自分自身で学ぶことになります。愚かな質問を申し訳ありません。シンプルなGoogleスプレッドシートスクリプトをコピーしてセルを貼り付けることができます

Googleのスプレッドシート(​​2700+行)は、1つのセル(dataA)から別のセル(dataBで始まるデータの次の行の前)にデータを移動して自動化する必要があります。データ行の3行上に移動し、次のレコード(4行のブロック)に移動します。私が何かをする前に、私は列を挿入して部屋を作る必要があります。

私は、列を挿入し、最初のデータセル(今はB2)を新しい宛先(A4)にコピーして、目的地の上にある無駄な3行を正しく削除する関数を作成しました。これは相対的で反復的なものなので、シート全体の残りの部分を通過するループでこの部分をどのように適応させるのか分かりません。

4行の各ブロックを移動するループを作成し、前述のアクションを実行し、次に4行の次のブロックに移動して、完了した各行を1行ずつ上に残します。

これは、開始データ構造の例である:

starting data structure - one record of many

function moveValuesOnly() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    var sheet = ss.getSheets()[0]; 

    // This inserts a column in the first column position 
    sheet.insertColumnBefore(1); 

    var start = ss.getRange("B2"); 

    var source = ss.getRange("B2"); 
    source.copyTo (ss.getRange ("A4"), {contentsOnly: true}); 
    source.clear(); 
    sheet.deleteRows(1, 3); 
} 
+0

次のようになります。 A1表記の代わりにgetRangeの行、列の値を使用したいと思うでしょう。関数のパラメータとしてシート内を渡し、ソース行/列と宛先行/列をパラメータとして渡します。次に、行をループし、必要に応じて行/列をインクリメントするこの関数を呼び出します。また、古い行を削除するのではなく、新しいシートを作成するほうが速くなる可能性があります。 – User

+0

私はそれが理論的にどのように機能するのか理解しています。構文自体は私が苦労しているところです。 –

答えて

0

あなたが停止し、どのくらいの速あなたが進行したときに最初に、あなたが開始すべき場所を知る必要があるループを作成します。

最初の行から開始し、最後の行に移動してgetLastRow()を使用して取得し、1行で4行進んでください。

入力を受け入れるようにmoveValuesOnly()を適用し、ループを使用して数回ではなく行の値が異なるようにすることをお勧めします。現在、ハードコードされた "B2"と "A4"の入力は、行開始値に基づいて何かに変更する必要があります。 getDataRange().getValues();は、あなたのシートを編集するのに便利です。

ループが、私はこれを行うための機能を記述し

for (i=0; i<sheet.getLastRow(); i+=4) { 
    moveValuesOnly(i); 
} 
関連する問題