精华内容
下载资源
问答
  • VBA数组应用实例下载

    2009-06-13 14:47:34
    VBA实例,一切来处网络,分享给大家一起学习
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第75讲内容:利用数组将工资表分解成工资条。字典和数组在实际的应用中有很多,假如你是财务人员可以考虑今日我讲的内容和下一讲的内容,就是如何把工资表...

    e75a61a2c3439538e8775e394b40974c.png

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第75讲内容:利用数组将工资表分解成工资条。

    字典和数组在实际的应用中有很多,假如你是财务人员可以考虑今日我讲的内容和下一讲的内容,就是如何把工资表变成工资条,下面我们来根据实例讲解。

    实例,如下面的截图,是一个工作表,这些工资表的内容变成工资条,就是每个条条上都有抬头,为了分发方便要把每个工资条间留出空格,该怎么做到呢?今日我讲解单纯用数组的方案,在下一讲我将讲解用字典的方法。

    cb597d9c2c4473f6232beaf2548aed3a.png

    思路分析:先将数据放到数组中,然后提取出每行数据进行处理,回填数据后,然后是格式的复制。

    下面看我给出的代码:

    Sub mynzsz_75() '第75讲 利用数组将工资表分解成工资条

    Dim mybrr()

    Sheets("75").Select

    '将源数据存入数组

    myarr = Range("a1:f" & Range("a1").End(xlDown).Row)

    '结果放入动态数组中mybrr

    ReDim Preserve mybrr(1 To 6, 1 To UBound(myarr, 1) * 3 - 3)

    For i = 2 To UBound(myarr)

    '将记录第i条记录存入mycrr

    mycrr = Application.Index(myarr, i, 0)

    '设置行数

    t = (i - 1) * 3 - 2

    'mybrr()是列行的赋值

    For j = 1 To UBound(mycrr)

    mybrr(j, t) = Application.Index(myarr, 1, 0)(j)

    mybrr(j, t + 1) = mycrr(j)

    Next

    Next i

    Sheets("工资条打印").Select

    Cells.Clear

    '在工资条中填入数据

    With Range("a1").Resize(UBound(mybrr, 2), 6)

    '结果要转置后回填

    .Value = Application.Transpose(mybrr)

    '在工资条中填入格式

    Sheets("75").Range("a1:f3").Copy '此处是A1:F3

    .SpecialCells(xlCellTypeConstants, 23).Select

    .PasteSpecial xlPasteFormats

    Application.CutCopyMode = False

    End With

    End Sub

    代码的截图:

    b1e3f17860af4db778864188a28e8b06.png

    代码分析:

    1 上述代码将工作表变成工资条。本讲的内容主要利用了数组,利用了数组的提取,数组的转置,格式的复制等等

    2 'mybrr()是列行的赋值

    For j = 1 To UBound(mycrr)

    mybrr(j, t) = Application.Index(myarr, 1, 0)(j)

    mybrr(j, t + 1) = mycrr(j)

    Next

    上述语句中实现了将工资表的数据按行存入mybrr中,同时mybrr(j, t) = Application.Index(myarr, 1, 0)(j),设置了行数据的抬头。注意要理解此处(j, t)的含义,j是列的t是行。

    3 '在工资条中填入数据

    With Range("a1").Resize(UBound(mybrr, 2), 6)

    '结果要转置后回填

    .Value = Application.Transpose(mybrr)

    上述语句回填时用了转置,将行和列进行了归于正常的位置。

    4 '在工资条中填入格式

    Sheets("75").Range("a1:f3").Copy '此处是A1:F3

    .SpecialCells(xlCellTypeConstants, 23).Select

    .PasteSpecial xlPasteFormats

    Application.CutCopyMode = False

    上述预计实现了格式的复制,注意理解复制的时候要多复制一行。

    下面看代码的运行:

    b4e632c4eca4ed345d63f23881cc7563.png

    今日内容回向:

    1 如何理解用数组实现把工资表变成工资条的方法?

    2 上述代码中利用了几个数组?作用是什么?

    展开全文
  • 大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第44讲,利用字典来判断数组的值是否重复,并提取出不重复的值。对于字典的应用,排重是很普遍的应用之一。对于数组的排重,如果单用数组的内容,在我...

    73065a6e09327d418bba902700d75b13.png

    大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第44讲,利用字典来判断数组的值是否重复,并提取出不重复的值。对于字典的应用,排重是很普遍的应用之一。对于数组的排重,如果单用数组的内容,在我之前数组的讲解中,是相当费劲的,如果利用字典,排重几乎是不费力的就可以完成。今日就专门讲解一下数组中利用字典的特性来排重处理,然后把数据装入另外的数组,并回填。

    实例的数据如下:在工作表中有下面的数据,要先放到数组中,然后进行排重处理,排重的时候要注意不要区分大小写,排重后的数据要先放到另外一个数组中,然后回填到工作表。

    9b526fd6384fb02fa9826c55ec6a41be.png

    如何能够实现这个目的呢?如果是不要区分大小写,那么比较的模式要利用vbTextCompare,在代码中首先要先把数据装入数组,然后在数组中建立一个循环,利用字典,判断是否重复,不重复的放到另外一个数组中,下面看我给出的代码:

    Sub mynzsz_44() '第44讲 利用字典来判断数组的值是否重复,并提取出不重复的值

    Dim brr() '声明一个数组brr放结果

    Sheets("44").Select

    Set mydic = CreateObject("scripting.dictionary")

    '不区分字母大小写比较

    mydic.CompareMode = vbTextCompare

    '数据源装入数组myarr

    myarr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).row)

    ReDim brr(1 To UBound(myarr), 1 To 1)

    '标题行不要,开始遍历数组

    For i = 2 To UBound(myarr)

    '将数据转换成字符串类型,因为字典关键字认为数值和文本型数值是不相等的

    s = myarr(i, 1)

    If Not mydic.exists(s) Then

    '如果字典中不存在s,则作为关键字装入字典,个数累加,结果装入结果数组

    mydic(s) = ""

    k = k + 1

    brr(k, 1) = myarr(i, 1)

    End If

    Next

    [E:E].ClearContents

    [E1] = "排重结果"

    With [E2].Resize(k, 1)

    '设置文本格式,防止某些文本数值变形

    .NumberFormat = "@"

    .Value = brr

    End With

    MsgBox "一共有:" & k & "个不重复值。"

    '释放字典内存

    Set mydic = Nothing

    End Sub

    代码截图:

    7d9242a896600007599d598576c03439.png

    代码讲解:

    1 上述代码实现了对一个数组的排重处理,过程和要求的完全一致,大家要注意,实现一个目的有很多的方法,有的会简单些,有的会复杂些,我会尽可能的多利用些方法来实现目的,让大家在学习的过程中能有所比较,无论是哪一种方法,读者要充分的理解,如果实在理解不了可以记住代码为自己所用也可。

    2 Set mydic = CreateObject("scripting.dictionary")

    '不区分字母大小写比较

    mydic.CompareMode = vbTextCompare

    此处我给出了在字典中键的比较方式,是不区分大小的。

    3 myarr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).row)

    ReDim brr(1 To UBound(myarr), 1 To 1)

    当确定了数组myarr 后,我们就可以确定brr()的大小了。这里我命名的这个动态数组是二维数组

    4 '将数据转换成字符串类型,因为字典关键字认为数值和文本型数值是不相等的

    s = myarr(i, 1)

    在这里我给出了一个临时的变量S,大家要理解我给出的解释

    5 If Not mydic.exists(s) Then

    '如果字典中不存在s,则作为关键字装入字典,个数累加,结果装入结果数组

    mydic(s) = ""

    k = k + 1

    brr(k, 1) = myarr(i, 1)

    End If

    上述代码中实现了对是否重复的判断,并将不重复的值写入数组。注意我这里对于键值给出的是“”,即空值

    6 With [E2].Resize(k, 1)

    '设置文本格式,防止某些文本数值变形

    .NumberFormat = "@"

    .Value = brr

    End With

    上述代码实现了不重复数据的回填,不再多说了。

    下面看代码的运行:

    654d71d62e0d70ae5e0c15fe7f8bbab8.png

    今日内容回向:

    1 如何实现数组的排重处理?

    2 数据回填要是文本格式要如何处理?

    展开全文
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日的内容是第58讲,利用工作表函数,对字典的键进行排序,并给出对应的重复个数。对于排序,大家并不陌生,在之前的讲解中,我也讲了利用sort进行排序的方法。今日...

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日的内容是第58讲,利用工作表函数,对字典的键进行排序,并给出对应的重复个数。

    对于排序,大家并不陌生,在之前的讲解中,我也讲了利用sort进行排序的方法。今日我们讲解利用工作表函数对数值排序.对于工作函数,我这讲利用了LARGE,还可以使用SMALL.都是可以的,这类函数在实际的应用中也十分方便。

    实例,我们看下面的数据,在A列中有若干多的数据,我们要对这些数值进行排序,并将重复的次数记录。

    0ff5f4b4b46c40f3bdafada09bc12a0c.png

    思路分析:我们要先将数据放到字典中,放的同时利用键值进行累计出现重复的次数,然后取出键和键值放到对应的数组中,同时再建立一个数组用于存放排序的结果,然后在数组中提取数值,提取的时候是按照从大到小顺序进行。并将结果放到数组中,最后回填数据。下面看我给出的代码:

    Sub mynzsz_58() '第58讲 利用工作表函数,对字典的键进行排序,并给出对应的重复个数

    Dim ran

    Sheets("58").Select

    Set mydic = CreateObject("Scripting.Dictionary") '字典

    '将数据放入字典中,并计数

    For Each ran In Sheets("58").Range("a2:a" & Range("a2").End(xlDown).Row)

    If ran.Value <> "" Then

    If Not mydic.exists(ran.Value) Then

    mydic.Add ran.Value, 1 '初始值为1

    Else

    mydic(ran.Value) = mydic(ran.Value) + 1 '重复时累加

    End If

    End If

    Next

    '将字典的键和键值,取出,放到数组中

    k = mydic.keys: T = mydic.items

    '新建一个数组,用于放排序的结果

    ReDim X(1 To mydic.Count, 1 To 2)

    For i = 1 To mydic.Count

    X(i, 1) = Application.Large(k, i) '按最大值的先后将数据放到数组中

    X(i, 2) = mydic(X(i, 1)) '提取相应的键值

    Next

    [e:f].Clear

    [e1] = "排序": [f1] = "重复次数"

    Sheets("58").[e2].Resize(mydic.Count, 2) = X

    Set mydic = Nothing

    End Sub

    代码截图:

    477b704a4f33af25f1d9680c5b802cf2.png

    代码讲解:

    1 上述代码实现将数据放到字典mydic中,放的同时利用键值进行累计出现重复的次数,然后取出键和键值放到对应的数组k,t中备用,同时再建立一个数组x用于存放排序的结果,然后在数组k中提取数值,提取是按照从大到小的顺序进行。并将结果放到数组x中,最后回填数据。

    2 For Each ran In Sheets("58").Range("a2:a" & Range("a2").End(xlDown).Row)

    If ran.Value <> "" Then

    If Not mydic.exists(ran.Value) Then

    mydic.Add ran.Value, 1 '初始值为1

    Else

    mydic(ran.Value) = mydic(ran.Value) + 1 '重复时累加

    End If

    End If

    Next

    上述代码在将数据放到字典中,注意这里有一个是否重复的判定:Not mydic.exists(ran.Value)

    3 '将字典的键和键值,取出,放到数组中

    k = mydic.keys: T = mydic.items

    此处要注意的是k 和 t 的含义,是一个一维数组,之后的代码要在k中建立一个循环提取数值。

    4 For i = 1 To mydic.Count

    X(i, 1) = Application.Large(k, i) '按最大值的先后将数据放到数组中

    X(i, 2) = mydic(X(i, 1)) '提取相应的键值

    Next

    上述代码按照i值在k中提取数据,i是从小到大排序的,所以LARGE函数会相应出现从大到小的排序,Application.Large(k, i),要注意这个工作表函数的用法. 将mydic(X(i, 1)) 提取相应的键值放到X(i, 2)中

    5 Sheets("58").[e2].Resize(mydic.Count, 2) = X

    上述代码回填数据

    下面看代码的运行:

    0e461a98a488a06a8080b6fb3da7975c.png

    今日内容回向:

    1 如何实现键的排序?

    2 利用上述工作表函数如何实现从小到大的排序?

    #2019生机大会#

    展开全文
  • 大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列...

    6b2a03ab7c29ab22310e35d00e814681.png

    大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。

    还是先看实例,下面的工作表中A列和B列有两列数值如下:

    e278edb1784d3beccb5150e293a5c258.png

    我们首先要在A列中去掉B列的重复值,然后在B列中去掉和A列重复的值,然后将剩余的A,B列数合并到C列。这个问题在理论上的应用较多,实际工作中要结合具体的应用来解析。如何实现呢?我们看下面的代码:

    Sub MyNZsz_27() '第27讲 两列数中去掉相互重复值后合并"

    Sheets("27").Select

    Dim temvarArr1(), temvarArr2(), tem()

    varArr1 = Range("A1:A" & Range("A1").End(xlDown).Row) '将A列数据写入数组

    varArr2 = Range("B1:B" & Range("B1").End(xlDown).Row) '将B列数据写入数组

    ReDim temvarArr1(1 To UBound(varArr1)) '将A列数据写入动态一维数组

    For i = 1 To UBound(varArr1)

    temvarArr1(i) = varArr1(i, 1)

    Next

    ReDim temvarArr2(1 To UBound(varArr2)) '将B列数据写入动态一维数组

    For i = 1 To UBound(varArr2)

    temvarArr2(i) = varArr2(i, 1)

    Next

    '在数据1中去掉数据2的值,结果赋值给tem1

    tem1 = Filter(temvarArr1, temvarArr2(1), False) '给TEM1赋初始值,返回temvarArr1中不含temvarArr2(1)的值

    For i = 2 To UBound(temvarArr2)

    tem1 = Filter(tem1, temvarArr2(i), False)

    Next i

    '在数据2中去掉数据1的值,结果赋值给tem2

    tem2 = Filter(temvarArr2, temvarArr1(1), False) '给TEM2赋初始值

    For i = 2 To UBound(varArr1)

    tem2 = Filter(tem2, temvarArr1(i), False)

    Next i

    ReDim tem(0 To UBound(tem1) + UBound(tem2) + 1)

    For i = 0 To UBound(tem1)

    tem(i) = tem1(i)

    Next

    For i = UBound(tem1) + 1 To UBound(tem1) + UBound(tem2) + 1

    tem(i) = tem2(i - UBound(tem1) - 1)

    Next

    ' MsgBox Join(tem) '如果需要提示用户用此代码

    Range("C1") = "两列数中去掉相互重复值后合并"

    [c2].Resize(UBound(tem) + 1) = WorksheetFunction.Transpose(tem)

    End Sub

    代码截图:

    1b64b00b56e030c7a86e5357b7cd562e.png


    代码解析:

    1 整个 代码的过程先讲A和B列的数写入数组,然后转成一个一维数组,并分别去除重复值,得到TEM1和TEM2两个数组。最后将两个数组合并。

    2 ReDim tem(0 To UBound(tem1) + UBound(tem2) + 1) 此处给动态数组以上下界的定义

    3 For i = 0 To UBound(tem1)

    tem(i) = tem1(i)

    Next

    For i = UBound(tem1) + 1 To UBound(tem1) + UBound(tem2) + 1

    tem(i) = tem2(i - UBound(tem1) - 1)

    Next

    上述代码中分别有循环语句给给TEM数组赋值。

    最后我们看输出的结果:

    cee2f3f92d7da03714f02d97c3d14d31.png

    今日内容回向:

    1 上述代码的过程是否理解呢?

    2 上述过程中有哪些是动态数组?哪些是固定数组呢?

    展开全文
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第64讲内容:从字典提取数据后,汉字的笔画和拼音排序处理.排序的方式,是我在本套书中重点介绍的内容,之前的讲解中我先后讲解了几种方法,但实际的工作中...
  • 大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列...
  • 大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第44讲,利用字典来判断数组的值是否重复,并提取出不重复的值。对于字典的应用,排重是很普遍的应用之一。对于数组的排重,如果单用数组的内容,在我...
  • 大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第44讲,利用字典来判断数组的值是否重复,并提取出不重复的值。对于字典的应用,排重是很普遍的应用之一。对于数组的排重,如果单用数组的内容,在我...
  • 这讲的内容涉及到数组在数据库中的应用,如果大家对数组还有不理解之处也可以参考拙著《工作表数组与VBA数组解决方案》,数组在EXCEL及其接口程序中的应用中有着不可替代的角色,利用好了,可以给自己的工作表处理和...
  • 是否存在5个连续整数,答案为否应用场景:当某种现象连续出现5次,则认为异常,否则为正常现象形象点场景:一工厂生产泡面,进行机器自动检查其重量并记录检测时间及重量数据到后台问题:假设如果连续5次重量不足,...
  • EXCEL VBA应用开发与实例精讲

    热门讨论 2009-05-06 15:34:29
    3.3 函数应用实例 3.4 外部引用 3.5 函数的功能简介 3.6 使用自定义函数 3.7 小结 第4章 Excel对象 4.1 VBA常用对象 4.2 Application对象 4.3 工作簿——Workbooks集合和Workbook对象 4.4 工作表——Worksheet对象 ...
  • EXCEL VBA应用开发与实例精讲完整版

    热门讨论 2012-04-16 14:17:15
    3.3 函数应用实例 3.4 外部引用 3.5 函数的功能简介 3.6 使用自定义函数 3.7 小结 第4章 Excel对象 4.1 VBA常用对象 4.2 Application对象 4.3 工作簿——Workbooks集合和Workbook对象 4.4 工作表——...
  • 数组:为了提高VBA的运算速度,特别讲解了数组。以及他的相关应用 图形:这是精彩的部分。讲了图形的各种批量插入方式。通过坐标自动绘制图形。批量制作员工卡等实例。很多实例在工作上都能用到。...
  • 大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第44讲,利用字典来判断数组的值是否重复,并提取出不重复的值。对于字典的应用,排重是很普遍的应用之一。对于数组的排重,如果单用数组的内容,在我...
  • 大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第44讲,利用字典来判断数组的值是否重复,并提取出不重复的值。对于字典的应用,排重是很普遍的应用之一。对于数组的排重,如果单用数组的内容,在我...
  • 这讲的内容涉及到数组在数据库中的应用,如果大家对数组还有不理解之处也可以参考拙著《工作表数组与VBA数组解决方案》,数组在EXCEL及其接口程序中的应用中有着不可替代的角色,利用好了,可以给自己的工作表处理和...
  • 这讲的内容涉及到数组在数据库中的应用,如果大家对数组还有不理解之处也可以参考拙著《工作表数组与VBA数组解决方案》,数组在EXCEL及其接口程序中的应用中有着不可替代的角色,利用好了,可以给自己的工作表处理和...
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第69讲内容:如何将一般字典的键和键值转换成二维数组。我们知道,字典的键和键值在提取出来的时候,分别是一维数组,能不能转换为二维数组,以利于后续...
  • 大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列...
  • 错误处理、类模块的使用、用户窗体的使用、数组应用、Automation等等,不一一 列举,读者可根据自身情况,逐一进行渐进式学习。 对于书中所涉及的一些代码可能读者还会有更好的、更简单的方法,也或者有些代 码还...
  • 其实很多应用场景中,它们是并肩作战的好兄弟。实例需求已有生产排程数据如下所示。需要整理为如下格式。数据合并的要点有三个:料号和机种号为统计的关键字段未交数量求和交期汇总,包含时间和数量示例代码Sub Load...
  • 数组:为了提高VBA的运算速度,特别讲解了数组。以及他的相关应用 图形:这是精彩的部分。讲了图形的各种批量插入方式。通过坐标自动绘制图形。批量制作员工卡等实例。很多实例在工作上都能用到。...
  • EXCEL VBA编程进阶

    万人学习 2016-02-06 11:14:19
    数组:为了提高VBA的运算速度,特别讲解了数组。以及他的相关应用 图形:这是精彩的部分。讲了图形的各种批量插入方式。通过坐标自动绘制图形。批量制作员工卡等实例。很多实例在工作上都能用到。
  • 其实很多应用场景中,它们是并肩作战的好兄弟。 实例需求 已有生产排程数据如下所示。 需要整理为如下格式。 数据合并的要点有三个: 料号和机种号为统计的关键字段 未交数量求和 交期汇总,包含时间和...
  • 大家好,我们继续讲解VBA数据库解决方案,今日讲解第53讲内容:工作表查询时,类似于筛选功能的LIKE和NOT LIKE 的应用。大家在工作的时候,利用EXCEL操作,筛选是必不可少的工具之一。例如我们可以筛选以某个字符...
  • 大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第64讲内容:从字典提取数据后,汉字的笔画和拼音排序处理.排序的方式,是我在本套书中重点介绍的内容,之前的讲解中我先后讲解了几种方法,但实际的工作中...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

vba数组应用实例