首页 > 其他分享 >利用VBA字典实现单条件,结果多值查询

利用VBA字典实现单条件,结果多值查询

时间:2022-12-29 10:00:21浏览次数:64  
标签:VBA uu Cells 查询 多值 字典 myarr mydic

来源:利用VBA字典实现单条件,结果多值查询 - 知乎 (zhihu.com) 很好的利用字典数据类型   利用VBA字典实现单条件,结果多值查询

利用VBA字典实现单条件,结果多值查询

VBA语言专业教育 VBA语言专业教育 分享成果,随喜正能量  

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第80讲内容:利用字典实现单条件,结果多值查询。

到这里字典的讲解已经进入尾声了,在余下的几讲中,我将重点给大家讲解一下利用字典进行查询的各种方案,对于单值的查询,前面已经讲了很多,这里不再讲解,今天给大家讲解的是单条件,即一个条件,但结果是多值的查询,也就是一对多的查询,后面还会陆续实现更多的查询方法。

实例,如下面的截图,我们要在数据区域的数据中查找到各个型号的类别,对于一个型号来说,类别是各式各样的,要提取出全部的数据。

 

 

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

下面看我给出的代码:

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

代码的截图:

 

 

代码分析:

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

清空内存。

下面看代码的运行:

 

 

标签:VBA,uu,Cells,查询,多值,字典,myarr,mydic
From: https://www.cnblogs.com/Insist-Y/p/17011787.html

相关文章

  • vba-match和错误处理
    本文是讲match函数的踩坑点,大家注意避坑。1、MATCH函数只在一维数组或者二维一列数组中才有效。如图:A2为二维数组,A3为一维数组,A4为二维一列数组。B运算结果为Error20......
  • vba-多列同时查找满足条件的行号
    我首先想到的非环版本要做到这一点(循环简单得多),是使用匹配(),但如果你有多个值使用A=Q或同日在那里,你可能会遇到一个问题。Dimi,jasIntegeri=Application.Match(RefC......
  • RT-thread系统ADC无法正确读取内部温度,基准和VBAT通道数据的问题原因
    原因是通道号对应到实际hal库中的通道名不正确STM32L431芯片中内部VREFIN通道是0,如果直接使用0号通道去读取将获取错误的adc值,需要修改drv_adc.c中的stm32_adc_get_chan......
  • python读取文本中的字典
    首先得明确文本的每行是存的json或者用python的write(str(一个字典))写入的,那么不用借助json模块就能读取为字典,使用eval函数就行,json只能处理带双引号的字符串,但很多时候......
  • word vba 操作表格, 设置表格的单元格(拆分合并单元格)
    设置单元格的边距和间距、设置合并单元格合拆分单元格。一、单元格的边距和间距Sub设置单元格边距()WithActiveDocument.Tables(1)'返回或设置表格中所有单元......
  • SQLite3返回字典格式数据
    参考链接代码块defdict_factory(cursor,row):d={}foridx,colinenumerate(cursor.description):d[col[0]]=row[idx]returndcon=s......
  • word vba 操作表格
    本文介绍wordvba操作表格的格式化、对齐方式、自动调整、分布行、分布列功能。一、格式化Sub设置表格()DimtAsTableForEachtInActiveDocument.Tables......
  • word vba 操作表格, 使用vba设置表格的列
    介绍使用vba语句操作word中的表格。本文讲解word中使用vba来操作表格的列主要为:使用vba设置word中的表格列,增、删列、设置列高、设置列的水平和垂直对齐方式。一、插入......
  • VBA中的(升降序)排名问题
    1Sub升序()23all_rows=Sheets(1).Range("a65536").End(xlUp).Row45WithActiveWorkbook.Worksheets(1)6.Sort.SortFields.Cle......
  • Chapter_6_字典
    #In[1]6.2.2添加键—值对'''字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。'''alien={'color':'gr......