ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-8 12:41 | 显示全部楼层
本帖最后由 YZC51 于 2019-2-3 14:23 编辑

Function TimeBJ(Optional ByVal num As Integer = 0) '网络时间
    arr = Split("北京,纽约,堪培拉,巴黎,东京,莫斯科,伦敦", ",")
    On Error Resume Next
    Application.Volatile
    Dim http
    URL = "http://www.24timemap.com/"
    With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", URL, False
    .send
    If .ReadyState <> 4 Then
    Exit Function
    End If
    st = .responseText
    End With
    a = Split(st, "tzone(")
    TimeBJ = arr(num) & Format(Left(a(num + 2), 10) / 86400 + 25569 + 1 / 3, "时间 yyyy-mm-dd hh:mm:ss")
    If num = 5 Then TimeBJ = arr(num) & Format(Left(a(num + 2), 10) / 86400 + 25569 + 1 / 8, "时间 yyyy-mm-dd hh:mm:ss")
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-10 18:31 | 显示全部楼层
Sub Main()'获取网络时间
    Dim strText As String
    With CreateObject("MSXML2.XMLHTTP")
'        .Open "GET", "https://www.baidu.com/index.php", False
        .Open "HEAD", "https://www.baidu.com/index.php", False
     '   .Option(6) = false '禁止重定向
        .send
        strText = .getResponseHeader("Date")
'        strText = .getallResponseHeaders'获取完整包头配合HEAD
        If Len(strText) > 10 Then
            MsgBox DateAdd("h", 8, Split(Replace(strText, " GMT", ""), ",")(1))
        Else
            MsgBox Now
        End If
    End With
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-26 13:51 | 显示全部楼层
Function myjoin(rng, Optional x = "", Optional y = 0)
'作用:用任意连接符连接文本
    arr = rng
    ss = ""
    For i = 1 To UBound(arr, 1)
    For j = 1 To UBound(arr, 2)
'       If arr(i, j) <> "" Then ss = ss & arr(i, j)
         ss = ss & arr(i, j)
    Next
    Next
    myjoin = Mid(ss, 1 + Len(x))
    If y Then myjoin = Len(ss)
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-31 10:50 | 显示全部楼层
自动排楼层6层.xlsm
自动排楼层6层.rar (494.23 KB, 下载次数: 59)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-9 21:20 | 显示全部楼层
更新
Function WLOOKUP(X As Range, M As Variant, Optional a = 1, Optional b = 2)
'比VLOOKUP函数更 强 大的函数:参数 X 为查找内容;M 为查找区域;
'a 查询第几个,0为最后一个,小于0输出有几个被查找内容;b 返回第几列,可以为负数。
    Dim i As Integer
    i = Application.CountIf(M, X)
    Set M = Intersect(M.Parent.UsedRange, M)
    For Each MR In M
       If MR.Value = X Then
           y = y + 1
         If y > i Then Exit Function
            If a = 0 And y = i Then
                WLOOKUP = MR.Offset(0, b).Value
            Else
                If y = a Then WLOOKUP = MR.Offset(0, b).Value
            End If
         End If
    Next MR
    If a < 0 Then WLOOKUP = i
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-10 07:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Function DLOOKUP(X, Z, M, Optional a = 1, Optional b = 3)
'比VLOOKUP函数更强大的双条件查找函数。参数说明: X、Z 为需要查找内容;M 为查找区域;
'a 查询第几个,0为最后一个,-1 为倒数第二个内容,小于-1输出有几个被查找内容;b 返回第几列。
    On Error Resume Next
    i = Application.CountIf(M, X)
    i1 = Application.CountIf(M, Z)
    i = Application.Min(i, i1)
   arr = M
    For j = 1 To UBound(arr)
       If arr(j, 1) = X And arr(j, 2) = Z Then
           Y = Y + 1
         If Y > i Then Exit Function
            If a = 0 Then
                DLOOKUP = arr(j, b) '***
            Else
                If Y = a Then DLOOKUP = arr(j, b)
                If a = -1 Then
                    i = i - 1
                    If Y = i Then DLOOKUP = arr(j, b)
                End If
            End If
        End If
    Next
    If a < -1 Then DLOOKUP = i
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-10 08:07 | 显示全部楼层
本帖最后由 YZC51 于 2019-2-11 20:38 编辑

DLOOKUP函数应用举例
找到上一次录入的里程表数相减然后写到数据库中.rar (65.63 KB, 下载次数: 67)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-11 13:16 | 显示全部楼层
查找函数
Function DLOOKUP4(X, Z, M, Optional a = 1, Optional b = 5) 'a 为查询第1个,其它为最后一个
Dim L, M1, N, Y
'  On Error Resume Next
   arr = M.Parent.UsedRange
    If X <> "燃油费" Then DLOOKUP4 = 0: Exit Function
    Y = UBound(arr)
    If a = 1 Then
        L = 2: M1 = Y: N = 1
    Else
        L = Y: M1 = 2: N = -1
    End If
    For j = L To M1 Step N
        If Len(arr(j, 3)) = 0 Then
        Else
            If arr(j, 3) = X And arr(j, 4) = Z Then DLOOKUP4 = arr(j, b): Exit Function
        End If
    Next
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-12 08:15 | 显示全部楼层
通用的
Function DLOOKUP5(X, Y, M, Optional X1 = 1, Optional Y1 = 0, Optional a = 1, Optional b = 3) 'a 为查询第1个,其它为最后一个
Dim L, M1, N, Z
'  On Error Resume Next
    arr = M.Parent.UsedRange
    Z = UBound(arr)
    If a = 1 Then
        L = 2: M1 = Z: N = 1
    Else
        L = Z: M1 = 2: N = -1
    End If
    For j = L To M1 Step N
        If Len(arr(j, X1)) = 0 Then
        Else
            If Y1 = 0 Then Y2 = "": Y = "" Else Y2 = arr(j, Y1)
            If arr(j, X1) = X And Y2 = Y Then DLOOKUP5 = arr(j, b): Exit Function
        End If
    Next
End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-12 08:32 | 显示全部楼层
本帖最后由 YZC51 于 2019-2-12 08:36 编辑

通用的双条件查询函数说明:
1、X1 设定X 位于第几列;
2、Y1 设定Y 位于第几列,Y1 等于0时,为单条件查询,只查询X的结果;
3、a 为1查询第1个,其它为最后一个;
4、b 设定结果位于第几列。

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-12-24 11:30 , Processed in 0.045706 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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