1

新人コーダーです。私はプロジェクトのために Google Scripts で作業していますが、これが私がやろうとしていることです。

基本的に、「2013」スプレッドシートのセル K2 に入力された AICP アドレスを介して、特定のスプレッドシート (「トップ シート」と呼ばれる) にアクセスしようとしています。「トップ シート」スプレッドシートでアクセスしている情報は、セル K46 にある単一の数字です。次に、セル K46 (「トップ シート」にあります) の値を取得し、「2013」スプレッドシートの新しいセル (N2) に配置します。

これがどのように見えるかです(そしてそれは機能します)。

 function GetJobActuals() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();  
   var s2 =SpreadsheetApp.openById(ss.getSheetByName("2013").getRange("K2:K2").getValue());
   var v2 = s2.getSheetByName("Top Sheet").getRange("K46:K46").getValue();
   ss.getSheetByName("2013").getRange("N2:N2").setValue(v2);
   var s3 = SpreadsheetApp.openById(ss.getSheetByName("2013").getRange("K3:K3").getValue());
   var v3 = s3.getSheetByName("Top Sheet").getRange("K46:K46").getValue();
   ss.getSheetByName("2013").getRange("N3:N3").setValue(v3);

私が今やろうとしているのは、「2013」スプレッドシートの先行するすべてのセルでこれを実現することです。たとえば、このコードは 1 つの数値に対して機能します。「2013」のセル K2 は、「トップ シート」のセル K46 の値を取得し、その値を返し、新しいセル N2 に配置するように指示します。

このプロセスが K2 - K60 のセル範囲で発生し、N2 - N60 の新しいセル範囲が再設定されるようにするには、どうすればこれをループできますか?

男私はこれが理にかなっていることを願っています. 繰り返しますが、上記のコードは機能し、一度に複数のことを処理できるループを作成しようとしています。

4

1 に答える 1

2

Sheet.getRange(row,column)の代わりにを使用すると、答えが明確になるはずですSheet.getRange(a1Notation)。A1 表記の代わりに行番号と列番号を使用することで、forループを適用して目標を達成できます。

ss.getSheetByName("2013").getRange("N3:N3").setValue(v3);

  becomes

ss.getSheetByName("2013").getRange(3,14).setValue(v3);
                                   ^^^^
                        Row = 3, Column = 14 ("N")

したがって、行を反復処理できます。

for ( row=2; row<=60; row++) {
  ...
  var s3 = SpreadsheetApp.openById(ss.getSheetByName("2013").getRange(row,11).getValue());
  ...
  ss.getSheetByName("2013").getRange(row,14).setValue(v3);
  ...
}

詳細はお任せしますが、これがループの基本構造です。これを機能させるためのより効率的な方法がありますが、これは初めてなので、基本が機能するようになってから心配してください。

于 2013-07-05T17:36:24.250 に答える