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

Как автоматически заполнить ФИО РОПа в первой таблице, основываясь на информации из второй таблицы, с учетом периода работы специалиста? Код и ссылки на таблицы предоставлены.
  • 18 ноября 2023 г. 12:39
Ответы на вопрос 2
Для создания автоматического заполнения ФИО РОПа в первой таблице на основе информации из второй таблицы с учетом периода работы специалиста, можно использовать функцию VLOOKUP в Excel.

1. В первой таблице, в ячейке, где нужно заполнить ФИО РОПа, введите формулу:
=VLOOKUP([ячейка с условием], [диапазон с данными второй таблицы], [столбец с ФИО РОПа], FALSE)

Вместо [ячейка с условием] укажите ячейку, содержащую условие для поиска ФИО РОПа во второй таблице (например, дата начала работы специалиста), [диапазон с данными второй таблицы] - диапазон данных во второй таблице, [столбец с ФИО РОПа] - номер столбца во второй таблице, содержащий ФИО РОПа.

2. Скопируйте данную формулу вниз по всем ячейкам, где требуется заполнить ФИО РОПа.

Примеры ссылок на таблицы:

Первая таблица:
https://docs.google.com/spreadsheets/d/1FIAM1XRK-jOujz_mXf1tBiOFv92Mi4K_lyqyRot_5ac/edit?usp=sharing

Вторая таблица:
https://docs.google.com/spreadsheets/d/1rSmCn_n8j4gB375mRU8AIi4sIUkXZiOagWeFmmwT1ZI/edit?usp=sharing

Пример кода в Google Apps Script для автоматического заполнения:

```javascript
function fillROPName() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = spreadsheet.getSheetByName("Sheet1");
  var sheet2 = spreadsheet.getSheetByName("Sheet2");
  
  var lastRow1 = sheet1.getLastRow();
  var lastRow2 = sheet2.getLastRow();
  
  var conditionRange = sheet1.getRange("A2:A" + lastRow1);
  var ropDataRange = sheet2.getRange("A2:F" + lastRow2);
  
  var conditionValues = conditionRange.getValues();
  var ropDataValues = ropDataRange.getValues();
  
  for (var i = 0; i < conditionValues.length; i++) {
    var condition = conditionValues[i][0];
  
    for (var j = 0; j < ropDataValues.length; j++) {
      var startDate = ropDataValues[j][0];
      var endDate = ropDataValues[j][1];
      var ropName = ropDataValues[j][5];
      
      if (condition >= startDate && (condition <= endDate || endDate == "")) {
        sheet1.getRange(i + 2, 2).setValue(ropName);
        break;
      }
    }
  }
}
```

Обратите внимание, что данный пример кода предполагает, что данные в первой таблице начинаются со второй строки (первая строка - заголовок), и данные во второй таблице также начинаются со второй строки. Рядом со столбцом, где требуется заполнить ФИО РОПа, также должен быть столбец с условием для поиска соответствующего ФИО РОПа.
Для выполнения формулы ВПР по комбо-условию, используйте следующий код: 

`=arrayformula(if(A:A="";;VLOOKUP(A:A&B:B;{Reference!A:A&Reference!B:B\Reference!C:C};2;0)))`

Где:
- A:A&B:B - это два столбца из текущего листа, значения которых нужно найти,
- Reference!A:A&Reference!B:B - это где мы ищем значения,
- Reference!C:C - это то, что подставляется в вывод.

Если ВПР не работает, проверьте наличие лишних пробелов или используйте функцию TRIM(), так как часто ошибка заключается в этом (особенно если данные вводятся вручную, а не выбираются из списка).
Похожие вопросы