关注@悟禅禅,为您解决@Excel与@VBA的难题。

CELL”英文通常指细胞,蜂窝等,在Excel中指单元格,跟函数“CELL()”函数的功能基本搭不上什么边,所以想靠字面意思来理解“CELL()”函数是不可能的。那么把“CELL()”函数的功能描述清楚就更难了。按我的理解——“CELL()”函数的功能就是“获取指定单元格的指定属性的值”。

指定单元格”不必多说,顾名思义,一定是“CELL()”函数的一个操作对象。那“指定属性”就比较耐人寻味了。一个单元格有多少个属性可以被“CELL()”函数所获取呢?答案是“十二”种属性。“CELL()”函数的语法超级简单——CELL(info_type, [reference]),就两个参数,完全没有大型函数的风范。“info_type”用来指定属性,“reference”就是指定单元格,简而言之“CELL()”函数就是用来获取“reference”的“info_type”的值。

接下来就把“CELL()”函数的十二种用法一一例举。

一:row——返回指定单元格的行号,单元格C3中写入公式“=CELL("row",B3)”,获取单元格B3的行号:

=CELL("row",B3)

二:col——返回指定单元格的列号,单元格C3中写入公式“=CELL("col",B3)”,获取单元格B3的列号:

=CELL("col",B3)

三:address——返回指定单元格的绝对行列坐标,单元格C3中写入公式“=CELL("address",B3)”,获取单元格B3的绝对行列坐标:

=CELL("address",B3)

可以看到公式获取的坐标是“$B$3”,如果有对“$”不太理解的小伙伴儿,请阅读我的另两篇文章《》和《Excel中 $ 的用法——绝对行坐标与相对行坐标》。

四:contents——返回指定单元格的内容,单元格C3中写入公式“=CELL("contents",B3)”,获取单元格B3的内容:

=CELL("contents",B3)

五:width——返回一个包含两个元素的数组。第一个元素返回被指定单元格的宽度的整数部分,第二个元素可以是“TRUE”或“FALSE”,当被指定的单元格的宽度,是默认未经过修改的状态,返回值为“TRUE”,反之如果被修改过,返回值为“FALSE”。先来看一下B列的列宽,选中B列后点击鼠标右键。

点击“列宽”

B列的默认列宽是“10”。

头条号“悟禅禅”原创文章

在单元格C4写入公式“=CELL("width",B4)”后,单元格C4显示列宽“10”,因为B列的列宽从未被修改过,所以单元格D4显示“TRUE”。

头条号“悟禅禅”原创文章

然后用鼠标把B列拉宽再看看公式的结果:

拉宽B列

当B列被拉宽后,单元格C4和D4的值并没有随之更新,因为"CELL()"函数有一个特性,就是当被指定的单元格有变动的时候,公式的值不会自动更新,需要点击菜单“公式=>立即计算”或按快捷键“F9”来更新公式的结果。

头条号“悟禅禅”原创文章


现在公式的值被更新了。第一元素显示被拉宽后的列宽“16”,因为B列的列宽被修改过,所以第二个元素显示“FALSE”。

头条号“悟禅禅”原创文章

六:type——这个参数有三个返回值,分别是“v,l,b”。

  1. 当被指定的单元格的格式不是“文本”的时候,返回值为“v”。将单元格H3的格式设定为“常规”,然后在单元格I3中写入公式“=CELL("type",H3)”后回车,得到返回值“v”。
  2. 当被指定的单元格的格式是“文本”的时候,返回值为“l”。将单元格H4的格式设定为“文本”,然后在单元格I4中写入公式“=CELL("type",H4)”后回车,得到返回值“l”。
  3. 当被指定的单元格是“”单元格的时候,返回值为“b”,将单元格H5的值删掉,然后在单元格I5中写入公式“=CELL("type",H5)”后回车,就得到了返回值“b”。

头条号“悟禅禅”原创文章

七:prefix——根据被指定单元格的“水平对齐方式”,返回“',^,",,空值”五种返回值。

在单元格B3:B7的每个单元格中输入任意字符,我输入一个“a”,这样每一行的对比效果比较明显。

  • 将单元格B3的格式的“水平对齐方式”设置为“靠左(缩进)”,在单元格C3中写入公式“=CELL("prefix",B3)”后回车,得到返回值“'”。

