大家好,今日我们继续讲解VBA 数组与字典解决方案,今日讲解第80 讲内容:利用字典实现单条件,结果多值查询。 到这里字典的讲解已经进入尾声了,在余下的几讲中,我将重点给大家讲解一下利用字典进行查询的各种方案,对于单值的查询,前面已经讲了很多,这里不再讲解,今天给大家讲解的是单条件,即一个条件,但结果是多值的查询,也就是一对多的查询,后面还会陆续实现更多的查询方法。 实例,如下面的截图,我们要在数据区域的数据中查找到各个型号的类别,对于一个型号来说,类别是各式各样的,要提取出全部的数据。

mysql 结果集 为0 个数 sql将结果集作为查询条件_sql递归查询结果作为条件


思路分析: 为了实现题目的要求,我们首先把数据装入字典中,在装入字典的时候,型号作为键,类别作为键值,如果类别不是唯一的情况下,那么将类别数据合并处理,在查询的时候,只要提取所给数据对应的键值即可。 下面看我给出的代码:

Sub mynzsz_80() ' 
  第80 
  讲  
  利用字典实现单条件,结果多值查询   Sheets("80").Select    ' 
  将数据存入数组   myarr = Range("a2:f" &Range("a2").End(xlDown).Row)    ' 
  创建字典对象   Set mydic = CreateObject("Scripting.Dictionary")    ' 
  在字典中装入数据       For i = 1 To UBound(myarr)           mydic(myarr(i, 1)) = mydic(myarr(i, 1)) & " " &myarr(i, 2)       Next i    ' 
  数据的回填    Set myRng = Range(Cells(2, "I"), Cells(Range("I2").End(xlDown).Row,"I"))    For Each uu In myRng      ' 
  清空数据      Cells(uu.Row, "J") = ""      ' 
  填入查到的数据      Cells(uu.Row, "J") = mydic(uu.Value)    Next     Set mydic = Nothing  MsgBox ("ok")End Sub

代码的截图:

mysql 结果集 为0 个数 sql将结果集作为查询条件_sql递归查询结果作为条件_02


码分析: 1 上述代码中,将数据赋值给数组myarr, 之后给字典mydic 赋值,赋值的时候,提取数组的第一个值作为键,如果键值是多个,那么用mydic(myarr(i,1)) & " " & myarr(i, 2) 进行合并处理。最后在查询的时候,只要提取所给出查询数据的键值即可:

Cells(uu.Row, "J") = mydic(uu.Value)2 ' 
  将数据存入数组myarr =Range("a2:f" & Range("a2").End(xlDown).Row) 
  上述语句是将数据装入数组中。3  ' 
  在字典中装入数据       For i = 1 To UBound(myarr)           mydic(myarr(i, 1)) = mydic(myarr(i, 1)) & " " &myarr(i, 2)       Next i 
  上述语句在字典中装入数据,如果是键是重复的,键值将合并处理。4  Set myRng = Range(Cells(2, "I"),Cells(Range("I2").End(xlDown).Row, "I")) 
  上述语句是将定义查询区域,即:型号所在的单元格5 For Each uu In myRng      ' 
  清空数据      Cells(uu.Row, "J") = ""      ' 
  填入查到的数据      Cells(uu.Row, "J") = mydic(uu.Value)

 Next 上述语句实现查询,注意上述代码中的uu.VALUE 是指单元格的值。6 Set mydic = Nothing 清空内存。 下面看代码的运行:

mysql 结果集 为0 个数 sql将结果集作为查询条件_数组_03