随笔分类 - 熬肥Excel
用一个字来形容Excel:难!
    
摘要:递归之三——完整的科目名称一文中的示例,如果不用Lambda,倒也不是就完全无解,公式可以写成: =TEXTJOIN(" / ",,IFERROR(XLOOKUP(--LEFT(A2,LEN(A2)-{4,2,0}),A:A,B:B),"")) 公式中,用Left函数分别提取A2单元格的,总长度减4
        阅读全文
                
摘要:使用了递归的Lambda,参数必须是序列数吗? 当然不是! 来看看这个例子:根据科目代码和科目名称,用公式完成完整的科目名称 自定义的名称是Itm,Itm的参数是Lambda中定义的参数x,也就是A列。公式如下: Itm=LAMBDA(x,IF(LEN(x)>4,Itm(--LEFT(x,LEN(x
        阅读全文
                
摘要:递归,应该算是个数学问题吧,但它并不只能解决数学问题,还可以解决Excel里的迭代问题。 ExcelHome的系列丛书之一,《Excel2019函数与公式应用大全》的第481页示例25-4,就是一个带计算器的迭代问题,这类问题不用迭代也可以,但需要加辅助列:E列是序列数,F列是计算结果,当E列大于2
        阅读全文
                
摘要:递归,这名词出现在了Excel函数集团,是的,你没看错! 但递归在工作表函数里,也不是无限制的用,而是有以下条件: 需要Lambda出马 需要一个开关 需要自定义名称 先祭一个最简单的例子,定义一个名称,其参数是几,结果就是几。 x是Lambda自定义的参数,也是Fx的参数 x是数值 开关可以用If
        阅读全文
                
摘要:先看看这个:华丽丽地越过了多维引用的MakeArray 再看看这个:有了ByRow和ByCol,MM函数还要怎么混? 原来,能越过多维引用的不止以上几位,还有一位Map 题目要求1,将A10:C17这个区域里的每一行进行最大的计算,再把结果进行求和; 题目要求2:将A10:C17这个区域里的每一行进
        阅读全文
                
摘要:先看看这个:九九乘法表新玩法 里面有个MakeArray的解法,但其实,MakeArray的强大之处还不止于此,比如,人家可以华丽丽地越过多维引用。 比如下图所示,需要对每天记录中的最大值进行求和,传统的多维引用公式有点烧脑…… =SUM(MAXIFS(OFFSET(B1:D1,ROW(1:8),)
        阅读全文
                
摘要:Lambda可以说是相当颠覆函数传统概念的一个家伙,在这之前,但凡工作表函数公式的组成部分都是至少三部分:等号、函数名、一对半角的小括号。而这对半角小括号就是这函数的一堵围墙,围墙内的属于这个函数,围墙外的与这个函数无关。 可是我们来看看人家Lambda函数长啥样了(以九九乘法表公式为例): =LA
        阅读全文
                
摘要:问题:总表数据手动更新后,分表一键更新,同时分表手动更新后,总表一键更新。 解决思路:分别写两段代码,总表拆分用于前者,分表汇总用于后者。 数据源8列若干行,按第一列进行拆分。 更新分表的代码: Sub Spt() Dim MyShn As Long, MyRow As Long Range("a1
        阅读全文
                
摘要:问题:在Excel中,要用VBA把一个单元格(区域)复制粘贴到指定位置,可以使用录制宏的功能,自动生成的代码如下: (假设数据源在A1:C10,指定位置是E1:G10) Sub 录制宏() Range("A1:C10").Select Selection.Copy Range("E1").Selec
        阅读全文
                
摘要:代码如下: Sub Pt() Dim FmP, ToP FmP = InputBox("请输入起始打印页", "打印", 1) ToP = InputBox("请输入结束打印页", "打印") Sheets(2).PrintOut from:=FmP, to:=ToP End Sub
        阅读全文
                
摘要:曾经有一个非常经典的问题,根据球色算每个人的得分: 以前,我们用MM函数: =MMULT(FIND(B2:F4,"红橙绿啡蓝粉黑"),ROW(1:5)^0) 现在,我们用ByRow函数: =BYROW(FIND(B2:F4,"红橙绿啡蓝粉黑"),LAMBDA(a,SUM(a))) …… 好吧,你可以
        阅读全文
                
摘要:Excel2003被退休了,以前做的文档都是XLS的,现在都要转成XLSX,一个一个转,那样是不是2X青年的标准做法? 不要2! 来看下魔术青年是如何搞定的~~ 注意: 以下代码保存在一个新建的工作簿的模块里,存为xlsm文件,保存路径可以和其他文件在同一文件夹内,以方便thisworkbook.p
        阅读全文
                
摘要:传统的九九乘法表函数: 普通公式 =IF(COLUMN(A1)<=ROW(A1),COLUMN(A1)&"×"&ROW(A1)&"="&ROW(A1)*COLUMN(A1),"") 数组公式 {=IF(COLUMN(A:I)<=ROW(1:9),COLUMN(A:I)&"×"&ROW(1:9)&"=
        阅读全文
                
摘要:将数据按B列中的斜杠拆分,结果如图右表: E列使用公式: =TEXTSPLIT(TEXTJOIN("/",,B2:B4),,"/") 公式先使用TextJoin函数,将B2:B4全部按斜杠合并,变成“A/BB/CCC/甲/乙/XX/丙丁” 再使用TextSplit函数,将合并的结果按斜杠拆分,分隔符
        阅读全文
                
摘要:透视列:从左表到右表 日期、姓名、班次分别使用了三个公式: 日期:=UNIQUE(A2:A26) 姓名:=TRANSPOSE(UNIQUE(B2:B26)) 班次:=WRAPCOLS(C2:C26,5) 自从有了堆叠函数以后,这么个东东一个公式也可以搞定了。 =VSTACK(HSTACK("",TR
        阅读全文
                
摘要:逆透视:从左表到右表 三列可以分别使用三个公式: H2=TOCOL(CHOOSECOLS(A2:A6,1,1,1,1,1)) I2=TOCOL(CHOOSEROWS(B1:F1,1,1,1,1,1)) J2=TOCOL(B2:F6) 自从有了堆叠函数以后,这么个东东一个公式也可以搞定了。 =VSTA
        阅读全文
                
摘要:要把表1和表2合并,如图所示: 最新公式:=VSTACK(A3:C12,CHOOSECOLS(E3:G12,MATCH(E2:G2,A2:C2,))) VSTACK,用于多个表垂直堆叠的函数,1-254个参数 如果以上表1和表2字段顺序相同,可以直接用 =VSTACK(A3:C12,E3:G12) 
        阅读全文
                
摘要:这两天内心一直在徘徊的一句话就是……RT! 原因无它,就因为M365又出了新函数! 弄得本妖这会不知道是想暴走还是想撞墙~~~ 撞墙分隔线 TEXTSPLIT =TEXTSPLIT(字符串, 分列分隔符, 分行分隔符, 是否忽略空单元格, 填充值) 过去: {=TRIM(MID(SUBSTITUTE
        阅读全文
                
摘要:数据源如AB列,达成效果如DE列: 代码如下: Sub Sample() Dim MyRow As Long, MyTRow As Long, MyBRow As Long Dim MyFind As Range MyBRow = Cells(Rows.Count, 1).End(xlUp).Row
        阅读全文
                
摘要:同一文件夹内N个工作簿,每个工作簿中一个工作表,最终合并到一个工作簿内分工作表显示的代码。 假设放置以下代码的文件命名为“合并.xlsm“,并与待合并文件在同一文件夹内。 Sub Sample() Application.DisplayAlerts = False Dim MyWb As Workb
        阅读全文
                
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号