精华内容
下载资源
问答
  • 假设我有一组字符串,并且我们要指定应该从这些字符串中动态删除哪些字符: 由于指定的字符集不是静态的,因此确实没有任何好的方法。如果是一组固定的字符,则可以通过大量的嵌套逻辑公式来实现,但这将非常复杂...

    ebd2086c36a7fc59c5db0de8cb7f86aa.png

    日前,微软宣布在Excel Insider Beta版本中发布了一项新功能LAMBDA。Excel公式是世界上使用最广泛的编程语言,方便快捷的Excel公式也是大家最常用的功能,但是Excel公式的死的无法自定义。如果能在其基础上进行自主定义和编程是一个很大使用场景,现在这个愿望可以达成了,使用LAMBDA可以基于公式实现可自定义可重用函数的能力。

    概述

    简而言之,LAMBDA允许用户将Excel的公式语言来定义自己的自定义功能。Excel已经允许定义自定义函数,但是只能通过使用完全不同的语言(例如VBA,JavaScript)编写它们。LAMBDA则可以让用户使用Excel自己的公式语言定义自定义函数。还支持在函数中调用其他函数,通过函数调用可以部署的功能不受限制。在很多语言中,有函数式编程的lambda语法,同样的LAMBDA的引入标志着Excel公式语言完成了图灵完备。

    使用LAMBDA,可以通过Excel中现有公式,并将其打包为在LAMBDA函数,并重命名命名。然后,就可以在工作表中的任何地方引用该函数,在整个工作表中可以重复使用该自定义函数。

    LAMBDA还支持递归。例如,如果创建一个名为MYFUN的LAMBDA,则可以在MYFUN的定义内调用MYFUN。此前,递归功能必须通过脚本来实现。

    LAMBDA基础

    = LAMBDA包含以下三个关键部分:LAMBDA功能组件,命名lambda和调用lambda函数

    LAMBDA功能组件

    一个创建基本lambda函数的示例。

    假设我们有以下公式:

    =LAMBDA(x, x+122)

    在公式中, x是调用LAMBDA时可以传递的参数,而x + 122 是逻辑。

    例如,假设调用了lambda并为x输入值1,则Excel将执行以下计算:

    1 + 122

    而1+122=123

    命名lambda

    如果对LAMBDA命名,就可以实现简单重用,为了达到该目的需要需要使用名称管理器。

    可以在功能区中找到"名称管理器",方法是:

    公式>名称管理器

    0d1092f5840f67360ad902be6e220c6a.png

    打开名称管理器后,将看到以下窗口

    b2930f543075042c74cb019eca733bdd.png

    创建一个新条目(New…)并填写相关字段

    b6a39397f5fd5db41f4fa1cb5dd3fcd6.png

    名称Name:要创建的函数名称

    注释Comment:调用函数时将显示说明和相关的提示

    Refers引用:lambda函数定义

    完成后,单击OK保存该lambda,并且应该在结果窗口中看到返回的定义。

    70a79b0762416f2e02dff5e0c005b2da.png

    然后就可以通过按其名称调用工作簿中的新创建的自定义函数。

    调用LAMBDA

    简而言之,调用lambda函数的方式与在Excel中调用本机函数的方式相同。

    例如对前面的示例,可以直接调用MYLAMBDA :

    = MYLAMBDA(122)

    返回值:123

    最后要注意的一点是,可以在不命名的情况下调用lambda。如果没有命名前面的公式,而只是在网格中编写它,可以如下调用它:

    =LAMBDA(x, x+122)(1)

    这将为x传递1,并返回123

    可重用的自定义功能

    在Excel中使用公式的更具挑战性的部分之一是经常会使用相当复杂的公式,这些公式在工作表中多次重复使用(通常仅通过复制/粘贴)。这样会使其他人很难阅读和理解其功能,而且更容易出错,进行故障分析和修复也比较困难。使用LAMBDA,可以重复使用并具有可组合性。

    假设有一个序号列表,其中位置编码(双字母)在需要中,需要将该值提取出来:

    077d4cdf4b4401db149e0bb7d09cb8fb.png

    使用Excel函数有很多方法可以做到这一点,比如使用LET公式:

    =LEFT(RIGHT(A2,LEN(A2)-FIND("-",A2)),FIND("-",RIGHT(A2,LEN(A2)-FIND("-",A2)))-1)

    将公式并将其复制到状态列中,就能自动获得结果。

    这种方法有两个问题:

    易错误:如果发现需要纠正的逻辑错误,则必须返回并在错误的地方进行更新。此外,每当一遍又一遍地重复复杂的公式(而不是一次定义然后引用)时,都会存在风险。例如,如果有序列号为"105532-872332-WA-73",那么用上述公式就出错。如果发现这样的问题并要修复,则需要对使用该公式的每个单元格都要进行更新。

    可组合性/可读性差: 如果是使用别人的公式,则很难知道该公式的意图(提取位置)。也不好将该公式和其他公式结合使用,例如,如果想获取到位置并根据结果值进行查找。

    使用LAMBDA,可以创建一个名为GETLOCATION的函数,并将公式逻辑放入该函数的定义中。

    =LAMBDA(SN, LEFT(RIGHT(SN,LEN(SN)-FIND("-",SN)),FIND("-",RIGHT(SN,LEN(SN)-FIND("-",SN)))-1))

    注意,指定了函数要使用的参数(在本例中为SN)以及函数的逻辑。然后在电子表格,可以简单的写的getLocation 作为一个公式,和任何其他Excel函数一样。如果发现错误,则将只需修复一个位置,并且使用该功能的所有位置都会自动修复。

    f5e4132dfda8137b8ef1d36d8e1bf453.png

    另外还可以使用其他逻辑来组合该功能。例如,如果每个位置的税率表,则可以编写此简单公式以根据SN返回税率。

    =XLOOKUP(GETLOCATION(B2), table1[locations], table1[tax])

    递归

    Excel公式中最大的遗漏项之一是缺乏循环功能,以动态定义的间隔重复一组逻辑。可以通过多种方式手动配置Excel重新计算的间隔,以在一定程度上模拟该间隔,但这并不是公式语言所固有的。

    假设我有一组字符串,并且我们要指定应该从这些字符串中动态删除哪些字符:

    457be521a66c5da32d4bf9a197f37057.png

    由于指定的字符集不是静态的,因此确实没有任何好的方法。如果是一组固定的字符,则可以通过大量的嵌套逻辑公式来实现,但这将非常复杂并且容易出错。还要考虑如果要删除的字符数大于设想的字符数就会报错失败。

    使用LAMBDA,可以创建一个称为REPLACECHARS 的函数,该函数引用自身,然后循环调用要删除的字符列表:

    =LAMBDA(textString, illegalChars,IF(illegalChars="", textstring,REPLACECHARS(SUBSTITUTE(textString, LEFT(illegalChars, 1), ""),RIGHT(illegalChars, LEN(illegalChars)-1))))

    注意,在REPLACECHARS的定义中,有一个对REPLACECHARS的引用。IF语句表明如果没有更多非法字符,则返回输入textString,否则,将每次出现在invalidChars中最左边的字符都删除。递归开始于使用更新的字符串和其余的invalidChars再次调用REPLACECHARS 的请求。这样它会一直调用自己,直到对要删除的每个字符进行了解析,从而获得了所需的结果。

    d5ddf557c98bd00b6c802fa558f87f27.gif

    不仅是数字和字符串

    关注Excel改进的同学可能会注意到在Excel中可以使用的数据类型有两项重大改进:

    动态数组:可以传递值数组,而不是将单个值传递给函数,函数还可以返回值数组。

    数据类型:存储在单元格中的值不再只是字符串或数字。单个单元格可以包含具有大量属性的丰富数据类型。

    函数可以将数据类型和数组作为参数,也可以将结果作为数据类型和数组返回。构建的lambda是同样的道理。

    假如有一个城市列表,如果要按顺序去每个城市,需要计算出旅行的总距离。基本解决思路是:

    有一系列的City数据类型。城市数据类型具有经度和纬度属性。

    使用纬度和经度,可以使用地球半径来近似估算两点之间的距离(这是第一个Lambda,我们称为DistanceBetweenCities)

    创建一个递归lambda DistanceBetweenMultipleCities,以迭代数组中的城市。除了调用自身之外,要遍历城市列表,它还调用DistanceBetweenCities 函数以获取行驶距离的运行总和。

    4aa2b05b85f807415b879879eb3036a6.gif

    展开全文
  • 一、数值转化为字符串函数Str、CStr Str函数将数值转换为字符串,即返回一个代表一个数值的字符串,其语法为: ...注意:当一个数值转换成字符串时,总会在其前面保留一个空位来表示正负,即字符串的第一位...

    一、数值转化为字符串函数Str、CStr

         Str函数将数值转换为字符串,即返回一个代表一个数值的字符串,其语法为:
    Str(number
     
         CStr函数将数值表达式转换为字符串,其语法为:
    CStr(mynumberExpression
     
        注意:当一个数值转换成字符串时,总会在其前面保留一个空位来表示正负,即字符串的第一位一定是空格或正负号,Str将英文句号(.)作为有效的小数点。
         
       演示代码:
    Sub StrTranfomationDemo()
       
        Dim myDouble As Double
        myDouble = 234.823
       
        Debug.Print "Str:<" & str(24.32) & ">"
        Debug.Print "Str:<" & str(-24.32) & ">"
        Debug.Print "CStr:<" & CStr(myDouble) & ">"
     
    End Sub
     
       运行结果
     
    Str:<  24.32>
    Str:<-24.32>
    CStr:<234.823>
     
    二、字符型数值转化为数值型数据
     
         Val函数可以将包含数值的字符型数据转化为Double(双精度)数值型数据类型,其语法为:
     
    Val(string)
       演示代码1:
    Sub ShowFormatVal()
     
        Dim num As Double, str As String
       
        str = Format(Now, "Short Time")
        num = Val(str)
        '如果现在的时间是 4:31 PM,下面语句展示的结果为: 16:31 
        Debug.Print str, num
       
    End Sub

       演示代码2:

      Sub TransformStr2Int()
        Dim num As Double, str As String, tmp As String

        ' A1单元格中的数据为 0.8051
        str = ThisWorkbook.Worksheets("Sheet1").Range("A1")
        MsgBox "str: " & str
        tmp = Right(str, Len(str) - 1)
        MsgBox "tmp: " & tmp
        num = Val(tmp) + 1  ' 字符串转数字
        MsgBox "num: " & num

        MsgBox Hex(num)   ' 十进制转换成十六进制数
      End Sub

    【应用】
    • 字符型数值是不能进行四则运算的,只能通过Val函数将其转换后才能使用。
    • 可以将8进制、16进制等转化为10进制数,如,Val(&o77)(8进制)、Val(&HFF)(16进制)分别转化为十进制的63和255

    转载于:https://www.cnblogs.com/iczelion/p/6067976.html

    展开全文
  • Excel技巧-将文本批量转换成字符串 打开EXCEL2007文件后,打开“视图--宏--Visual Basic编辑器”双击“Microsoft Excel对象”下面的"Sheet1"然后在空白区域加上下列VBA代码,然后切换一下工作表就可以...
    Excel技巧-将文本批量转换成字符串
    打开EXCEL2007文件后,打开“视图--宏--Visual Basic编辑器”
    双击“Microsoft Excel对象”下面的"Sheet1"
    然后在空白区域加上下列VBA代码,然后切换一下工作表就可以给每一行的数字列加上单引号变成文本列了(完成后要记得把代码删除):

    Private Sub Worksheet_Activate()
    If MsgBox("Are you sure?", vbOKCancel) = vbOK Then
    Call Num2Text
    End If
    End Sub

    Sub Num2Text()
    For i = 1 To 1000 '共1000行,2为列数,可以修改
    Sheet1.Cells(2)(i) = "'" + Sheet1.Cells(2)(i).Text
    Next
    End Sub
    展开全文
  • Str函数将数值转换为字符串,即返回一个代表一个数值的字符串,其语法为:Str(number)CStr函数将数值表达式转换为字符串,其语法为:CStr(mynumberExpression)注意:当一个数值转换成字符串时,总会在其前面保留一个...

    Str函数将数值转换为字符串,即返回一个代表一个数值的字符串,其语法为:

    Str(number)

    CStr函数将数值表达式转换为字符串,其语法为:

    CStr(mynumberExpression)

    注意:当一个数值转换成字符串时,总会在其前面保留一个空位来表示正负,即字符串的第一位一定是空格或正负号,Str将英文句号(.)作为有效的小数点。

    演示代码:

    Sub StrTranfomationDemo()

    Dim myDouble As Double

    myDouble = 234.823

    Debug.Print "Str:"

    Debug.Print "Str:"

    Debug.Print "CStr:"

    End Sub

    运行结果

    Str:

    Str:

    CStr:<234.823>

    二、字符型数值转化为数值型数据

    Val函数可以将包含数值的字符型数据转化为Double(双精度)数值型数据类型,其语法为:

    Val(string)

    演示代码1:

    Sub ShowFormatVal()

    Dim num As Double, str As String

    str = Format(Now, "Short Time")

    num = Val(str)

    ‘如果现在的时间是 4:31 PM,下面语句展示的结果为: 16:31

    Debug.Print str, num

    End Sub

    演示代码2:

    Sub TransformStr2Int()

    Dim num As Double, str As String, tmp As String

    ‘ A1单元格中的数据为 0.8051

    str = ThisWorkbook.Worksheets("Sheet1").Range("A1")

    MsgBox "str: " & str

    tmp = Right(str, Len(str) - 1)

    MsgBox "tmp: " & tmp

    num = Val(tmp) + 1  ‘ 字符串转数字

    MsgBox "num: " & num

    MsgBox Hex(num)   ‘ 十进制转换成十六进制数

    End Sub

    【应用】

    字符型数值是不能进行四则运算的,只能通过Val函数将其转换后才能使用。

    可以将8进制、16进制等转化为10进制数,如,Val(&o77)(8进制)、Val(&HFF)(16进制)分别转化为十进制的63和255

    展开全文
  • 一、数值转化为字符串函数Str、CStr ...注意:当一个数值转换成字符串时,总会在其前面保留一个空位来表示正负,即字符串的第一位一定是空格或正负号,Str将英文句号(.)作为有效的小数点。 演示...
  • VBA 判断字符串是否包含中文字符

    千次阅读 2019-07-02 22:20:42
    VBA 判断字符串是否包含中文字符 Function StrWithChinese...StrChk = VBA.StrConv(StrChk, vbNarrow) '将字符串转换成半角 StrWithChinese = IIf(Len(StrChk) < LenB(StrConv(StrChk, vbFromUnicode)), Tru...
  • 字符串类型的 2017.1.1 转换成 日期类型 2017/1/1 应该怎么做啊
  • 有的时候我们使用RC4来编码数据,但产生的字符串已经不是正常的字符串,在存储过程中会造成混乱...1'将一个字符数组转换成以逗号分隔的数字字符串2'作者:朱亦文3'时间:2006.12.134FunctionString2Num()FunctionSt...
  • json字符串转化json对象// jquery的方法var jsonObj = $.parseJSON(jsonStr)//js 的方法var jsonObj = JSON.parse(jsonStr)json对象转化json字符串//js方法var jsonStr1 = JSON.stringify(jsonObj)例如例如:var...
  • 关于VBA中Evaluate的用法

    千次阅读 2020-04-02 11:53:49
    Evaluate用法:将字符串转换为值或对象。 举例说明: 一、将字符串公式转换为一个值 在VBA中,双引号之间为字符串。(字符串在单元格中靠左...二、将字符串转换成对象 下图中先给A1单元格赋值为一,用于对比B1和...
  • Excel VBA 函数

    2021-04-18 17:07:24
    字符串的第一个字符转换成它的ASCII值 Atn 返回一个数的反正切值 CallByName 执行方法,设置或返回对象的某个属性 CBool 将...
  • vba17-25

    2020-12-06 10:30:10
    所有非0的数字转换成布尔类型都是True 3变量定义简写 dim i % integer整型 dim j& long长整型 double 小数 $ string 字符串 常数后面加符号,改变常数数据类型 Date Boolean 没有简写 4 常量声明:一经赋值在...
  • 38.将"hh:mm:ss"格式的时分秒数转换成秒数 39.金额中文大写转数字 40.把角度转为度秒分、弧度等显示 41.身份证号码侦测 42.显示公式 43.方便财务人员理帐查找 44.数值转换为字符地址 45.字符地址转换为数值 46.等待...
  • 函数作用:将"hh:mm:ss"格式的时分秒数转换成秒数.....62 '39.函数作用:金额中文大写转数字.......................62 '40.函数作用:把角度转为度秒分、弧度等显示.............63 '41.函数作用:身份证号码侦测.........
  • 04142设置单元格字符串中一部分字符的格式(其他字体属性) 04143设置单元格的下画线 04144设置单元格的字体属性(字体、字号、加粗、斜体、颜色等) 04145设置单元格区域的外部边框 04146设置单元格区域的全部边框 ...
  • Format(原始内容,期望格式,每周起始日,每年起始周)将原始内容(数字、日期、文本等)转换成 指定格式的字符串并返回。除了第一个参数(原始内容)外,其他参数均为可选。 #:代表一位数字, ”.##”:...
  • MD5 编码,处理英文时没问题,加了中文,就跟https://tool.oschina.net/encrypt?type=2和https://md5jiami.51240.com/的结果不一样了,想了下,应该还是 UTF-8 编码的问题,于是将原来在用的编码中和字符串转 ...
  • evaluate函数

    2018-03-24 11:05:00
    Evaluate函数的作用: 1.Evaluate方法用于将文本形式的公式转换成值,例如Evaluate("1+...含义就是说VBA里,两边加双引号的excel 公式会被认为是一段字符串,不会被计算。而Evaluate函数可以将这段字符串表示的公式...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    【公农双历查询】:生成多功能日历,可以查询所有节、假日和农历 【高级定位】:多功能选择(查找)工具。可以选择大于某值或者小于某值或者在...【计算表达式】:将表达式转换成值(包括从混合字符串中取出的表达式)
  • Excel百宝箱

    2012-10-27 17:09:21
    一个教导和辅助利用Excel的工具 公农双历查询】:生成多功能日历,可以查询所有节、假日和农历 【高级定位】:多功能选择(查找)工具。...【计算表达式】:将表达式转换成值(包括从混合字符串中取出的表达式)
  • 经典SQL脚本大全

    2013-12-24 15:28:19
    │ varbinary转换成字符串.sql │ 关键字搜索.sql │ 分解公式.sql │ 字符串分拆--格式化.sql │ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续...
  • 【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
  • 【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
  • 【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
  • 【数字转英文】 将选中区域(默认)或已使用区域存储格的金额数字转换成英文格式显示的表达字符串,为三资企业制作客户外汇付款通知书的理想工具。 【文本转EXCEL】 将文本文件按指定的分隔符号分隔一次性导入到...
  • 【计算表达式】:将表达式转换成值(包括从混合字符串中取出的表达式) <══════════════════┤ 函数功能介绍 ├════════════════════> 函数名称:sumifcol 函数功能与...
  • 【计算表达式】:将表达式转换成值(包括从混合字符串中取出的表达式) <══════════════════┤ 函数功能介绍 ├════════════════════> 函数名称:sumifcol 函数功能与参数...
  • 6.3.6 把带小数点的小时、分钟或秒转换成时间 6.3.7 在时间中加小时数、分钟数或秒数 6.3.8 时区之间的转换 6.3.9 时间值的舍入 6.3.10 使用非时间值  第7章 计数与求和 7.1 工作表单元格的计数与求和 7.2 ...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

vba转换成字符串