The link is to the example sheet of what I have done

https://docs.google.com/spreadsheets/d/12w4rGArGi1I1wlpm5yJJtT5AAlMM4LcZC31_DpP6jZQ/edit?usp=sharing

I shifted the rows that contain "PO" in my data selection. (see shift function)


It was suggested to me that I use array functions to made the code better, but I am honestly not sure how to refactor it. I am still very much a beginner.

I'm guessing I can more easily do this instead of trying to reassign array index values.

Here is my current script:

    function shift() {
      try{
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var as = ss.getActiveSheet();                     
        var ar = as.getActiveRange();
        var vals = ar.getValues();
        var r; //variable for rows

        // in this first section, I've already stored the active range (my selection) into a two dimensional array.
    
        for (r = 0; r < vals.length; r++){                                           // for each row, up to the last row (iterate over all rows from top to bottom)
          if((vals[r][0].indexOf("PO") != -1)||(vals[r][0].indexOf("P0") != -1)){    // if first column in each row contains "PO"
            var c; // variable for columns                                                    
            var cols = []; // array to store all data temporarily (will be uses to set new values later)
            for (c = 0; c < vals[r].length; c++){                                   // then iterate over each column(cell) in the row
              if(c == 0){                                                           // if it is the first row,
                cols[c+1] = vals[r][c];                                             // assign second index of the array with the PO value (to simulate a shift)
                cols[c] = "";                                                       // assign the first index of the array a blank string
              }
              else{                                                                 // if it is not the first row
                cols[c+1] = vals[r][c];                                             // assign each additional column value to the next index (+1) of the array
              }
            }
            for (c = 0; c < vals[r].length; c++){                                   // once the array is finished, loop through the columns again foreach row
              vals[r][c] = cols[c];                                                 // this time, assigning the new values to the corresponding array indices
            }
          }
        }
        ar.setValues(vals);                                                         // now, set the values that you reassinged to the array
      }
      catch(err){
        SpreadsheetApp.getUi().alert(err);
      }
    }