Aggem8
Aggem8

Reputation: 17

Google Script copy paste

Right now it overwrite same cell in Logs I need it to write to next cell and not overwrite the same cell. https://freeimage.host/I/5GIOjs I want to Search for D3=Lumee in the Sheet called Logs in colum A u see all the names. Want it co copy J12 to the specific Name https://freeimage.host/i/5GTLJI

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var j12 = s.getRange('J12').getValues();

  var dynamic_cell = s.getRange('D3').getValue();

  var target_s = ss.getSheetByName('Logs');

  for (var i = 2; i<=target_s.getMaxRows();i++){
    var match = target_s.getRange(i, 1).getValue();
    if(dynamic_cell == match){
      var targetrange = target_s.getRange(i,2,1);
      break;
    }
  }

  targetrange.setValues(j12);

}

Upvotes: 0

Views: 535

Answers (1)

Cooper
Cooper

Reputation: 64062

This is how I'd do it.

 function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getActiveSheet();
  const j12 = sh.getRange('J12').getValue();
  const d3 = sh.getRange('D3').getValue();
  const tsh = ss.getSheetByName('Logs');
  const vs = tsh.getRange(2,1,tsh.getLastRow() -1).getValues();
  for( let i = 0;i<vs.length; i++) {
    if(d3 == vs[i][0]){
      tsh.getRange(i + 2,2).setValue(j12);
      break;
    }
  }
}

It's a lot faster than pulling the match value out during each loop. This way I get all of them all at one time and the loop run's much faster.

Demo:

enter image description here

Version 2:

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('Sheet0');
  const j12 = sh.getRange('J12').getValue();
  const d3 = sh.getRange('D3').getValue();
  const tsh = ss.getSheetByName('Logs');
  const vs = tsh.getRange(2, 1, tsh.getLastRow() - 1).getValues();
  for (let i = 0; i < vs.length; i++) {
    if (d3 == vs[i][0]) {
      tsh.getRange(i + 2, getRowWidth(i + 2, tsh, ss) + 1).setValue(j12);
      break;
    }
  }
}

Helper function:

function getRowWidth(row, sh, ss) {
  var ss = ss || SpreadsheetApp.getActive();
  var sh = sh || ss.getActiveSheet();
  var row = row || sh.getActiveCell().getRow();
  var rcA = [];
  if(sh.getLastColumn()){rcA = sh.getRange(row, 1, 1, sh.getLastColumn()).getValues().flat().reverse();}
  let s = 0;
  for (let i = 0; i < rcA.length; i++) {
    if (rcA[i].toString().length == 0) {
      s++;
    } else {[![enter image description here][2]][2]
      break;
    }
  }
  return rcA.length - s;
}

Demo: enter image description here

Upvotes: 2

Related Questions