2023-10-23
【VBA案例001】实现VLOOKUP功能
2023-10-23 ~ 2023-10-23

VBA实现VLOOKUP函数功能

数据VBA
姓名年龄姓名年龄
潘全桂24荆琛泽
霍栋保35吉栋松
荆琛泽24百里刚晓
越伦信25农康雪
吉栋松34越伦信
桂真顺27霍栋保
百里刚晓19潘全桂
农康雪33桂真顺

直接附上VBA代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
'Option Explicit

Sub 单元格循环()
    Dim cel As Range
    Dim cel2 As Range
    Dim t As Double
    t = Timer
    [e6:e13] = ""
    For Each cel In Range("a6:a13")
        For Each cel2 In Range("d6:d13")
            If cel.Value = cel2.Value Then
                cel2.Offset(0, 1).Value = cel.Offset(0, 1).Value
                Exit For
            End If
        Next
    Next
    Debug.Print Format(Timer - t, "0.00000000000000s")
End Sub

Sub 数组循环()
    Dim ar, br
    Dim t As Double
    t = Timer
    [e6:e13] = ""
    ar = [a6:b13] 'range("a6:b13")
    br = [d6:e13]

    Dim i, j
    For i = 1 To UBound(ar)
        For j = 1 To UBound(ar)
            If ar(i, 1) = br(j, 1) Then
                br(j, 2) = ar(i, 2)
                Exit For
            End If
        Next j
    Next i

    [d6:e13] = br
    Debug.Print Format(Timer - t, "0.00000000000000s")
End Sub

Sub 字典循环()
    Dim d As Object, kw$
    Set d = CreateObject("Scripting.Dictionary")
    'd.CompareMode = vbTextCompare '不区分大小写
    Dim ar, br
    Dim t As Double
    t = Timer
    [e6:e13] = ""
    ar = [a6:b13] 'range("a6:b13")
    br = [d6:e13]

    Dim i, j
    For i = 1 To UBound(ar)
        d(ar(i, 1)) = ar(i, 2) 'KEY ITEM
    Next i

    For j = 1 To UBound(br)
        br(j, 2) = d(br(j, 1))
    Next j

    [d6:e13] = br
    Debug.Print Format(Timer - t, "0.00000000000000s")
End Sub

原始链接

2023-10-23
【VBA案例002】一对多查询
2023-10-23 ~ 2023-10-23

一对多查询的方法有很多,这里附上VBA代码,详细过程请看文章最后的视频。

方法一:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub 单元格循环()
    Dim i, j, k, irow
    Dim cel As Range
    Dim t As Double
    t = Timer
    Sheets("查询").Range("a6:d65536").ClearContents
    Dim str As String
    str = Sheets("查询").Range("b3")

    k = 5
    With Sheets("数据源")
        For Each cel In .Range("a2:d" & .[a65536].End(3).Row) 'xlup
            If cel.Value = str Then
                k = k + 1
                For j = 1 To 4
                    Sheets("查询").Cells(k, j) = cel.Offset(0, j - 1)
                Next
            End If
        Next
    End With
    MsgBox Format(Timer - t, "0.000s")
End Sub

方法二:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub 数组循环()
    Dim i, j, k, irow
    Dim cel As Range
    Dim t As Double
    t = Timer
    Sheets("查询").Range("a6:d65536").ClearContents
    Dim str As String
    str = Sheets("查询").Range("b3")

    Dim ar, br() 'ar 数据源 ,br 结果
    With Sheets("数据源")
        irow = .[a65536].End(3).Row
        ar = .Range("a2:d" & irow)
    End With

    ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
    For i = 1 To UBound(ar)
        If ar(i, 1) = str Then
            k = k + 1
            For j = 1 To UBound(br, 2)
                br(k, j) = ar(i, j)
            Next j
        End If
    Next i

    Sheets("查询").Range("a6").Resize(k, UBound(br, 2)) = br
    MsgBox Format(Timer - t, "0.000s")
End Sub

方法三:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub 字典查询()
    Dim i, j, k, irow
    Dim cel As Range
    Dim t As Double
    t = Timer
    Sheets("查询").Range("a6:d65536").ClearContents
    Dim str As String
    str = Sheets("查询").Range("b3")

    Dim ar, br() 'ar 数据源 ,br 结果
    With Sheets("数据源")
        irow = .[a65536].End(3).Row
        ar = .Range("a2:d" & irow)
    End With

    Dim d As Object, kw$
    Set d = CreateObject("Scripting.Dictionary")
    'd.CompareMode = vbTextCompare '不区分大小写

    For i = 1 To UBound(ar)
        If Not d.exists(ar(i, 1)) Then
            d(ar(i, 1)) = i
        Else
            d(ar(i, 1)) = d(ar(i, 1)) & "," & i
        End If
    Next i

    Dim tmpAr
    tmpAr = Split(d(str), ",")

    ReDim br(1 To UBound(tmpAr) + 1, 1 To UBound(ar, 2))
    For i = 0 To UBound(tmpAr)
        For j = 1 To UBound(ar, 2)
            br(i + 1, j) = ar(tmpAr(i), j)
        Next j
    Next i

    Sheets("查询").Range("a6").Resize(UBound(br), UBound(br, 2)) = br
    MsgBox Format(Timer - t, "0.000s")
