ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 常用代码归集

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:14 | 显示全部楼层
Sub 自动查询_条目数组用法()
Dim d  As Object
Dim arr As Variant
Dim i As Integer
Dim j  As Integer
Dim rng As Range
Set d = CreateObject("scripting.dictionary")
With Sheets("data")
    arr = .Range("a2:e" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
For i = 1 To UBound(arr)
    d(arr(i, 1)) = Array(arr(i, 2), arr(i, 3), arr(i, 4), arr(i, 5))
    j = d(arr(i, 1))
Next
For Each rng In Range("a3:a" & Cells(Rows.Count, 1).End(xlUp).Row)
    rng.Offset(0, 1).Resize(1, 4) = d(rng.Value)
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 分类计数_()
Dim arr1 As Variant
Dim d As Object
Dim arr As Variant
Dim i As Integer
Dim rng As Variant
Set d = CreateObject("scripting.dictionary")
arr = Range("b2:b" & Cells(Rows.Count, 2).End(xlUp).Row)
For Each rng In arr
    i = d(rng)
    d(rng) = d(rng) + 1
    i = d(rng)
Next
[e1].Resize(d.Count) = Application.Transpose(d.keys)
[f1].Resize(d.Count) = Application.Transpose(d.items)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:21 | 显示全部楼层
Sub 分类求和_()
Dim arr1  As Variant
Dim d As Object
Dim arr As Variant
Dim i As Integer
Set d = CreateObject("scripting.dictionary")
arr = Range("b2:c" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(arr)
    d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 2)
Next
[e8].Resize(d.Count) = Application.Transpose(d.keys)
[f8].Resize(d.Count) = Application.Transpose(d.items)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:24 | 显示全部楼层
Sub 字典与数组结合去重()
Dim d  As Object
Dim arr As Variant
Dim rng  As Variant
Dim rngs  As Variant
Dim arr1 As Variant
Dim i  As Variant
Dim n  As Integer
Set d = CreateObject("scripting.dictionary")
arr = Sheet1.Range("a1:b" & Sheet1.Cells(Rows.Count, "a").End(3).Row)
For Each rng In arr
    arr1 = VBA.Split(rng, "|")
    For Each rngs In arr1
        d(rngs) = ""
    Next
    i = VBA.Join(d.keys, "|")
    n = n + 1
    Sheet2.Cells(n, "a") = i
    d.RemoveAll
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 多表求不重复值()
Dim d As Object
Dim sh  As Variant
Dim c As Variant
Dim arr As Variant
Set d = CreateObject("scripting.dictionary")
For Each sh In Sheets
    With sh
        If .Name <> "品名" Then
            arr = .Range("a1:a" & .Cells(Rows.Count, 1).End(3).Row)
            For Each Rng In arr
                d(Rng) = ""
            Next
        End If
    End With
Next sh
[a1].Resize(d.Count) = Application.Transpose(d.keys)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:37 | 显示全部楼层
Sub 数组法分类汇总()
Dim arr1() As Variant
Dim arr As Variant
Dim i  As Integer
Dim j  As Integer
Dim n As Integer
arr = Range("a2:c13")
For i = 1 To UBound(arr)
    ReDim Preserve arr1(1 To 2, 1 To n + 1)
    For j = 1 To UBound(arr1, 2)
        If arr1(1, j) = arr(i, 1) Then
            arr1(2, j) = arr1(2, j) + arr(i, 3)
            GoTo 100
        End If
    Next
    n = n + 1
    arr1(1, n) = arr(i, 1)
    arr1(2, n) = arr(i, 3)
100:
Next i
[e2].Resize(n, 2) = Application.Transpose(arr1)
End Sub

TA的精华主题

TA的得分主题

发表于 2017-2-10 16:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
马克收藏,谢谢分享

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 数组冒泡排序()
Dim arr As Variant
Dim i  As Integer
Dim j  As Integer
Dim k As Integer
arr = Range("a1").CurrentRegion
For i = 1 To UBound(arr)
    For j = i + 1 To UBound(arr)
        If arr(i, 1) > arr(j, 1) Then
            k = arr(i, 1)
            arr(i, 1) = arr(j, 1)
            arr(j, 1) = k
        End If
    Next
Next i
[b1].Resize(UBound(arr)) = arr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 16:57 | 显示全部楼层
Sub 数组法格式化单元格()
Dim arr As Variant
Dim i As Integer
Dim n As Integer
Dim k As Variant
Dim rng As Range
Cells.ClearFormats
arr = Range("g2:g" & Cells(Rows.Count, "g").End(3).Row)
For i = 1 To UBound(arr)
    If arr(i, 1) >= 330 Then
        Set rng = Cells(i + 1, "g").EntireRow.Range("a1:g1")
        n = n + 1
        If n = 1 Then Set rngs = rng Else Set rngs = Union(rngs, rng)
        k = rngs.Address
    End If
Next
rngs.Interior.ColorIndex = 3
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-10 17:14 | 显示全部楼层
Sub filter法筛选()
Dim i As Integer
Dim arr As Variant
Dim a As Variant
Dim n As Integer
Dim c As Variant
Range("d2:f1000").Clear
i = Cells(Rows.Count, 1).End(3).Row
Range("c2:c" & i).FormulaArray = "=a2:a" & i & " & ""-"" & b2:b" & i
arr = Range("c2:c1" & i)
Range("c2:c1" & i).Clear
a = Filter(Application.Transpose(arr), [g1], True)
For Each b In a
    n = n + 1
    c = Split(b, "-")
    Cells(n + 1, "d") = c(0)
    Cells(n + 1, "e") = c(1)
Next
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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