靠左(缩进)

  • 将单元格B4的格式的“水平对齐方式”设置为“居中”,在单元格C4中写入公式“=CELL("prefix",B4)”后回车,得到返回值“^”。

居中

  • 将单元格B5的格式的“水平对齐方式”设置为“靠右(缩进)”,在单元格C5中写入公式“=CELL("prefix",B5)”后回车,得到返回值“"”。

靠右(缩进)

  • 将单元格B6的格式的“水平对齐方式”设置为“填充”,在单元格C6中写入公式“=CELL("prefix",B6)”后回车,得到返回值“”。

填充

  • 将单元格B7的内容清空,在单元格C7中写入公式“=CELL("prefix",B7)”后回车,得到返回值“空值”。

空值

八:color——针对于“数值”和“货币”类型的单元格“显示负数的方式”,返回“01”两种返回值。

  • 以“数值”型的五种负数显示方式来取得“=CELL("prefix",B3)”~“=CELL("prefix",B7)”,返回值为“0”,用黑色显示负数的格式返回“0”,用红色显示负数的格式返回“1”。

头条号“悟禅禅”原创文章

  • 以“货币”型的五种负数显示方式来取得“=CELL("prefix",B3)”~“=CELL("prefix",B7)”,返回值为“0”,用黑色显示负数的格式返回“0”,用红色显示负数的格式返回“1”。

头条号“悟禅禅”原创文章

九:parentheses——通过判断被指定单元格的格式是否应用了自己追加的并且含有“(”的“自定义”格式,返回“01”两种返回值。

  • 将单元格B3的格式设定为自定义格式“(#”并输入任意数字“1”,在单元格C3中写入公式“=CELL("parentheses",B3)”结果返回了“1”。

(#

  • 将单元格B4的格式设定为自定义格式“#)”并输入任意数字“2”,在单元格C4中写入公式“=CELL("parentheses",B4)”结果返回了“0”。因为应用的格式中没有“(”,所以返回“0”。

#)

  • 将单元格B5的格式设定为自定义格式“(#)”并输入任意数字“3”,在单元格C5中写入公式“=CELL("parentheses",B5)”结果返回了“1”。

(#)

十:protect——通过判断被指定单元格的“保护”状态是否被“锁定”,返回“01”两种返回值。

  • 鼠标右击单元格B3选择“设置单元格格式”后,再点击“保护”栏,然后选中“锁定”。在单元格C3中写入公式“=CELL("protect",B3)”,因为单元格B3已经被锁定,所以返回“1”。

锁定

  • 鼠标右击单元格B4选择“设置单元格格式”后,再点击“保护”栏,然后取消“锁定”。在单元格C4中写入公式“=CELL("protect",B4)”,因为单元格B4已经没有被锁定,所以返回“0”。

未锁定

  • 关于单元格的锁定可以参考我的另一篇文章《Excel的“保护工作表”功能可以防止表格被篡改的违背表格本意》

十一:filename——通过被指定单元格所在的Excel文件是否被“保存”,返回“文件名+工作表名”或者“空值”两种返回值。

  • 在单元格B3写入公式“=CELL("filename",A1)”,因为当前的Excel文件是经过保存的,所以“文件名+工作表名”被返回了。

头条号“悟禅禅”原创文章

  • 新建一个Excel文件,不要保存。在单元格B3写入公式“=CELL("filename",A1)”,因为当前的Excel文件是未经过保存的,所以返回了“空值”

未经过保存的Excel文件

十二:format——通过被指定单元格的格式而返回22种返回值。用法很简单,只是返回值比较多而已。

  • 在单元格B3中写入公式“=CELL("format",A1)”,因为单元格A1的格式是“常规” ,所以得到返回值“G”。

=CELL("format",A1)

  • 其它的21种返回值,可以通过下图,去改变单元格的格式而得到。

format的22种返回值

CELL()”函数的功能这么强大,但却很少被使用,因为它在VBA的开发领域中的作用更大,轻而易举的就可以取到单元格的属性。看完“CELL()”函数的功能和用法,不妨反思一下曾经做过的表格可不可以再利用它来改善一下,今后要做的表格可不可以用它变得更简单。

关注@悟禅禅,为您解决@Excel与@VBA的难题。

#Excel##Excel技巧##Excel表格##财务Excel表格##科技头条#