Google Sheets: Найти последнюю строку в диапазоне - пользовательская формула - PullRequest
0 голосов
/ 13 февраля 2020

Я искал пользовательскую функцию для Google Sheets, которая находит последнюю строку с данными.

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

Например, поиск в диапазоне A: A его последней строки с записью и возврат той же строки из C: D. В этом случае это приведет к выводу [["cool", "beans"]].

+---+--------+------+-------+------+
|   | A      | B    | C     | D    |
+---+--------+------+-------+------+
| 1 | Words  |      | Then  |      |
+---+--------+------+-------+------+
| 2 | and    | asd  | a     |      |
+---+--------+------+-------+------+
| 3 | things |      | thing | Yep  |
+---+--------+------+-------+------+
| 4 |        | here |       | Why? |
+---+--------+------+-------+------+
| 5 | stuff  |      | cool  | beans|
+---+--------+------+-------+------+
| 6 |        |      |       |      |
+---+--------+------+-------+------+

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

. Я решил создать собственную формулу, и вы можете посмотреть мое решение ниже.

1 Ответ

0 голосов
/ 13 февраля 2020

Я создал пользовательскую функцию, используя скрипт Google Apps. (В Google Sheets: tools -> editor script)

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

Он проверит данный диапазон и выведет все значения из последней строки или, если указано, последней соответствующей строки из другого диапазона / подмножества данного диапазона.

Пример использования: LASTROW (A: A, B: D) проверит диапазон A: A для последней непустой строки и возвратит соответствующую строку B: D.

До тех пор, пока число строк равно это будет работать, например. LASTROW (A1: A10, B21: B30)

/**
* Returns the last row in a range, can be single or multi-column.
*
*
* @param    {A1:A100}   range_to_check Range to find final row 
* and returns contents if no range_to_return is specified.
* @param    {[B1:E100]} range_to_return [optional] Range for row to be returned. 
* i.e if row 3 in range_to_check is final row, then row 3 in range_to_return will be returned.
* @customfunction
*/

function LASTROW(range_to_check,range_to_return) {
  // checks range_to_check for final row with non-empty entries
  // range_to_return is optional, will return final row of range_to_check if missing

  if (Array.isArray(range_to_check)) {                                                                                                                  
    // checks if input is a range/cell reference 
    // N.B: Google Apps Script parses a cell range as an array of values

    for (i=0;i<range_to_check.length;i++) {
      // For each row i, check if any columns are non-empty
      var final_column_in_row = undefined;

      for (j=0;j<range_to_check[i].length;j++) {
        if (range_to_check[i][j] !== '') {       
          final_column_in_row = j;
        }
      }
      if (final_column_in_row != undefined) {  // if any columns in row i are non-empty      
        var final_row = i; // set row i as final column
      }
    }
    if (final_row != undefined) {
      // if there exists a non-empty row

      if (range_to_return == undefined) {
        // and no range_to_return is specified

        return [range_to_check[final_row]];
        // return the final row of range_to_check

      } else {
        // if range_to_return is specified

        if (range_to_check.length == range_to_return.length) {
          // and both ranges have the same number of rows

          return [range_to_return[final_row]];
          // return the corresponding row from range_to_return
          // i.e if final row of range_to_check is 5, returns the 5th row of range_to_return

        } else {
          throw 'Ranges have different number of rows, or range_to_check is not an array.'
        }
      }
    } else {
      return null;
    }
  } else {
    throw 'range_to_check is not a range.';
  }

}

Надеюсь, что кто-то там найдет какую-то пользу из этого:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...