2017-02-27 4 views
1

私はわずか数行のコードで別のシートに1枚からいくつかのデータをコピーしています:私は、データの行全体を選択してい変数rng1Arrayあるシートから別のシートにデータをコピーするときに、特定の列のみを選択する方法はありますか?

for (var i = date2.length; i < date1.length; i++){ 
    var rng1Array = sheet1.getRange(i+1,1,1,sheet1.getLastColumn()).getValues(); 
    sheet2.getRange(i+1,1,1,sheet1.getLastColumn()).setValues(rng1Array); 
       } 
       } 

、しかし、私が選択できるようにしたいと思います各行にはいくつかの要素しかありません。

これを行うにはどのような方法が最適ですか?私はこのような何か使用して、各セルを一つずつ選択しなければなりません:だけを選択するための最良の方法は何

Data1 Data2 Data3 Data4 Data5 Data6 

:つまり

sheet1.getRange(1, 1, sheet1.getLastRow(),sheet1.getLastColumn()).getValues()[x][x]) 

を、私は、次のデータセットを持っている場合データ2、データ4、データ6ここで必要に応じて

がいっぱいスクリプトです:

function Copy_data() { 

var sheet1 = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
var sheet2 = SpreadsheetApp.openById("ID").getSheetByName("Sheet2"); 

var date1 = sheet1.getRange(1, 1, sheet1.getLastRow()).getValues(); 
var date2 = sheet2.getRange(1, 1, sheet2.getLastRow()).getValues(); 

    for (var i = date2.length; i < date1.length; i++){ 
     var rng1Array = sheet1.getRange(i+1,1,1,sheet1.getLastColumn()).getValues(); 
     sheet2.getRange(i+1,1,1,sheet1.getLastColumn()).setValues(rng1Array); 
    } 
    } 
+1

範囲からランダムな列や値を直接選択することはできません。一方、私はあなたが望むすべての値を選択するのではなく、行全体を選択し、イテレータ( 'for'ループのような)の助けを借りて欲しくない値を無視するのではなく、提案します。例えば。もしi = 1なら無視し、i = 3なら無視してください。無視している列は常にシート内のものと同じであれば、別のシートで** importrange **を使用し、必要な列を選択することをお勧めしますクエリの助けを借りて、そのシートを入力としてのみ読むことができます。 –

+0

すべてのデータを選択し、必要のない列を非表示にすることができます。 – Cooper

答えて

1

これは執筆の面でもう少し面倒かもしれないが、それはかなりより汎用性があります。標準のj ++やおそらくj + = 2で列インデックスを増やすことも、標準のj ++を使用して別の配列のインデックスにすることもできます。これにより、出力列の順序と選択を簡単に操作できます。最終的に宛先範囲のサイズは、宛先配列の最終サイズによって決まります。したがって、setValuesの要件を満たし、かなり確実に動作するはずです。私は4列のデータしか使用していなかったので、colAの列のサイズと数を変更して、必要な入力データの列を選択することをお勧めします。また、あなたは単に列ではなくsrngAの指標を考えるだけで、1を減算する必要性を避けることができます。

function Copy_data() 
{ 
    var src = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("source"); 
    var des = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("destination"); 
    var srng = src.getDataRange(); 
    var srngA = srng.getValues(); 
    var drngA = []; 
    var colA = [1,3,2,4];//indirect data column selection 
    for (var i = 0; i < srngA.length;i++) 
    { 
    var k = 0; 
    drngA[i]=[]; 
    for(var j=0;j<srngA[i].length;j++) 
    { 
     drngA[i][k++] = srngA[i][colA[j]-1]; 
    } 
    drng = des.getRange(1,1,drngA.length,drngA[0].length);//destination array controls size of destination range. 
    drng.setValues(drngA); 
    } 
} 

私はあなたの思考の方向にこれをもっともっと引き出すことができると考えています。

関連する問題