使用TRANSPOSE对范围执行的Excel EOMONTH函数

5tmbdcev  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(137)

I noticed that if I try to use EOMONTH on more than one cell at a time on for instance:
| | A |
| ------------ | ------------ |
| 1 | 1/1/2022 |
| 2 | 1/2/2022 |
| 3 | 1/3/2022 |
| 4 | 1/4/2022 |
| 5 | 1/5/2022 |
| 6 | 1/6/2022 |
| 7 | 1/7/2022 |
| 8 | 1/8/2022 |
| 9 | 1/9/2022 |
| 10 | 1/10/2022 |
| 11 | 1/11/2022 |
| 12 | 1/12/2022 |
| 13 | 1/13/2022 |
If I use the following formula: =EOMONTH(A1:A13,0)
I get a #VALUE! Error.

If I was to transpose the range (and transpose back to the original state) it works without errors:
=EOMONTH(TRANSPOSE(TRANSPOSE(A1:A13)),0)

Could someone explain this behaviour?
PS same goes for EDATE()

lc8prwob

lc8prwob1#

一元加号运算子(+)也足以胁迫传回数组:
=EOMONTH(+A1:A13,0)

wrrgggsh

wrrgggsh2#

=EOMONTH(A1:A13,0)预期为单一日期,但却取得多个日期,因此会传回错误。
=EOMONTH(TRANSPOSE(TRANSPOSE(A1:A13)),0)的作用是因为TRANSPOSE首先将数据区域转换为数组,看起来EOMONTH可以处理这个问题,所以它将数据输出为数组。如果使用另一个将数据转换为数组的函数,它的作用也是一样的,例如=EOMONTH(UNIQUE(A1:A13),0)也可以。

3zwtqj6y

3zwtqj6y3#

若要将范围胁迫转换成数组,请在范围之前加入双负数(双一元)。

=EOMONTH(--A1:A13,0)

然后,EOMONTH函数的结果将溢出以匹配数组。
我倾向于总是使用双一元,因为它在其他情况下有一个优势。
当Excel传回TRUE或FALSE值时,会将它们胁迫转换成相等的数字1和0。
这允许您对结果使用类似COUNTIF的函数。
Bob Philips最好地描述了范围和数组之间的区别,对我来说:
范围是电子表格中一组连续的单元格或不连续的区域。”
数组是一系列对象,例如整数数组、字串数组,什至是范围对象数组。

相关问题