2016-12-12 5 views
3

В листах Google у меня есть 2 вкладки с разной информацией. Вкладка А имеет таблицу, которую я использую в качестве сводки переменных на человека. Вкладка B имеет цветовое кодирование каждой из переменных в случайном порядке. То, что я пытаюсь достичь, состоит в том, чтобы сводная таблица на вкладке А была привязана к цветовому кодированию на вкладке В. Поэтому всякий раз, когда цвет каждой переменной изменяется на вкладке В, она также изменяется на вкладке А. ExampleКопирование цвета фона из ячеек на другой вкладке того же листа

Возможно ли сохранить введенное значение внутри ячеек Tab A, но скопировать цветовое кодирование (цвет фона) в Tab B? Я думаю, что единственный способ - это использовать пользовательскую функцию или скрипт.

Я попытался с условным формированием, однако проблема в том, что я могу заставить его работать, только если все данные находятся на одной вкладке.

Спасибо, Томас

+0

Пользовательские формулы в условном форматировании _can_ ссылаются на другой лист, вам просто нужно обернуть ссылки на ячейки в 'косвенный'. Итак, вместо того, что-то вроде '= Sheet2! A3> Sheet3! B4', у вас будет' = косвенное («Sheet2! A3»)> косвенное («Sheet3! B4») '. – FTP

+0

Спасибо за ваш ответ. Тем не менее, мне все еще трудно перевести возможность ссылаться на эту ячейку на копирование цвета ячеек на листе А на лист В. –

ответ

1

Это должно делать то, что вы хотите. Он также будет обрабатывать добавление людей и транспортных средств. Я также использую таблицу, на которой я тестировал ее.

function colorCode() { 
    var ss=SpreadsheetApp.getActiveSpreadsheet() 
    var lr=ss.getSheets()[0].getLastRow() // get last row of sheet1 
    var lc=ss.getSheets()[0].getLastColumn() //get last column of sheet1 
    var lr1=ss.getSheets()[1].getLastRow() // get last row of sheet2 
    var lc1=ss.getSheets()[1].getLastColumn() ////get last column of sheet2 
    var sv=ss.getSheets()[0].getRange(1,2,1,lc-1).getValues() // get vehicles 
    var sn=ss.getSheets()[0].getRange(2,1,lr-1,1).getValues() // get names 
    var s1=ss.getSheets()[1].getRange(2,1,lr,lc-1)//exclude lehend 
    var rng1=s1.getValues() // get sheet2 data 
    var rng2=s1.getBackgrounds() // get background colors of dheet2 data 

    var col=1 //column for vehicles om sheet1 
    for(var m=0;m<sv[0].length;m++){ //for each vehicle 
     col=col+1 //add one to vehicle column 
    for(var n=0;n<sn.length;n++){ //for each name 
    for(var i=0;i<sn.length;i++){ //loop sheet2 data 
    for(var j=0;j<rng1[0].length;j++){ 
    if(rng1[i][j].indexOf(sv[0][m])>-1 && rng1[i][j].indexOf(sn[n][0])>-1){ //if sheet2 data cell contains vehicle and name 
     var c=ss.getSheets()[0].getRange(n+2, col).setBackground(rng2[i][j]) //set color of vehicle and name on sheet1 
    }}}}} 
} 

Тест таблицы:

https://docs.google.com/spreadsheets/d/13zudMf86oOXHMSYg6rJGPguNfRxCr0aUHAktr0RqWzY/edit?usp=sharing 

Чтобы переместить таблицу на sheet1 вниз 4 строки используйте это. Изменения отмечены в коде.

function colorCode() { 
    var ss=SpreadsheetApp.getActiveSpreadsheet() 
    var lr=ss.getSheets()[0].getLastRow() // get last row of sheet1 
    var lc=ss.getSheets()[0].getLastColumn() //get last column of sheet1 
    var lr1=ss.getSheets()[1].getLastRow() // get last row of sheet2 
    var lc1=ss.getSheets()[1].getLastColumn() ////get last column of sheet2 
    var sv=ss.getSheets()[0].getRange(5,2,1,lc-1).getValues() // get vehicles//CHANGED 1 tp 5 
    var sn=ss.getSheets()[0].getRange(6,1,lr-5,1).getValues() // get names//CHANGED 2 to 6 and -1 to -5 
    var s1=ss.getSheets()[1].getRange(2,1,lr,lc-1)//exclude legend 
    var rng1=s1.getValues() // get sheet2 data 
    var rng2=s1.getBackgrounds() // get background colors of sheet2 data 

var col=1 //column for vehicles on sheet1 
    for(var m=0;m<sv[0].length;m++){ //for each vehicle 
     col=col+1 //add one to vehicle column 
    for(var n=0;n<sn.length;n++){ //for each name 
    for(var i=0;i<sn.length;i++){ //loop sheet2 data 
    for(var j=0;j<rng1[0].length;j++){ 
    if(rng1[i][j].indexOf(sv[0][m])>-1 && rng1[i][j].indexOf(sn[n][0])>-1){ //if sheet2 data cell contains vehicle and name 
     var c=ss.getSheets()[0].getRange(n+6, col).setBackground(rng2[i][j]) //set color of vehicle and name on sheet1//CHANGED +2 to +6 
    }}}}} 
} 
+0

Спасибо, что это прекрасно :). Я также очень ценю комментарии в коде, чтобы помочь мне учиться. –

+0

Извините, что беспокою вас снова, у меня есть еще один вопрос. Я пытаюсь переместить таблицу на sheet1 вниз на 4 строки. Я думал, что если я изменил начальную строку и столбец, как это. 'var sv = ss.getSheets() [0] .getRange (5,2,1, lc-1) .getValues ​​() // получать транспортные средства var sn = ss.getSheets() [0] .getRange (6,1, lr-1,1) .getValues ​​() // get names' Я думал, что это будет работать при сдвиге таблицы, но когда я запускаю скрипт, некоторые цвета повторяются несколько раз вдоль столбца. –

+0

Забыл отметить в вышеуказанном комментарии @EdNelson –