暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据查询并同步归类

VBA语言専攻 2022-06-16
115
【分享成果,随喜正能量】生活像本书,读出它的味道,还要讲究用一个更好的态度打开的方式,包容、柔软、善待和诚恳,愿意和生活去达成一种默契,愿意在生活里达成一种谅解。
《VBA数组与字典方案》教程是我推出的第三套教程,目前已经是第一版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。七、一、三、九组合套教程掌握后,可以解决大多数工作中遇到的实际问题。
这套教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数据查询并同步归类

第三十五讲  工作表查询时,实现按工作表数据归类

大家好,我们继续讲解VBA数组与字典解决方案,今日讲解第35讲内容:工作表查询时,结合数组,实现在工作表查询的同时,完成分工作表的归类汇总。今日的内容对于实际的工作非常重要,也是我根据实际的工作加工整理的一段代码。

1  实际问题的场景分析

实例问题:大家看下面的工作表数据截图,每型号产品是给不同的生产厂生产的,供货的是不同的供应商,那么问题来了,我要实现分供应商把各个型号进行汇总,同时把供应商的分别放置在不同的工作表中,如何实现呢?
我们先进行一下问题的分析:
1)  在数据处理前我们要知道有多个供应商,而且要清楚,这个数据是不固定的。
2)  要根据供应商的数目,插入工作表。
3)  要按照供应商的不同来提出数据。
看起来很复杂,但确实是我们的工作实例,如财务的工资表可以根据代码分部门;物流部门可以按此代码分供货商,销售部门可以按此代码进行客户的分类等。

2  问题的代码解决

下面看我提供的代码:
Sub MyNZsz_35() '第35讲  结合数组实现在工作表查询的同时,完成分工作表的归类汇总
    Dim cnADO, rsADO As Object
    Dim strPath, strSQL3, strSQL4 As String
    Worksheets("35").Select
    Cells.ClearContents
    Set cnADO = CreateObject("ADODB.Connection")
   
    strPath = ThisWorkbook.FullName
    cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
    arr = cnADO.Execute("Select Distinct 供应商 From [数据备份$]").GetRows
    For k = 0 To UBound(arr, 2)
        strSQL = "Select 型号,数量,生产厂,单价 From [数据备份$] Where 供应商='" & arr(0, k) & "'" & " order by 型号"
        ActiveWorkbook.Sheets.Add after:=Worksheets("数据备份")
        ActiveSheet.Name = arr(0, k)
        With Sheets(arr(0, k))
            [A1:D1] = Array("型号", "数量", "生产厂", "单价")
            .[A2].CopyFromRecordset cnADO.Execute(strSQL)
        End With
    Next
    cnADO.Close
    Set cnADO = Nothing
 End Sub

代码截图:
代码讲解:
1) Arr = cnADO.Execute("Select Distinct 供应商 From [数据备份$]").GetRows
上述代码把供应商的名称排重后计入变体变量ARR,需要注意的是,这个ARR是个二维数组。
2)  strSQL = "Select 型号,数量,生产厂,单价 From [数据备份$] Where 供应商='" & Arr(0, k) & "'" & " order by 型号"
上述代码实现了按供应商的名称提取数据。Arr(0, k)的数据即是供应商的名称
3)ActiveWorkbook.Sheets.Add after:=Worksheets("数据备份")
        ActiveSheet.Name = Arr(0, k)
上述代码是把供应商的名称作为工作表的名称,在数据备份工作表之后插入。
下面看代码的运行:

我们看到新增了两个工作表,名称和供应商的一致,里面是我们需要提出的数据。


今日内容回向:
1  如何实现不确定数据的数据提取?
2  对于变体变量的数组是否清楚呢?




我20多年的VBA实践经验,全部浓缩在下面的各个教程及各类工具中:


【分享成果,随喜正能量】人生无常,高处有高处的风光,低处有低处的磨砺,及时调整自我去适应变化,人生才能在突破中走向宽广。
文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论