ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 常用代码归集

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 17:20 | 显示全部楼层
Sub 动态数组指定条件筛选()
Dim arr() As Variant
Dim arr1() As Variant
Dim m As Integer
Dim n As Integer
Dim rn As Variant
rn = Cells(Rows.Count, 1).End(3).Address
arr1 = Range("a2", rn)
m = Application.CountIf(Range("a2", rn), ">=80")
ReDim arr(1 To m)
For Each ar In arr1
    If ar >= 80 Then
        n = n + 1
        arr(n) = ar
    End If
    [c2].Resize(UBound(arr)) = Application.Transpose(arr)
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 08:57 | 显示全部楼层
Sub 数组法去重()
Dim arr1(1 To 10) As Variant
Dim arr As Variant
Dim i As Integer
Dim j  As Integer
Dim k As Integer
Set lastcell = Cells(Rows.Count, 2).End(3)
arr = Range([b2], lastcell)
For i = 1 To lastcell.Row - 1
    For j = 1 To UBound(arr1)
        If arr(i, 1) = arr1(j) Then
            GoTo 1000
        End If
    Next j
    k = k + 1
    arr1(k) = arr(i, 1)
1000:
Next i
[e2].Resize(k) = Application.Transpose(arr1)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 09:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 数组法多表合并()
Dim arr() As Variant
Dim arr1 As Variant
Dim sh As Worksheet
Dim j  As Integer
Dim n As Integer
For Each sh In Sheets
    If sh.Name <> "汇总" Then
        arr1 = sh.Range("a2:b" & sh.UsedRange.Rows.Count)
        act = act + UBound(arr1)
        ReDim Preserve arr(1 To 2, 1 To act)
        For j = 1 To UBound(arr1)
            n = n + 1
            arr(1, n) = arr1(j, 1)
            arr(2, n) = arr1(j, 2)
        Next
    End If
Next
Sheets("汇总").[a2].Resize(n, 2) = Application.Transpose(arr)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 09:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 简易查询系统()
Dim arr As Variant
Dim i As Integer
Dim n As Integer
Range("i3:o999").ClearContents
arr = Range("a2", Cells(Rows.Count, 7).End(3))
For i = 1 To UBound(arr)
    If arr(i, 1) Like Range("j1").Value Then
        n = n + 1
        Cells(n + 2, 9).Resize(1, 7) = Application.Index(arr, i)
    End If
Next i
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 10:05 | 显示全部楼层
Sub 正则分组法提取身份证信息()
Dim reg As Object
Dim n  As Integer
Dim m As Variant
Set reg = CreateObject("vbscript.regexp")
n = 1
With reg
    .Global = True
    .Pattern = "(\S+) (\S+) (\S) (\d+)(( \S+){1,3})"
    Set mat = .Execute(Sheet3.Range("a1"))
    For Each m In .Execute(Sheet3.Range("a1"))
        n = n + 1
        For y = 1 To 5
            Cells(n, y) = .Replace(m, "$" & y)
        Next
    Next
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 10:19 | 显示全部楼层
本帖最后由 jsgj2023 于 2017-2-11 11:15 编辑

Sub 正则分组法提取身份证信息()
Dim reg As Object
Dim n  As Integer
Dim m As Variant
Set reg = CreateObject("vbscript.regexp")
n = 1
With reg
    .Global = True
    .Pattern = "(\S+) (\S+) (\S) (\d+)(( \S+){1,3})"
    Set mat = .Execute(Sheet3.Range("a1"))
    For Each m In mat
        n = n + 1
        For y = 1 To 5
            Cells(n, y) = .Replace(m, "$" & y)
        Next
    Next
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 11:42 | 显示全部楼层
Sub 正则replace法提取()
Dim reg As Object
Dim n As Integer
Set reg = CreateObject("vbscript.regexp")
With reg
       .Global = True
    .Pattern = "([一-龢]{3,}) (\d+人)"
    Set mat = .Execute([a1])
    For Each m In mat
        n = n + 1
        Cells(n + 1, 3) = .Replace(m.Value, "$1")
        Cells(n + 1, 4) = .Replace(m.Value, "$2")
    Next
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 11:43 | 显示全部楼层
Sub 正则submatches提取()
Dim reg As Object
Dim i As Integer
Set reg = CreateObject("vbscript.regexp")
With reg
       .Global = True
    .Pattern = "([一-龢]{3,}) (\d+人)"
    Set mat = .Execute([a1])
    For i = 0 To mat.Count - 1
        Cells(i + 2, 5) = mat(i).submatches(0)
        Cells(i + 2, 6) = mat(i).submatches(1)
    Next i
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 16:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册


Sub 美式排序()
    Dim arr, x%, y%, z!, d As Object, k
    Set d = CreateObject("Scripting.Dictionary")
    Range("i1").CurrentRegion.ClearContents
    arr = Range("a1").CurrentRegion
    For x = 2 To UBound(arr)
        If Not d.exists(arr(x, 2)) Then
            Set d(arr(x, 2)) = CreateObject("Scripting.Dictionary")
        End If
        d(arr(x, 2))(arr(x, 3)) = d(arr(x, 2))(arr(x, 3)) + 1
    Next
    a = d.keys: b = d.items
    For Each k In d.keys
        y = 0
        z = 1000
        Do While z >= 0
            If z <> 1000 Then
                d(k)(z * (-1)) = y + 1
                y = y + 1
                d(k).Remove z
            End If
            z = Application.Max(d(k).keys)
        Loop
    Next
    For x = 2 To UBound(arr)
        arr(x, 4) = d(arr(x, 2))(arr(x, 3) * (-1))
    Next
    Range("i1").Resize(UBound(arr), 4) = arr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-11 17:05 | 显示全部楼层
Sub 正则_计算工作时间()
Dim reg As Object
Dim rn As Variant
Dim rng As Variant
Set reg = CreateObject("vbscript.regexp")
Set rng = Range("a1:a" & [a65536].End(xlUp).Row)
With reg
    .Global = True
    .Pattern = "\d+:\d+"
    For Each rn In rng
        Set mat = .Execute(rn.Value)
        Cells(rn.Row, 2) = (CDate(mat(1).Value) - CDate(mat(0).Value)) * 24
    Next
End With
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-6 03:42 , Processed in 0.033105 second(s), 4 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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