前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA与数据库——排列组合(可重复)

VBA与数据库——排列组合(可重复)

作者头像
xyj
发布2021-10-20 16:59:58
1.2K0
发布2021-10-20 16:59:58
举报
文章被收录于专栏:VBA 学习VBA 学习

VBA实现排列组合(可重复)中使用普通的VBA编程方法,实现了排列组合(可重复),代码虽然不是很多,但作为初学者需要理解还是有一定难度的。

如果是使用ADO来实现的话,就比较的简单了:

代码语言:javascript
复制
Function ADOGetPermutation(ArrKeysZeroBase() As String, m As Long) As Long
    Dim n As Long
    
    n = UBound(ArrKeysZeroBase) - LBound(ArrKeysZeroBase) + 1
    If m = 0 Then
        ADOGetPermutation = -1
        Exit Function
    End If
    
    '数据放到excel中
    Range("A1").Value = "数据"
    With Range("A2").Resize(n, 1)
        .NumberFormat = "@"
        .Value = Application.WorksheetFunction.Transpose(ArrKeysZeroBase)
    End With
    
    Dim strTable As String
    strTable = "[" & ActiveSheet.name & "$" & Range("A1").Resize(n + 1, 1).Address(False, False) & "]"
    
    '构建sql语句
    Dim sqlFields() As String, sqlTables() As String
    ReDim sqlFields(m - 1) As String
    ReDim sqlTables(m - 1) As String
    Dim i As Long
    For i = 0 To m - 1
        sqlFields(i) = "T" & VBA.CStr(i) & ".数据"
        sqlTables(i) = strTable & " as T" & VBA.CStr(i)
    Next
    
    Dim strsql As String
    strsql = "select " & VBA.Join(sqlFields, "+") & " from " & VBA.Join(sqlTables, ",")
    
    Dim AdoConn As Object
    Set AdoConn = VBA.CreateObject("ADODB.Connection")
    
    '打开数据库
    AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.fullname & ";Extended Properties=""Excel 12.0;HDR=YES"";"
    Range("C2").CopyFromRecordset AdoConn.Execute(strsql, , 1)

    AdoConn.Close
    Set AdoConn = Nothing
End Function

程序的核心是构建sql语句,形式如:

代码语言:javascript
复制
select T0.数据+T1.数据+T2.数据 from [Sheet1$A1:A5] as T0,[Sheet1$A1:A5] as T1,[Sheet1$A1:A5] as T2

构建的这个sql语句应该是比较好理解的,而这条语句就能够得到一个可以选重复数据的排列组合,程序逻辑相比用普通的VBA语句来说就好理解的多了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档