我当时就愣住了,恍惚间以为自己穿越回了十几年前那个拨号上网、用U盘还要先“安全删除硬件”的年代。Excel 2003,我的天,那可是个老古董了。在那个版本的世界里,想直接像现在这样,在筛选菜单里潇洒地点一下“按颜色筛选”,简直是天方夜谭。
所以,第一个,也是最扎心的一个答案是:不能。
对,你没听错。Excel 2003 的原生筛选功能,根本就不支持按照单元格颜色或者字体颜色进行筛选。它的筛选逻辑,是建立在“值”的基础上的。数字、文本、日期,这些才是它能理解的语言。至于你把单元格涂成红色还是绿色,在它眼里,那都只是花里胡哨的“皮肤”,不影响“骨肉”。
但是,我们这些在Office堆里摸爬滚打了这么多年的人,信奉的准则从来都是“办法总比困难多”。官方不给路,我们就自己挖一条。所以,想在 Excel 2003 这个老平台上实现颜色筛选,就得走点“野路子”。
这个“野路子”的核心思想其实很简单:转换。
既然Excel不认识颜色,那我们就想办法把颜色“翻译”成它能认识的东西,比如数字。红色是1,黄色是2,绿色是3,以此类推。只要我们能把这些视觉信息,变成一列实实在在的数据,那不就可以用它自带的“自动筛选”功能了吗?
而实现这个“翻译”过程的唯一神器,就是 VBA,也就是我们常说的宏。
别一听VBA就头大,觉得是什么程序员才玩的高深玩意儿。其实对于这个需求,我们只需要一段非常简短的“咒语”就能搞定。这段咒语的作用,就是创造一个它本身不存在的自定义函数,让这个函数能“看”懂单元格的颜色,并返回一个代表这个颜色的数字。
来,深呼吸,我们开始施法。
第一步:召唤VBA编辑器
你先打开你的那个充满年代感的 Excel 2003 文件。然后,同时按下键盘上的 ALT + F11 两个键。
“砰”的一下,你会进入一个全新的界面,蓝白色的背景,左边是工程项目树,右边是空白的代码区域。别怕,这地方就是Excel的“后台引擎室”。
第二步:创建“咒语”存放地
在这个界面的菜单栏上,找到“插入”,然后点击“模块”。你会看到右边的空白区域出现了一个干净的、可以输入文字的窗口。这里,就是我们念“咒语”的地方。
第三步:抄写并粘贴“神秘代码”
把下面这段代码,原封不动地复制,然后粘贴到你刚刚打开的那个模块窗口里。
vb
Function GetCellColor(ByVal Target As Range) As Integer
GetCellColor = Target.Interior.ColorIndex
End Function
就这么两行,对,你没看错,核心代码就这么点。
我简单给你翻译一下这“咒语”的意思:我们定义了一个新的函数,名字叫 GetCellColor。你给它一个目标单元格(Target As Range),它就会返回(As Integer)那个单元格内部(Interior)的颜色索引号(ColorIndex)。
每个颜色在Excel里,其实都有一个对应的数字编号,这个编号就是ColorIndex。比如黑色是1,白色是2,红色是3,等等。我们就是要利用这个隐藏的编号。
第四步:回归表格,见证奇迹
现在,关掉那个VBA编辑器窗口,回到你熟悉的Excel表格界面。
假设你的数据在A列,从A2单元格开始,你用不同的颜色标记了它们。现在,我们在旁边找一列空白的,比如B列,我们称之为“辅助列”。这个辅助列就是我们整个“曲线救国”计划的关键。
在B2单元格里,输入以下公式:
=GetCellColor(A2)
看到了吗?GetCellColor,这就是我们刚刚亲手创造的函数!现在Excel已经能认得它了。
按下回车。
你会发现,B2单元格里出现了一个数字。如果你的A2单元格是红色的,这里可能就会显示一个“3”。如果A2单元格没有填充颜色,它可能会显示一个“-4142”之类的数字,代表“无色”。
接下来,就简单了。选中B2单元格,把鼠标放在单元格右下角,等光标变成一个黑色的十字,双击它,或者按住往下拖动。瞬间,所有A列单元格的颜色,都被“翻译”成了B列对应的数字。一列代表着颜色的数字,就这么神奇地出现了!
第五步:收官!普通的筛选
现在,我们有了这个满是颜色代码的辅助列B。接下来的操作,就是你再熟悉不过的 Excel 2003 的自动筛选了。
选中你的数据区域,或者直接选中B列的列标题。点击菜单栏的“数据”->“筛选”->“自动筛选”。
B列的标题上是不是出现了一个小小的下拉箭头?
点开它!现在,你想筛选什么颜色,就去筛选对应的那个数字!比如,你想把所有标红色的数据都找出来,那就筛选数字“3”。想找所有标黄色的,那就筛选数字“6”。
大功告成!
虽然过程绕了点,但我们终究是驯服了这头来自远古的“猛兽”,让它乖乖地按照我们的颜色意愿来办事了。
最后,还有几句不得不提的“后话”
这个方法有个小小的“脾气”。当你改变了A列某个单元格的颜色时,B列那个用我们自定义函数算出来的数字,不会自动更新。
这是因为Excel默认认为,单元格格式的改变(比如换个颜色),不属于需要重新计算公式的“事件”。
怎么办?
最简单粗暴的方法:你改完颜色后,随便找个空白单元格,按一下 F2 进入编辑状态,再按一下 Enter,或者直接按 F9 强制刷新全表计算,它就会重新计算我们那个函数,颜色代码也就更新了。
如果你觉得这太麻烦,希望它能自动一点,那就要对我们刚才那段“咒语”做个小小的升级,让它变得更“敏感”一些。
回到VBA编辑器(ALT+F11),把我们之前的代码改成这样:
vb
Function GetCellColor(ByVal Target As Range) As Integer
Application.Volatile
GetCellColor = Target.Interior.ColorIndex
End Function
多加了一句 Application.Volatile。这句代码的意思就是告诉Excel:“喂!我这个函数是个‘易变品’,工作表里任何一丁点儿风吹草动,你都得想着重新计算我一次!” 这样一来,你在工作表里做任何修改,它都会自动刷新颜色代码。当然,这会稍微增加一点点电脑的计算负担,但对于现在电脑的性能来说,几乎可以忽略不计。
讲了这么多,其实核心就是利用 VBA 创建一个 自定义函数,搭一个 辅助列 的桥,把“颜色”这个视觉信息,转换成Excel能听懂的“数字”语言。这套思路,在解决很多Excel原生功能无法直接处理的问题时,都屡试不爽。
所以,下次再有人问起 Excel 2003 怎么筛选颜色,你就可以云淡风轻地告诉他,直接弄,没戏。但跟着我的法子,咱们能造出一条路来。
【今天居然有人跑来问我,Excel 2003 怎么筛选颜色。】相关文章:
excel加法表怎么做12-06
excel中怎么删除空白格12-06
怎么压缩excel里面的图片12-06
excel怎么绝对地址12-06
excel最小值怎么求12-06
你有没有过这种时刻?12-06
今天居然有人跑来问我,Excel 2003 怎么筛选颜色。12-06
怎么在excel中自动求和12-06
怎么把excel的格子变大12-06
怎么在excel中输入负数12-06
心态崩了,对吧?12-06
在excel中怎么保存数据12-06