大家好!今天回答一位网友的问题。
就是用VBA进行多条件汇总,来实现数据透视表的效果,并且要对结果进行排序。
先来看例子。
假如我们有一份产品信息表,需要对它的所有产品和型号进行汇总。左侧是原始数据,右侧是处理结果。
我们来通过三个不同的方法,来解决这个问题。其中方法一:最容易理解,适合对字典刚入门的情况。方法二:具有有一定的难度,需要对字典有更加深刻的了解。方法三:作为拓展内容。
以下是VBA代码,你也可以直接观看下方的视频解析:
方法一:123456789101112131415161718192021222324252627282930Sub 方法一() Dim i, j, k Dim ar Dim d1 As Object, d2 As Object, d3 As Object Set d1 = CreateObject("Scripting.Dictionary") Set d2 = CreateObject("Scripting.Dictionary") Set d3 = CreateObject ...
大家好!今天分享的案例是多条件查询。
这个查询在进销存或者库存管理中特别常用,如果你准备或者正在做一个自己的管理查询工具,这个方法一定要会。先来看一下数据。
比如说,现在有一份产品信息表。
我们要做的是在查询页面,输入参数后,查询出所有满足条件的内容。其中参数可以不填,不填就表示要查询所有内容。
本期将使用2个方法来实现效果,以下是VBA代码,详细视频解析在文末。
方法一:1234567891011121314151617181920212223242526272829303132333435363738Sub 方法一() Dim i, j, k Dim ar, br() With Sheet2 ar = .Range("a1:f" & .[a65536].End(3).Row) End With ReDim br(1 To UBound(ar), 1 To UBound(ar, 2)) Dim customer, product, startDate As Date, endDate As Date ...
大家好!今天分享一下遇到合并单元格的处理思路。
工作中,为了方便查看数据,很多朋友习惯性的把单元格合并起来,这样使得表格看起来清晰美观了不少。但这样做的同时,会给以后的计算增加很多困难。
比如下边:要计算产品的总库存。
当我们要对合并单元格进行汇总统计的时候,总会遇到很多问题。其实只要你明白合并单元格的底层逻辑之后,问题就会变的简单起来。
合并单元格:其实只保留了区域左上角的一个值,其他位置都是空的。
明白原理之后,我们再来看下VBA代码,详细解析请看文末视频。
12345678910111213141516171819Sub 汇总() Dim i, j, k Dim ar ar = Range("a1:c" & [c65536].End(3).Row) Dim d As Object, kw$ Set d = CreateObject("Scripting.Dictionary") 'd.CompareMode = vbTextCompare '不区分大小写 For i = ...
大家好!今天将为大家介绍在Excel中如何实现下拉多选功能,让数据输入更加灵活高效。
下拉多选功能不仅提高了数据输入的灵活性,还减少了输入错误的可能性,为我们的数据处理工作带来了更高的效率。
也许你见过使用表单控件的方式实现下拉多选,但是通过数据验证和VBA,我们同样能够轻松创建具有下拉多选功能的工作表。
以下是VBA代码,详细解析请看文末视频。
1234567891011121314151617181920212223242526272829303132333435363738Private Sub Worksheet_Change(ByVal Target As Range) Dim rngDV As Range Dim oldVal As String Dim newVal As String Dim fenGeFu As String If Target.CountLarge > 1 Then Exit Sub fenGeFu = "," '规定用逗号分隔 On Error Resume Next ...
大家好!这次分享的是非常经典的案例:合并工作簿。
相信大家已经很熟悉这个问题了,就是把多个工作簿里的工作表合并到同一个sheet里。
这次同样分享两个方法,以下是VBA代码。详细解析请看文末的视频。
自定义函数:
1234567891011121314151617Private Function filelist(folderspec, Optional pstr = "*.txt") On Error GoTo errline Dim fs, f, f1, fc, i, farr Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(folderspec) Set fc = f.Files ReDim farr(1 To fc.Count) For Each f1 In fc If f1.Name Like pstr And Not f1.Name Like "*~$*" T ...
大家好!终于放假了,知了祝大家双节快乐!~
今天分享的案例非常的经典,它让我首次见识了VBA的魅力。也是从那会儿开始,命运的齿轮开始转动,走上了学习VBA的道路。
它就是:合并工作表。
问题很简单:就是把一个工作簿里的所有sheet合并到一个总表里边。
如下图:将 4个班级的信息合并。
以下是VBA代码(长按复制,可向右托动),详细解析请看文末视频。
方法一:复制粘贴12345678910111213141516171819Sub 复制粘贴() Dim sht As Worksheet Dim zongSht As Worksheet Set zongSht = Worksheets("总表") Dim rowsCount, zongRows For Each sht In Worksheets If sht.Name <> "总表" Then With sht rowsCount = .[a65536].End(3).Row ...
大家好!昨天视频放错了,今天重新发一下。图片
这次分享的是合并系列的最后一个案例:汇总工作簿。
打个比方:把多个工作簿中的每个Sheet,汇总到一个工作簿里,汇总完之后是所有的Sheet都在同一个工作簿里。
这次使用了Dir函数,以下是VBA代码。详细解析请看文末的视频。
‘Dir函数:返回的是指定路径下【文件】或者【文件夹】的名称。如果不存在,就返回 “” 字符串‘Dir 函数一般搭配 do while 循环遍历文件,结束的条件就是Dir返回空值。
‘举例:‘fileName1 = Dir(“E:\test*.xlsx”) 查找E盘test文件夹里边的xlsx工作簿,将第一个工作簿名称返回‘fileName2 = Dir 查找下一个,并且不需要写参数‘fileName3 = Dir 查找下一个,并且不需要写参数‘fileName4 = Dir 查找下一个,并且不需要写参数‘…… ...
大家好!如何按照表中的某一列,拆分成独立的Sheet? 如下:
这是一个特别常见常用的问题,本期分享本人用的最多的两个方法中的第一个。
因为确实不太容易理解,所以分为两部分。
这个方法非常的实用,在其他地方也可以发挥很大的作用,所以墙裂推荐大家掌握!
以下是VBA代码。详细解析请看文末的视频。
12345678910111213141516171819202122232425262728293031323334353637383940Sub 数组装进字典() Dim i, j, k Dim ar, tmp() Dim d As Object, kw$ Set d = CreateObject("Scripting.Dictionary") 'd.CompareMode = vbTextCompare '不区分大小写 ar = Range("a1:e" & [a65536].End(3).Row) Dim irow For i = 2 To UBound(ar) ...
大家好!书接上文,继续聊一聊拆分工作表的第二个方法。
众所周知,字典中的值不仅可以是数字、字符串,还可以是数组和对象!
上一个方法是将数组装到了字典里,这第二个方法想必大家已经猜到了,就是把对象装进字典里。
首先简单介绍一下Union函数的使用方法。Union:返回两个或多个区域的合并区域。
语法: Union(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30) AS Range参数: Arg1 必需 Range类型。 Arg2 必需 Range类型。 Arg3– Arg30 可选 Variant类型。返回: Range类型。另外一点需要强调的是,VBA中给对象变量赋值使用Set,并且Set不能省略。
以下是VBA代码。 ...
大家好!
合并单元格是经常遇到的操作,在WPS中,提供了非常好用的快捷按钮。遗憾的是Excel里并没有这个一键合并单元格的功能。
今天分享用VBA合并单元格的两个最常用的方法,如果你是WPS用户,虽然不需要代码,但是编程的思路,还是有参考价值的。
以下是VBA代码。详细解析请看文末的视频。
方法一:12345678910111213141516171819Sub union并集函数() Dim i Dim rng As Range Set rng = [a2] Application.DisplayAlerts = False For i = 2 To 20 If Range("a" & i + 1) = Range("a" & i) Then Set rng = Union(rng, Range("a" & i + 1)) Else rng.Merge Set rng = Ra ...

