【问题标题】:Searching for n comma separated values in an excel range using SQL使用 SQL 在 excel 范围内搜索 n 逗号分隔值
【发布时间】:2015-07-05 05:08:51
【问题描述】:

我在 Excel 中有一个多选列表框,我正在尝试通过 ADO 使用 SQL 搜索数据库列中的选定值

例如,我有一个具有以下值的多选列表框:

 1. Mango
 2. Apple
 3. Grapes
 4. Banana

样本数据:

  ID     | LOB
  ---------------------------    
  ACQ1   | Apple, Mango
  ACQ2   | Mango
  ACQ3   | Apple, Banana, Mango
  ACQ4   | Apple, Grapes, Mango

如果我从列表框中选择 Mango 和 Apple,我想搜索 LOB 列中包含 Mango 和 Apple 的所有行。

我面临的问题是我的选择可能会改变,因此必须调整查询。有没有办法自动查询,以便搜索列表框中选择的所有值?

注意:在列表框中所做的选择被存储为逗号分隔值

以下是我用于精确匹配列表框选择的代码(返回仅包含“Apple,Mango”的行),我需要使其适用于列表框值的任何组合(还应该返回“Apple 、香蕉、芒果”或任何其他与芒果和苹果一起出现在单元格中的组合):

Public Sub conn()

Dim sSQLQry As String
Dim ReturnArray

Dim conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Dim DBPath As String, sconnect As String

DBPath = ThisWorkbook.FullName

sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"

ls_values = Sheet("Data").Range("A1").Value

conn.Open sconnect
sSQLSting = "SELECT * From [Sheet1$] Where LOB = '" & ls_values & "'

mrs.Open sSQLSting, conn
Sheets("Main").Range("B4").CopyFromRecordset mrs
mrs.Close
conn.Close

End Sub

【问题讨论】:

  • 有助于显示您当前的代码。一种方法是构建一个 SQL where 子句,例如 ...where LOB like '%Mango%' or LOB like '%Apple%'
  • 嘿蒂姆,问题是选择不一致。它们可能会从 (Mango, Apple) 更改为 (Banana, Grapes) 或任何其他列表框值组合,在这种情况下,您的代码将不适用。我想根据列表框中选择的值进行搜索 Current Code: #Not writing ADO connection codes due to char limit 'listbox selections are in cell A1 as a comma separator value ls_values = Sheets("Sheet2").Range("A1 ").Value sqlSting = "SELECT * From [Sheet1$] Where LOB = '" & ls_values & "'" mrs.Open sqlSting, conn Sheets("Main").Range("B4").CopyFromRecordset mrs
  • 您可以编辑您的问题以添加您的代码。我并不是建议您使用固定的 SQL 字符串:您将遍历选定的列表项并动态构建 where 子句。

标签: sql excel ado vba


【解决方案1】:

我面临着类似的问题。我的 Excel 工作表列包含值“1,2,3”,我想选择值“1”的行。

Col1 (A): 1,2,3 [contains comma separated numeric values]

Col2 (B): value one,value two,value three [contains comma separated strings]

查询:

SELECT * FROM [Sheet1$] A WHERE A.Col2 LIKE '%value1%' AND (A.Col1 LIKE '2%' OR A.Col1 LIKE '%2%' OR A.Col1 LIKE '%2' OR A.Col1 LIKE '2')

返回的行数:0

当 excel 列包含逗号分隔字符串时,逗号分隔值可以正常工作,但当它们包含数字逗号分隔值时会失败 即这个查询返回正确的结果:

SELECT *  FROM [Sheet1$] A WHERE A.Col2 LIKE '%value one%'

连接/rs 对象和字符串等没有问题。我对所有其他没有逗号分隔数值查询的查询使用相同的函数


解决了我的问题:原来是格式问题...我在

中有以下值

Col1 (A)

1
1
1
1,2,3
2,3
3,4,5

Excel 格式为“常规”由于“常规”格式,Excel 将前 3 行作为数字拾取,后 3 行作为文本...查询未能检索文本并抛出如下错误消息:
“您无法记录更改,因为您输入的值违反了为此表或列表定义的设置(例如,值小于最小值或大于最大值)...


【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2023-03-16
    • 1970-01-01
    • 2018-12-08
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多