wp231957 发表于 2023-1-13 14:38:14

VBA专辑之四<<>>

专辑一请戳这里前进
专辑二请戳这里前进
专辑三请戳这里前进

wp231957 发表于 2023-1-13 14:46:10

这里有个重复累加和的例子:

解决方案①:

Sub wp()
   Set Cnn = CreateObject("ADODB.Connection")
   Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
   Sql = "select sum(x.b) from (select distinct a,b from ) x"
   Cnn.Execute Sql
   Sheets("sheet1").Range("e2").CopyFromRecordset Cnn.Execute(Sql)
   Cnn.Close
End Sub


wp231957 发表于 2023-1-13 14:58:42

wp231957 发表于 2023-1-13 14:46
这里有个重复累加和的例子:

解决方案①:

2楼的字典解决方案:
Sub wp2()
   Set da = CreateObject("scripting.dictionary")
   arr = Range("a2:b14")
   For i = 1 To UBound(arr)   '初始化字典,自动去重
   da(arr(i, 1)) = arr(i, 2)
   Next
   Sum = 0
   For Each x In da.keys
   Debug.Print x, da(x)    '循环遍历字典
   Sum = Sum + da(x)
   Next
   Range("e3").Value = Sum   '为个体单元格赋值
End Sub

wp231957 发表于 2023-1-13 15:06:41

本帖最后由 wp231957 于 2023-1-13 15:20 编辑

wp231957 发表于 2023-1-13 14:58
2楼的字典解决方案:

'为个体单元格赋值以下几种均可

Range("e3").Value = Sum
Range("e3") = Sum
.Value = Sum
= Sum

备注:这四条语句能够实现相同的目的,最后面一句要简略一些

为区域单元格赋值(这里特指 sql的返回结果集)
这里我们重点关注描红的代码
特点一:区域赋值(特点是一个 X*X 的二维区域 这里的 X包含1)
特点二:这个属于插入赋值,亦即不破坏原始单元格数据
Sub wp()
   Set Cnn = CreateObject("ADODB.Connection")
   Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
   Sql = "select * from"
   Cnn.Execute Sql
Sheets("sheet1").Range("e2").CopyFromRecordset Cnn.Execute(Sql)
   Cnn.Close
End Sub
页: [1]
查看完整版本: VBA专辑之四<<>>