2

免責事項:私は初心者です。私はスクリプトを少し理解していますが、それを書くのは私にとって苦痛であり、主にループと配列を使用しているため、次のようになります。

特定の列 (この場合は H [8]) からすべてのデータを取得しようとしています。その列の各セルの値を確認し、y の場合は [はい] に変更します。n の場合は No に変更します。空の場合は、そのままにして次のセルに移動します。

これが私がこれまでに持っているものです。いつものように、かなり近いと思いますが、アクティブセルの値を設定できず、どこを台無しにしているのかわかりません。ある時点で、実際に列の値を [はい] に変更しました (これらの場合、元に戻すことができてとても感謝しています)。

シート例

..... COL-H  
r1... [service] <-- header  
r2... y  
r3... y  
r4... n  
r5... _  <-- empty  
r6... y  

意図:すべての y を Yes に、すべての n を No に変更します (空白のセルをスキップします)。

私がこれまでに試したこと

関数試行 1

function Thing1() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet");
  var lrow = ss.getLastRow();
  var rng = ss.getRange(2, 8, lrow - 1, 1);
  var data = rng.getValues();

  for (var i=0; i < data.length; i++) {
    if (data[i][0] == "y") {
      data[i][0] == "Yes";
    }
  }
}

関数試行 2

function Thing2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet");
  var lrow = ss.getLastRow();
  var rng = ss.getRange(2, 8, lrow - 1, 1);
  var data = rng.getValues();

  for (var i=0; i < data.length; i++) {
    if (data[i][0] == "n") {
      data.setValue("No");
    } else if (data[i][0] == "y") {
      data.setValue("Yes");
    }
  }
}

使用法:

ここでの作業が完了したら、関数を変更して、任意の列をターゲットにして、ある値を別の値に変更できるようにします (そのための方法は既にありますが、値を設定できる必要があります)。=replace(sheet, col, orig_value, new_value) のようになります。以下にも載せておきます。

助けてくれてありがとう。


列内で検索および置換するための完成したコード

function replace(sheet, col, origV1, newV1, origV2, newV2) {
  // What is the name of the sheet and numeric value of the column you want to search?
  var sheet = Browser.inputBox('Enter the target sheet name:');
  var col = Browser.inputBox('Enter the numeric value of the column you\'re searching thru');

  // Add old and new targets to change (Instance 1):
  var origV1 = Browser.inputBox('[Instance 1:] What old value do you want to replace?');
  var newV1 = Browser.inputBox('[Instance 1:] What new value is replacing the old?');

  // Optional - Add old and new targets to change (Instance 2):
  var origV2 = Browser.inputBox('[Instance 2:] What old value do you want to replace?');
  var newV2 = Browser.inputBox('[Instance 2:] What new value is replacing the old?');

  // Code to search and replace data within the column
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet);
  var lrow = ss.getLastRow();
  var rng = ss.getRange(2, col, lrow - 1, 1);
  var data = rng.getValues();

  for (var i=0; i < data.length; i++) {
    if (data[i][0] == origV1) {
      data[i][0] = newV1;
    } else if (data[i][0] == origV2) {
      data[i][0] = newV2;
    }
  }
  rng.setValues(data);
}

これが誰かを助けることを願っています。ありがとう@ScampMichael!

4

1 に答える 1

5

data という名前の配列は、範囲内の値から作成され、作成後はスプレッドシートから独立しているため、配列内の要素を変更してもスプレッドシートには影響しません。配列を変更してから、配列全体を元の場所に戻す必要があります。

  for (var i=0; i < data.length; i++) {
    if (data[i][0] == "n") {
      data[i][0] = "No";
    } else if (data[i][0] == "y") {
      data[i][0] = "Yes";
    }
  }
rng.setValues(data); // replace old data with new
}
于 2013-04-12T22:07:32.467 に答える