End Sub

方法四:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub SQL查询()
    '定义变量
    Dim cnn, rst, SQL$
    Dim i, j, k
    Set cnn = CreateObject("adodb.connection") '创建数据库连接
    Set rst = CreateObject("adodb.recordset") '创建一个数据集保存数据
    Dim t As Double
    t = Timer
    '设置数据库连接
    If Val(Application.Version) < 12 Then
        cnn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties='Excel 8.0;HDR=yes';Data Source=" & ThisWorkbook.FullName
    Else
        cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';Data Source=" & ThisWorkbook.FullName
    End If

    '设置SQL语句
    SQL = "SELECT * FROM [数据源$a1:d100] WHERE 班级='" & Sheets("查询").[B3] & "'"

    'SQL结果处理
    Set rst = cnn.Execute(SQL)

    Sheets("查询").Range("a6:d65536").ClearContents '清理保存数据的区域
    Sheets("查询").Range("a6").CopyFromRecordset rst '结果输出(不带表头)
    MsgBox Format(Timer - t, "0.000s")
    rst.Close
    cnn.Close '关闭数据库连接
    Set rst = Nothing
    Set cnn = Nothing '将cnn从内存中删除
End Sub

原始链接

2023-10-23
【VBA案例003】模糊查询
2023-10-23 ~ 2023-10-23

大家好,模糊查询,在平时工作中会经常遇到。

本期呢,会将模糊查询的两个最常用的方法分享给大家。

1、instr函数 2、like运算符

在开始之前,我建议先把上一期的【VBA案例002】一对多查询看一遍。因为本次内容是基于上次的文件衍生出来的。并且代码也大同小异。

2023-10-23
【VBA案例004】自动填充表单
2023-10-23 ~ 2023-10-23

大家好!今天我们分享一个有关VBA自动填充表单的案例,帮助大家简化表单填写的过程,提高工作效率。

我们经常需要填写大量重复的表单,例如报销单、数据输入表格等,并且每个表单都有各自的字段需要填写。手动逐个填写这些表单既耗时又容易出错。

2023-10-23
【VBA案例005】自动汇总表单
2023-10-23 ~ 2023-10-23

大家好!书接上文。

有时候,我们需要处理多个工作簿,每个工作簿中包含一些特定的信息。为了将这些信息汇总到一个表中,我们可能需要手动打开每个工作簿,然后复制粘贴所需的数据。但这样做既费时又容易出错。

2023-10-23
【VBA案例006】数据去重
2023-10-23 ~ 2023-10-23

大家好!你是否在为数据去重感到烦恼?

今天,我们将分享两种高效的 VBA 方法,帮助你轻松应对数据去重难题。

举个例子。

我们要对以下数据的产品和型号进行数据去重,保留唯一值。

以下是VBA代码,你也可以直接观看下方的视频解析:

2023-10-23
【VBA案例007】多条件汇总
2023-10-23 ~ 2023-10-23

大家好!今天回答一位网友的问题。

就是用VBA进行多条件汇总,来实现数据透视表的效果,并且要对结果进行排序。

先来看例子。

假如我们有一份产品信息表,需要对它的所有产品和型号进行汇总。左侧是原始数据,右侧是处理结果。

2023-10-23
【VBA案例008】多条件查询
2023-10-23 ~ 2023-10-23

大家好!今天分享的案例是多条件查询。

这个查询在进销存或者库存管理中特别常用,如果你准备或者正在做一个自己的管理查询工具,这个方法一定要会。先来看一下数据。

比如说,现在有一份产品信息表。

2023-10-23
【VBA案例009】合并单元格汇总
2023-10-23 ~ 2023-10-23

大家好!今天分享一下遇到合并单元格的处理思路。

工作中,为了方便查看数据,很多朋友习惯性的把单元格合并起来,这样使得表格看起来清晰美观了不少。但这样做的同时,会给以后的计算增加很多困难。

2023-10-23
【VBA案例010】下拉多选
2023-10-23 ~ 2023-10-23

大家好!今天将为大家介绍在Excel中如何实现下拉多选功能,让数据输入更加灵活高效。

下拉多选功能不仅提高了数据输入的灵活性,还减少了输入错误的可能性,为我们的数据处理工作带来了更高的效率。

2023-10-23
【VBA案例011】合并工作表
2023-10-23 ~ 2023-10-23

大家好!终于放假了,知了祝大家双节快乐!~

今天分享的案例非常的经典,它让我首次见识了VBA的魅力。也是从那会儿开始,命运的齿轮开始转动,走上了学习VBA的道路。

