I'm not sure as to the reason why it does so, but based on your example, the formula is referencing the specific cell itself, rather than the relative position of the cell.  If you change your formula to use a relative reference, it will continue to work even when you add, remove and move the rows.

#+TBLFM: @2$3..@>$3=vmean(@I$2..@0$2);%.1f 
or
#+TBLFM: @2$3..@>$3=vmean(@<<$2..@0$2);%.1f
will both provide you with the result you seem to be looking for.  The former uses your (first) horizontal line as the starting point, whereas the latter uses the 2nd row from the top.

Regards,
Jonathan

On Thu, Dec 1, 2011 at 12:42, henry atting <nsmp_02@online.de> wrote:
Suppose I have this table:

| month | expenses | average |
|-------+----------+---------|
|     1 |       20 |         |
|     2 |       30 |    25.0 |
|     3 |       40 |    30.0 |
#+TBLFM: @3$3..@>$3=vmean(@2$2..@0$2);%.1f

Then I want to delete the second row and add a new one at the bottom.
If I do so I get `#ERROR' on every recalculation.

| month | expenses | average |
|-------+----------+---------|
|     2 |       30 |  #ERROR |
|     3 |       40 |  #ERROR |
|     4 | 50       |  #ERROR |
#+TBLFM: @2$3..@>$3=vmean(@INVALID$2..@0$2);%.1f

If I push the second row to the bottom the
result is as if the last row is still the second one.

| month | expenses | average |
|-------+----------+---------|
|     2 |       30 |    30.0 |
|     3 |       40 |    30.0 |
|     1 |       20 |    20.0 |
#+TBLFM: @2$3..@>$3=vmean(@4$2..@0$2);%.1f


henry

--
http://literaturlatenight.de