2014-10-02 8 views
0

Это многочастный вопрос: я затрудняюсь объяснить это кратко в одном ясном заявлении. Я буду стараться, чтобы очистить его после того, как получить некоторые отзывы:Найти ячейку на другой вкладке

  1. В Google Docs, я хотел бы искать другую вкладку (в одной и той же таблицы), чтобы найти ячейку, которая содержит конкретные данные. Данные могут перемещаться, что делает невозможным использование ссылки на статические ячейки.

    // если 'Лист2' моей таблицы содержит следующую ... ABCD 1 - - - - 2 - Foo бар 6 3 - - - -

    //...then некоторые магическая функция вернет C2 = getCell ('Sheet2', "bar")

  2. Теперь, когда у нас есть эта ячейка, я хочу получить значения соседних ячеек в одной строке.

    // это будет возвращать "Foo": = getLeft (GetCell ('Лист2', "бар"))

    // и будет возвращен 6 = GetRight (GetCell ('Лист2', " бар "))

Я смог получить функцию, которая удовлетворяет вышеуказанной задаче. Однако, это БОЛЬШО МЕДЛЕННО! Я использую эту функцию примерно в более чем 100 местах, поэтому это делает тайм-аут листа при вычислении каждый раз, когда я что-то меняю.

Может ли кто-нибудь предложить, как получить такую ​​же функциональность, но с гораздо лучшей производительностью?

function getCell(sheetname, item, row_offset, default_string) 
{ 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname); 
    var lastrow = sheet.getLastRow(); 
    var lastcol = sheet.getLastColumn(); 
    for(var c = 1; c <= lastcol; c++) 
    { 
    for(var r = 1; r <= lastrow; r++) 
    { 
     var range = sheet.getRange(r, c); 
     if(range.getValue() == item) 
     { 
     //item found! See if we can get the requested cell... 
     c = c + row_offset; //adjust column using given offset 
     if(c < 1 || c > lastcol) 
      return "E.offset"; 
     else 
      return sheet.getRange(r,c).getValue(); 
     } 
    } 
    } 
    return default_string; 
} 

ответ

0

Не могли бы вы добавить строку и столбец, прежде чем ваши данные варьируются следующим образом:

 A B C D E F G 
1         "bar" 
2   - - - -   
3   - foo bar 6 
4   - - - - 

У вас есть ячейку, в которой у вас есть содержимое ячейки, которую вы ищете, скажем, в G1. В ячейке A2 вы поместите формулу:

=COUNTIF(B2:E2,$G$1) 

Что проверит строку A для соответствия по ячейке G1. Заполните остальные ячейки в строке A, а ячейка A3 отобразит «1».

Используйте аналогичную формулу для ячейки B1:

=COUNTIF(B2:B4,$G$1) 

И заполнить всю строку. Ячейка D1 будет показывать 1.

Затем используйте INDEX() с MATCH(), чтобы найти содержимое ячеек с обеих сторон:

Слева:

=INDEX($B$2:$E$4,MATCH(1,$A$2:$A$4,0),MATCH(1,$B$1:$E$1,0)-1) 

Справа:

=INDEX($B$2:$E$4,MATCH(1,$A$2:$A$4,0),MATCH(1,$B$1:$E$1,0)+1) 

Сценариев не требуется!

Смежные вопросы