使用SQL在excel范围中搜索n个逗号分隔值

时间:2015-07-05 05:08:51

标签: sql excel-vba ado vba excel

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

例如,我有一个多选列表框,其中包含以下值:

 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的所有行。

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

注意:在列表框中进行的选择将存储为逗号分隔值

以下是我用于列表框选择的完全匹配的代码(返回仅包含&#34的行; Apple,Mango"),我需要使其适用于任何列表框值组合(还应该返回" Apple,Banana,Mango"或与单元格中存在的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

1 个答案:

答案 0 :(得分:0)

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

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')

<强>查询:

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

返回的行数:0

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

{{1}}

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

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

中有以下值

Col1(A)

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

Excel格式化为'常规'由于'常规'格式化,excel选择前3行作为数字,接下来3作为文本...查询无法检索文本并抛出错误消息,如下所示:
“您无法记录更改,因为您输入的值违反了为此表或列表定义的设置(例如,值小于最小值或大于最大值)...