这是前些年发表在网易博客上的旧文,稍事修改。
问题:如何将EXCEL文件中的工作表名字提取出来?
1、定义名称sheetname,公式=REPLACE(GET.DOCUMENT(1),1,FIND("]",GET.DOCUMENT(1)),)&T(NOW())
2、在单格中输入=sheetname,则单元格显示所在工作表的表名。
3、用途
(1)我们要做很多单位的报表,格式一样,只是单位名称不同
(2)比如表头为江苏分公司,而表页也是江苏分公司,当我们再做另一个单位的表,我们把前的表复制一张(鼠标左键拖动表页+crtl,再松开鼠标)更改表页名称时,不用再手工去改表头中的单位名称,有此函数可以实现自动更新,可以避免一些无心的小失误(表的内容是上海分公司的数据,而报表中的单位名称却是江苏分公司,这种事情估计也不少见)
(2)如果表头不是简单的跟表页一样,比如表头是2010年9月江苏分公司利润表,而表页名称是江苏分公司,我们可以这样做,在表头中输入="2010年9月"&sheetname&"利润表"
(3)还有稍微复杂一些的运用,比如报表间的取数查询等,后续专题分享。
4、EXCEL2003的安全级别要设置成中及以下。设成中就可以了,每次打开表的时候,提示是否运行宏,选择是即可;EXCEL2007及以后版本,在信任中心设置,宏设置点选“禁用无数字签名的所有宏”,并且文件要保存为启用宏的工作簿(后缀名为”.xlsm“)
附:公式解读
1、名称:对某单元格或某个单元格区域指定一个“名字”,可以进行引用、运算等操作。
2、REPLACE(old_text, start_num, num_chars, new_text):将从指定的字符串(old_text),指定位置开始(start_num),指定字符数量(num_chars),替换成新的字符(new_text)
3、GET.DOCUMENT(1),宏表函数(早期版本的函数,现在只能在定义名称中使用),取得文件名,比如“[EXCEL取工作表名.xlsx]Sheet1”
4、FIND(find_text, within_text, [start_num]):用于在第二个文本串中定位第一个文本串,并返回第一个文本串的起始位置的值,该值从第二个文本串的第一个字符算起。
5、T(value):返回值引用的文字,如果值是文字或引用文字,则 T 返回值。 如果值未引用文字,则 T 返回 ""(空文字)。
6、NOW():返回当前日期和时间的序列号。当需要在工作表上显示当前日期和时间或者需要根据当前日期和时间计算一个值并在每次打开工作表时更新该值时,使用NOW函数很有用。
EXCEL取工作表名公式思路总结:
a、利用宏表函数GET.DOCUMENT(1),取得工作表名A,如“[EXCEL取工作表名.xlsx]Sheet1”;
b、利用FIND函数,找到“]"的位置B;
c、再利用REPLACE函数,将工作表名A从开始到位置B的所有字符替换成空(截去)
d、再利用T()函数、NOW()函数相结合,实时更新结果(因宏表函数不会自动更新值)
e、大功告成。