它就是:合并工作表。

2023-10-23
【VBA案例012】合并工作簿
2023-10-23 ~ 2023-10-23

大家好!这次分享的是非常经典的案例:合并工作簿。

相信大家已经很熟悉这个问题了,就是把多个工作簿里的工作表合并到同一个sheet里。

这次同样分享两个方法,以下是VBA代码。详细解析请看文末的视频。

2023-10-23
【VBA案例013】多个工作簿所有Sheet汇总到一个工作簿中
2023-10-23 ~ 2023-10-23

大家好!昨天视频放错了,今天重新发一下。图片

这次分享的是合并系列的最后一个案例:汇总工作簿。

打个比方:把多个工作簿中的每个Sheet,汇总到一个工作簿里,汇总完之后是所有的Sheet都在同一个工作簿里。

2023-10-23
【VBA案例014】拆分工作表(上)
2023-10-23 ~ 2023-10-23

大家好!如何按照表中的某一列,拆分成独立的Sheet? 如下:

这是一个特别常见常用的问题,本期分享本人用的最多的两个方法中的第一个。

因为确实不太容易理解,所以分为两部分。

2023-10-23
【VBA案例015】拆分工作表(下)
2023-10-23 ~ 2023-10-23

大家好!书接上文,继续聊一聊拆分工作表的第二个方法。

众所周知,字典中的值不仅可以是数字、字符串,还可以是数组和对象!

上一个方法是将数组装到了字典里,这第二个方法想必大家已经猜到了,就是把对象装进字典里。

2023-10-23
【VBA案例016】拆分工作簿
2023-10-23 ~ 2023-10-23

大家好!

通过本次和之前几次的分享。对工作表、工作簿的拆分、合并都做了最基础的介绍以及案例演示。

而面对实际工作中经常遇到的工作表、工作簿的合并拆分问题,相信大家通过对这几个案例的交汇融合,基本上都可以找到对应的解决方案。

2023-10-23
【VBA案例017】合并单元格
2023-10-23 ~ 2023-10-23

大家好!

合并单元格是经常遇到的操作,在WPS中,提供了非常好用的快捷按钮。遗憾的是Excel里并没有这个一键合并单元格的功能。

今天分享用VBA合并单元格的两个最常用的方法,如果你是WPS用户,虽然不需要代码,但是编程的思路,还是有参考价值的。

2023-10-23
【VBA案例018】取消合并单元格
2023-10-23 ~ 2023-10-23

大家好!

上一篇内容分享了,用VBA合并单元格的两个方法。本期就来看一下如何取消合并的单元格。

同样的,WPS内置了一键取消合并单元格并填充内容的功能,而Excel用户只能流下羡慕的泪水。

2023-10-23
【VBA案例019】合并单元格自适应大小
2023-10-23 ~ 2023-10-23

大家好!

如果你是文职类工作,可能会遇到下面这种情况:

经常面对各种各样的表格,并且很多都是制式的,里边又充满个各种各样的格式,其中就有今天的主角儿:合并单元格。

而你的工作看似也不复杂,就是把合并单元格中显示不全的内容,通过调整单元格的大小来显示出来。

2023-10-23
【VBA案例020】整合工作簿
2023-10-23 ~ 2023-10-23

大家好!今天回答一位粉丝朋友的提问。

问题是:将多个工作簿中的所有工作表合并汇总,要求名称相同的工作表内容要合并在一起,名称不同的要单独作为一个工作表。

为此,我模拟了一份数据,结构如下图:

2023-05-15
a段落处理
2023-05-15 ~ 2023-05-15

a段落处理

2023-05-15
b表单处理
2023-05-15 ~ 2023-05-15

b表单处理

2023-05-15
c数字
2023-05-15 ~ 2023-05-15

c数字

2023-05-15
d文字
2023-05-15 ~ 2023-05-15

d文字

2023-05-15
e大纲
2023-05-15 ~ 2023-05-15

e大纲

2023-05-15
fExcel贴数
2023-05-15 ~ 2023-05-15

fExcel贴数

2023-05-15
g批注
2023-05-15 ~ 2023-05-15

g批注

2023-05-15
h行列校验
2023-05-15 ~ 2023-05-15

h行列校验

2023-05-15
i多表处理
2023-05-15 ~ 2023-05-15

i多表处理

2023-05-15
JsonConverter
2023-05-15 ~ 2023-05-15

JsonConverter

2023-05-15
j页面设置
2023-05-15 ~ 2023-05-15

j页面设置

2023-05-15
k访谈提纲
2023-05-15 ~ 2023-05-15

k访谈提纲

2023-05-15
底稿小帮手代码
2023-05-15 ~ 2023-05-15

a段落处理

2023-05-15
更新
2023-05-15 ~ 2023-05-15

更新

2023-05-15
类模块
2023-05-15 ~ 2023-05-15

类模块