专栏名称: Excel之家ExcelHome
excel技巧原创教程每日推送,excel表格职场模板干货仓库,图文/视频/动画等多种教学方式分享excel操作技巧教程/excel函数公式教程/excel数据透视表教程/excel图表教程/Word教程,助您轻松提高办公效率!
目录
相关文章推荐
Excel之家ExcelHome  ·  用Excel算算,今年攒了多少钱? ·  5 天前  
Excel之家ExcelHome  ·  AI赋能,效率倍增 ·  5 天前  
Excel之家ExcelHome  ·  Excel控件动态图表 ·  5 天前  
完美Excel  ·  一些有力量的图片 ·  1 周前  
完美Excel  ·  工作表滚动技巧 ·  1 周前  
51好读  ›  专栏  ›  Excel之家ExcelHome

单元格内容合并,就用Contxt函数吧

Excel之家ExcelHome  · 公众号  · Excel  · 2017-08-18 07:00

正文

今天我们聊一聊“一勺汇”的终极杀手——将符合条件的多个结果合并到一个单元格内的自定义函数:Contxt


先说下啥是自定义函数,度娘是这么说的:

用户自定义函数是指如果要在公式或计算中使用特别复杂的计算,而工作表函数又无法满足需要,则需要创建用户自定义函数。这些函数,称为用户自定义函数,可以通过使用 Visual Basic for Applications 来创建。


看起来很复杂的说,其实就是用VBA代码写个函数。


当然喽,我们今天聊的不是VBA代码,而是自定义函数Contxt。——我们不需要知道Contxt的VBA代码是怎么写的,只需要知道Contxt是怎么用就好了。

这就好比,我们想吃块猪肉,还需要去养猪吗?不需要的,去菜市场买点来炒就好了。

今天我们就是去菜市场,买个Contxt带回家用用。

                                         

还是先来看一道题,如下图所示,基础数据是某个学院某些人的性别以及考试成绩的信息(数据纯属虚拟,如有雷同,那是逆天)。

现在老板发话咧,让你统计一份不及格人员的名单,按性别和课类进行统计,统计的结果每个人名之间以空格间隔,结果参照下方所示。

——统计你妹,老板你到底懂不懂Excel啊,你这不符合数据规范……,你心里默默的念叨这么一句,然后该干什么还得干什么,苦闷到天亮。


而如果你知道自定义函数Contxt,则可以瞬间秒杀此类问题。

Contxt函数的功能其实就是一个高级的连接符,可以快捷将参数值捏合成一个字符串。除了错误值,啥都能接受并处理。


以上述图片问题为例,我们在B13输入以下数组公式,按组合键结束输入,并复制填充到B13:C14区域,即可得出最终结果。

=Contxt(IF(($B$2:$B$9=$A13)*(C$2:C$9<60),$A$2:$A$9&" ",""))

说说这个公式的意思:


IF(($B$2:$B$9=$A13)*(C$2:C$9<60),$A$2:$A$9&" ","")部分,是Contxt需要合并成一个字符串的数据。

IF函数首先判断B2:B9的值是否等于A13(男),再判断C2:C9的值是否小于60(不及格),如果两个条件同时成立,返回A列姓名连接上空格,否则返回假空。


于是得到一个内存数组:

{"";"星光 ";"";"";"";"";"郭辉 ";""}

最后使用Contxt将IF函数的结果合并为一个字符串,得到最终结果:

星光 郭辉


瞧瞧,Contxt处理起“一勺汇”来,是不是很方便?!

上面我们说了Contxt怎么用,下面我们来说下怎么去菜市场买个Contxt带回家。


1   打开VBE窗口

右键单击任意工作表标签,在弹出的快捷菜单中选择【查看代码】命令。


2   插入模块

在已打开的VBE窗口中,右键单击【工程资源管理器】任意处,在弹出的快捷菜单中,依次单击【插入】——【模块】


3   复制粘贴代码

将以下代码复制粘贴到已激活模块的代码窗口中。

PubliC FunCtion Contxt(ParamArray args() As Variant) As Variant

Dim tmptext As Variant, i As Variant, Cellv As Variant

Dim Cell As Range

tmptext = ""

For i = 0 To UBound(args)

   If Not IsMissing(args(i)) Then

       SeleCt Case TypeName(args(i))

           Case "Range"

               For EaCh Cell In args(i)

                   tmptext = tmptext & Cell

               Next Cell

           Case "Variant()"

               For EaCh Cellv In args(i)

                   tmptext = tmptext & Cellv

               Next Cellv

           Case Else

               tmptext = tmptext & args(i)

       End SeleCt

   End If

Next i

ConTxt = tmptext

End FunCtion


如此,我们就成功的将Contxt函数带回家了,赶紧打发它去做点事吧。


提示:Contxt作为自定义函数,需要【开启宏】才能工作哦。


图文作者:看见星光


长按下面二维码图片,点”识别图中二维码“然后再点关注,每天都会收到最新excel教程。


ExcelHome,微软技术社区联盟成员

推荐文章
Excel之家ExcelHome  ·  用Excel算算,今年攒了多少钱?
5 天前
Excel之家ExcelHome  ·  AI赋能,效率倍增
5 天前
Excel之家ExcelHome  ·  Excel控件动态图表
5 天前
完美Excel  ·  一些有力量的图片
1 周前
完美Excel  ·  工作表滚动技巧
1 周前
笑点研究所  ·  哇!相信你绝对没见过这么大的螃蟹
8 年前