Google Sheets: условное форматирование столбца ячеек в соседнюю ячейку (столбец) - PullRequest
0 голосов
/ 02 ноября 2019

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

У меня есть таблица, которую я использую для составления бюджета. Столбец B помечен подытогом, это сумма, которую столбец D (фактически израсходованный) должен соответствовать, но не должен превышать. Я хотел бы, чтобы ячейки в столбце D были цветом по умолчанию, пока он не достигнет значения из соседней ячейки в столбце B. Если сумма превышает число в соседней ячейке B столбца, то я бы хотел, чтобы он был красным.

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

Кроме того, когда я закончу составлять бюджет на этот период оплаты, если я превысил бюджет, я меняю цвет вкладки на красный, если я в рамках бюджета, вкладка черная.

Я хотел бы изучить кодирование, и я думаю, что это хорошее место для начала.

Приведенная ниже ссылка является примером бюджета. С "сотовым телефоном", слишком высоким "," Газ / Топливо ", являющимся правильным, и" Бакалея ", находящимся под.

https://docs.google.com/spreadsheets/d/17lUuwdjfPz17_gkckofgW8pnqGMvBlqeyN8d8xq2HxY/edit?usp=sharing

Редактировать: я понял условное форматирование.

**Red:** Custom formula is =D3>1*B3 for range D3:D72
**Empty:** Cell is empty for range D3:D72
**Green:** Custom formula is =D3=B3 for range D3:D72

Мой следующий вопрос: как мне сделать так, чтобы это применялось ко всем листам, а не только к текущему листу?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Я немного переработал ваш код и придумал этот скрипт, который перебирает все листы в вашей электронной таблице и добавляет условное форматирование ко всем сразу. По сути, с помощью getSheets () вы можете получить массив всех листов в электронной таблице, а с помощью цикла for вы можете создать правила для всех листов:

function ZeroBalance() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheets = spreadsheet.getSheets();
  var column = 4;
  // Loop through each sheet in the file
  for(var i = 0; i < sheets.length; i++) {
    var sheet = sheets[i];
    var range = sheet.getRange('D3:D72');
    // Create conditional rules
    var turnRed = SpreadsheetApp.newConditionalFormatRule()
      .setRanges([range])
      .whenFormulaSatisfied('=D3>1*B3')
      .setBackground('#FF0000')
      .build();
    var turnDefault = SpreadsheetApp.newConditionalFormatRule()
      .setRanges([range])
      .whenCellEmpty()
      .build();
    var turnGreen = SpreadsheetApp.newConditionalFormatRule()
      .setRanges([range])
      .whenFormulaSatisfied('=D3=B3')
      .setBackground('#00FF00') // Green
      .build();
    var conditionalFormatRules = [turnRed, turnDefault, turnGreen];
    // Add conditional rules to the sheet
    sheet.setConditionalFormatRules(conditionalFormatRules);
  }
}

Дайте мне знать, если это работает для вас.

0 голосов
/ 02 ноября 2019

Я пошел по пути записи макроса, применяя условное форматирование, которое я хотел. Он получился длинным и неуклюжим, но я сократил его до следующего сценария, который делает то, что я хочу, чтобы он выполнялся быстро и эффективно. Было бы здорово, чтобы это применялось ко всем электронным таблицам в рабочей книге, но сочетание клавиш достаточно простое в использовании. Я просто хочу сделать это, прежде чем использовать каждую таблицу на моем телефоне.

function ZeroBalance1() {
  var spreadsheet = SpreadsheetApp.getActive();
   var conditionalFormatRules = 
spreadsheet.getActiveSheet().getConditionalFormatRules();

  conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, 
SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getRange('D3:D72')])
  .whenFormulaSatisfied('=D3>1*B3')
  .setBackground('#FF0000')
  .build());

  conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getRange('D3:D72')])
  .whenCellEmpty()
   .build());

  conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getRange('D3:D72')])
    .whenFormulaSatisfied('=D3=B3')
  .setBackground('#00FF00')
   .build());

  spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...