ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: YZC51

[讨论] 自定义函数--提取单元格内多个被分开的数字

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-11-10 23:32 | 显示全部楼层
谢谢分享 现在是16版本了吧

TA的精华主题

TA的得分主题

发表于 2020-12-1 13:20 | 显示全部楼层
YZC51 发表于 2020-7-2 09:36
鼠标坐标-在状态栏显示

大神,想拜师,收了我吧

TA的精华主题

TA的得分主题

发表于 2020-12-6 08:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-6 11:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享,学习了。。。

TA的精华主题

TA的得分主题

发表于 2020-12-14 08:55 | 显示全部楼层
本帖最后由 浮生若梦~~~ 于 2020-12-28 20:46 编辑
summeren 发表于 2020-3-30 08:47
我在老师的基础上写了一个,然后提取也可以多行多列,如果符号不同,只要在delimiter更新和修改符号就可 ...

.                                                   

TA的精华主题

TA的得分主题

发表于 2021-4-30 12:57 | 显示全部楼层
YZC51 发表于 2019-9-7 19:09
'//本程序参考 兰色幻想 老师的 Wlookup 函数制作。在此致谢!2019-09-08 05:23:13

模拟微软最新 Xlooku ...

为了让非Office365的电脑也使用Xlookup,对楼主的代码加入一个if_not_found的返回值。

'参考YZC51的仿XLOOKUP代码进行修改,YZC51函数代码中没有对找不到key的异常处理。
'增加了找不到时的返回值if_not_found
'逻辑错误检查没问题
'这个自定义函数,,如果定义了if_not_found,则返回自定义的值
'Case1.对于找不到lookup_value时,会返回错误#VALUE!
'Case2.能找到lookup_value,但lookup_array和return_range的大小不同,也可返回(这不会导致返回错误的查询结果),因此和Range大小相同一样,没问题。不会返回#VALUE!。
'Case3.能找到lookup_value,未强制lookup_array和return_range起始行号相同,所以如果lookup_array和return_range的大小相同,但不小心错位了,就会导致返回错误的查询结果,但不会返回#VALUE!。
'虽然Case3不严谨,但Office提供的xlookup函数,有同样的问题,只能靠使用者注意两个Range不要错位。不会返回#VALUE!
'因此这个自定义函数,和微软的Xlookup功能在使用上是一样的

Function XLOOKUP(ByRef lookup_value As Variant, ByRef lookup_array As Range, ByRef return_range As Range, ByRef if_not_found As Variant, Optional ByRef match_mode As Integer = 0, Optional ByRef search_mode As Integer = 1)

Dim arr, arr1, arr2()
Dim k As Integer
Dim x As Integer
Dim j As Integer
Dim s
Dim flg
On Error GoTo not_found_value
If Len(lookup_value) = 0 Then lookup_value = 0
arr = lookup_array
arr1 = return_range
    If UBound(arr1) = 1 Then
        arr1 = Application.Transpose(arr1)
        arr = Application.Transpose(arr)
    End If
    ReDim arr2(1 To 1)
    For x = 1 To UBound(arr1)
        If match_mode = 2 Then
            flg = arr(x, 1) Like lookup_value     '通配符匹配
        ElseIf match_mode = 3 Then
            flg = InStr(arr(x, 1), lookup_value)  '包含匹配
        Else
            flg = (arr(x, 1) = lookup_value)      '精确匹配
        End If
        If flg And search_mode = 1 Then
            If UBound(arr1, 2) > 1 Then
                XLOOKUP = arr1(x, 1)
                With Application.ThisCell
                    For j = 1 To UBound(arr1, 2) '自动填充
                        If .Offset(, j) = "" Then s = Null Else s = "*"
                            .Offset(, j).Replace s, arr1(x, j + 1)
                    Next j
                End With
            End If
            XLOOKUP = arr1(x, 1)
            Exit Function
        Else
            If arr(x, 1) = lookup_value Then
                k = k + 1
                ReDim Preserve arr2(1 To k)
                arr2(k) = arr1(x, 1)
            End If
        End If
    Next x
    If Abs(match_mode) = 1 Then
        XLOOKUP = JS(lookup_value, lookup_array, return_range, match_mode)
    Else
        If search_mode = 0 Then XLOOKUP = Join(arr2, ",")
        If search_mode < 0 Then XLOOKUP = arr2(k)
        If search_mode > 0 Then XLOOKUP = arr2(search_mode)
    End If
   
not_found_value:
XLOOKUP = if_not_found

On Error GoTo 0
   
End Function

Function JS(ByRef J1 As Variant, ByRef R1 As Range, ByRef R2 As Range, ByRef m As Integer)
Dim Jarr1, Jarr2
Dim x As Integer
    Jarr1 = R1
    Jarr2 = R2
    For x = 1 To UBound(Jarr1)
        If x + 1 > UBound(Jarr1) Then
            JS = Jarr2(x, 1)
            Exit Function
        ElseIf J1 >= Jarr1(x, 1) And J1 < Jarr1(x + 1, 1) Then
            If m = -1 Then JS = Jarr2(x, 1) Else JS = Jarr2(x + 1, 1)
            Exit Function
        End If
    Next x
End Function

'根据当前的列序数,取得列号
'传入参数为Excel中列的序号。例如:传入1返回A,传入2返回B。
'用于给导入的数据加边框
Function Fun_GetColName(ByVal argColumn As Integer) As String
    Dim strColName As String
    Dim iNum, iMod As Integer

    iNum = argColumn \ 26
    iMod = argColumn Mod 26
    If (iMod = 0) Then
        If (iNum = 1) Then
            strColName = Chr(90)
        Else
            strColName = Chr(65 + iNum - 2) + Chr(90)
        End If
    Else
        If (iNum = 0) Then
            strColName = Chr(65 + iMod - 1)
        Else
            strColName = Chr(65 + iNum - 1) + Chr(65 + iMod - 1)
        End If
    End If
    Fun_GetColName = strColName
End Function

TA的精华主题

TA的得分主题

发表于 2022-1-26 17:36 | 显示全部楼层

请问下,提示已过时效,怎么处理

TA的精华主题

TA的得分主题

发表于 2022-10-31 19:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-12-7 14:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
YZC51 发表于 2019-8-11 10:25
图形聚光灯-V1.4版
学习老师们的文件,在此谢谢老师们!
为回馈论坛,特发此附件。请老师们斧正!

请问下楼主,这个聚光灯可以不用这个按钮开关吗 直接用不行吗

TA的精华主题

TA的得分主题

发表于 2022-12-13 10:05 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 02:05 , Processed in 0.040610 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表