|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
问题源自该帖“Excel VBA 在可变动替代SUMIFS进行统计[较大数据量情况下”,。在帖中 老师给出的自定义函数公式解决方案中,出现这样一种独特的自己第一次见到的模糊查询方法,Select Sum([Amount]) As SumAmount From [db$] Where True And [Year]=2016 And [Month]<=10 And '|01|02|' Like '%|' + [Company] + '|%' And '|A|B|' Like '%|' + [Items] + '|%',用任意分隔符将查询字符串分开,反向对字段的匹配实施like查询。这是一种什么方法,在论坛中没有任何一个帖中出现过,所以,只有通过本实例来试着看了。下面是写的简化后的测试代码
- Sub mytest()
- Dim cnn As Object, sql, k, t, arr
- Set cnn = CreateObject("ADODB.Connection")
- cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
- 'cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
- Sheets("R").Activate
- arr = cnn.Execute("SELECT DISTINCT Year FROM [db$]").GetRows
- 'Debug.Print Sheets(2).Name
- Sheets(2).[b20].Resize(1, 3) = arr
- Sheets(2).[b27].Resize(1, 3) = arr
- 'sql = "Select Sum([Amount]) From [db$] Where True And [Month]<=10 And '@01@02@' Like '%@' + [Company] + '@%' And '|A|' Like '%|' + [Items] + '|%' group by year"
- 'arr = cnn.Execute(sql).GetRows
- 'Sheets(2).[a35].Resize(1, 3) = arr
- 'sql = "Select Sum([Amount]) From [db$] Where True And [year]=2016 And [Month]<=10 And '@01@02@' Like '%@' + [Company] + '@%' And '|A|B|' Like '%|' + [Items] + '|%'"
- sql = "Select Sum([Amount]) From [db$] Where True And '@2016@' Like '%@' + [Year] + '@%' And '@01@02@' Like '%@' + [Company] + '@%' And '|A|B|' Like '%|' + [Items] + '|%'"
- arr = cnn.Execute(sql).GetRows
- Sheets(2).[a37].Resize(1, 3) = arr
- cnn.Close
- Set cnn = Nothing
- End Sub
复制代码 sql = "Select Sum([Amount]) From [db$] Where True And [Month]<=10 And '@01@02@' Like '%@' + [Company] + '@%' And '|A|' Like '%|' + [Items] + '|%' group by year
sql = "Select Sum([Amount]) From [db$] Where True And [year]=2016 And [Month]<=10 And '@01@02@' Like '%@' + [Company] + '@%' And '|A|B|' Like '%|' + [Items] + '|%'"
sql = "Select Sum([Amount]) From [db$] Where True And '@01@02@' Like '%@' + [Company] + '@%' And '|A|B|' Like '%|' + [Items] + '|%'"
上面三种方案都通过了测试,但是
sql = "Select Sum([Amount]) From [db$] Where True And '@2016@' Like '%@' + [Year] + '@%' And '@01@02@' Like '%@' + [Company] + '@%' And '|A|B|' Like '%|' + [Items] + '|%'"
却无法通过,为什么在其他列都能通过,换到year这一列就无法通过呢?所用的这种like方法,是透视表中的还是access的,还是VBA中的什么方法。
Test(by.micro).xlsm.zip
(28.17 KB, 下载次数: 1)
|
|