2014-09-23 4 views
0

У меня длинный список около 5000 наименований. Каждому элементу обозначается число от 1 до 5. Первый элемент в этом списке - это 1. Я хотел бы идентифицировать каждый раз, когда есть 1, а затем подсчитывать, сколько ячеек следует за ним, пока не появится другое. Затем я хочу суммировать значения, связанные с каждой ячейкой, чтобы найти «общий» для каждой ячейки, помеченного 1.Подсчет количества ячеек для следующего события

Say моего стол выглядит следующим образом (мы смотрели бы на столбце 3):

+-----+----+---+ 
| 20 | A | 1 | 
| 30 | B | 2 | 
| 10 | C | 2 | 
| 20 | D | 3 | 
| 50 | E | 2 | 
| 30 | F | 1 | 
| 40 | G | 2 | 
| 40 | H | 3 | 
| 10 | I | 5 | 
| 50 | J | 1 | 
+-----+----+---+ 

В строке А суммирование будет суммой AE, 130 В строке F суммирование будет представлять собой сумму FI, 120.

Единственная часть этого ответа мне нужна, чтобы синтаксис состоял в подсчете числа r строк из A-E в этом разрезе.

Спасибо!

ответ

1

Альтернатива с индексом. Смещение является летучим и приведет к перерасчету всего листа в любое время любые изменения. С большими наборами данных, которые могут вызвать медленность.

Индекс нестабилен. Вы можете использовать:

=IF(C1=1,SUM(A1:INDEX(A2:$A$9999,MATCH(1,C2:$C$9999,0)-1)),"") 

Чтобы гарантировать, что последний результат формулы является правильным, добавьте значение «1» в строке ниже ваших исходных данных в одном столбце («C»)

Примечание: Это также необходимо, если вы хотите использовать изменение смещения с диапазоном, большим, чем текущий набор данных. В противном случае обе формулы не найдут окончательный «1» и вернут # N/A.

И есть еще одна проблема с формулой смещения и фиксированным диапазоном.Тока применение формулы

=IF(C1=1,SUM(OFFSET(A1,0,0,MATCH(1,C2:$C$10,0))),"") 

, а затем копируется вниз к строке 10 будет приводить в этой формуле в строке 10:

=IF(C10=1,SUM(OFFSET(A10,0,0,MATCH(1,C$10:$C11,0))),"") 

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

+0

Я не знал о проблеме с 'OFFSET()', вызывая перерасчет ... Определенно +1! :) –

+0

Это прекрасно, спасибо вам большое! – Andrew

1

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

=IF(C1=1,SUM(OFFSET(A1,0,0,MATCH(1,C2:$C$10,0))),"") 

(Очевидно обновить $C$10 до конца набора данных) и перетащить это вниз

в принципе, то, что вы говорите:

  • Если столбец C имеет 1, а затем:
    • сочти колонке А, начиная с моей строкой и пройдя весь путь вниз, пока не соответствует следующему значению 1
  • или же вернуть ""

Это зависит от того, что функция Match() будет возвращен в первый раз, когда он найдет совпадение, и поэтому он начнется в строке непосредственно после вашего (C2 и продолжит поиск следующего значения 1 вплоть до нижней части вашего набора данных - В этом случае $C$10)

Надеюсь, что это имеет смысл и делает трюк!

+0

Цените помощь! – Andrew

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