Повторите цикл до пустой ячейки - PullRequest
0 голосов
/ 03 апреля 2011

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

Первая строка содержит формулу (включая значение X).Каждая из следующих строк содержит 3 ячейки (A, B, C) со значениями в них.Это просто True / False ("= IF (AND (X> = A2; X <= B2); C2; 0)), который проверяет, является ли 'X'> выше, чем A, и ниже, чем B, и, если true,он возвращает значение C. Затем формула просматривает следующую строку, повторяет действие и добавляет все возвращенные значения к одной сумме.

ROW1 - A1(formula)
ROW2 - A2(5) - B2(10) - C2(100)
ROW3 - A3(10) - B3(20) - C3(200)
ROW4 - (empty)

ROW2 - If we set X=8, then 8 is > 5, and < 10, and the value 100 is returned.
ROW3 - The action is repeated - this time with the result 0.
ROW4 - The row/cell is empty and the loop stops.
ROW1 - Formula has stopped and shows result (100 + 0 =) 100.

Ответы [ 3 ]

1 голос
/ 25 апреля 2011

Именно поэтому они создали функцию рабочего листа SUMIFS.

Для всего столбца (если после первой пустой строки ничего нет):

=SUMIFS(C:C, A:A, "<" & X , B:B ,">" & X)   

Примечание: X - это ячейка, в которой находится X.

Следующее будет работать, если у вас есть вещи после первой пустой строки:

=SUMIFS(INDIRECT("C2:C" & MATCH(TRUE,INDEX(ISBLANK(A:A),0,0),0)-1),
        INDIRECT("A2:A" & MATCH(TRUE,INDEX(ISBLANK(A:A),0,0),0)-1),"<" & M1,
        INDIRECT("B2:B" & MATCH(TRUE,INDEX(ISBLANK(A:A),0,0),0)-1),">" & M1)
0 голосов
/ 03 апреля 2011

если вы не уверены, сколько строк будет, то вам лучше написать vba для циклического обхода ячеек, пока он не найдет пустую

myValue = 8
searchRow = 2
Total = 0
Do While Cells(searchRow, 1).Value <> ""
  If (myValue > Cells(searchRow, 1).Value And myValue < Cells(searchRow, 2).Value) Then
    Total = Total + Cells(searchRow, 3).Value
  End If

searchRow = searchRow + 1
Loop

Cells(1, 1).Value = Total
0 голосов
/ 03 апреля 2011

Я сейчас не за компьютером (с Excel).

Я знаю, что есть select current region (я думаю, что он был сопоставлен с Ctrl - / ?). Вы должны быть в состоянии использовать это для обнаружения концов смежных областей. Если вам нужен только этот столбец, используйте Range.Intersect, чтобы ограничиться столбцом (например, «$ D: D» для столбца D).

Это позволит использовать возможности Excel вместо кодирования собственного.

Посмотрите на именованные диапазоны (Insert / Name, F3, чтобы выбрать именованный диапазон в редакторе формул). IIRC вы также можете иметь «динамические» диапазоны (например, автоматически определять смежные области) под именем. Мне нужно попробовать, как это работает, чтобы предоставить более подробную информацию

...