VBA 数组合并 和 用dict 去重数组
Function merge_skill1()
Dim dict1 As Object
Set dict1 = CreateObject("scripting.dictionary")
Dim arr1()
Dim arr2()
Dim arr3()
Dim arr4()
'array1 array2
'先来技能数量和id
g20 = Application.Match("技能数量", Worksheets("petbag").Range("2:2"), 0)
g21 = Application.Match("技能1", Worksheets("petbag").Range("2:2"), 0)
skill_count_s01 = Application.index(Worksheets("petbag").Columns(g20), Application.Match(s01, Worksheets("petbag").Range("a:a"), 0))
skill_count_s02 = Application.index(Worksheets("petbag").Columns(g20), Application.Match(s02, Worksheets("petbag").Range("a:a"), 0))
ReDim arr1(skill_count_s01 - 1)
For i = 1 To skill_count_s01
skill_id_s01 = Application.index(Worksheets("petbag").Columns(g21), Application.Match(s01, Worksheets("petbag").Range("a:a"), 0)).Offset(0, i - 1)
arr1(i - 1) = skill_id_s01 '下标越界? arr1(i) 没有考虑 dim arr1这种,默认index从0开始,要注意
Debug.Print "arr1(" & i - 1 & ")=" & arr1(i - 1)
Next
ReDim arr2(skill_count_s02 - 1)
For i = 1 To skill_count_s02
skill_id_s02 = Application.index(Worksheets("petbag").Columns(g21), Application.Match(s02, Worksheets("petbag").Range("a:a"), 0)).Offset(0, i - 1)
arr2(i - 1) = skill_id_s02
Debug.Print "arr2(" & i - 1 & ")=" & arr2(i - 1)
Next
'数组合并
' arr3 = Union(arr1, arr2) 'union 只适合工作表函数
ReDim arr3(UBound(arr1))
For i = 0 To UBound(arr1)
arr3(i) = arr1(i)
' Debug.Print "arr3(" & i & ")=" & arr3(i)
Next
ReDim Preserve arr3(UBound(arr1) + UBound(arr2) + 1) '因为index从0开始
For i = UBound(arr1) + 1 To UBound(arr1) + UBound(arr2) + 1
arr3(i) = arr2(i - UBound(arr1) - 1)
' Debug.Print "arr3(" & i & ")=" & arr3(i)
Next
For i = LBound(arr3) To UBound(arr3)
Debug.Print "arr3(" & i & ")=" & arr3(i)
Next
'dict1去重
For Each i In arr3
dict1(i) = ""
Next
'遍历字典
X = 1
For Each i In dict1.keys()
ReDim Preserve arr4(1 To X) '每次改数组都要先redim redim 时记得一定要考虑是否 preserve !!!
arr4(X) = i
X = X + 1
Next
' For i = 1 To UBound(arr4)
' Debug.Print "arr4(" & i & ")=" & arr4(i)
' Next
For i = 1 To UBound(arr4)
g30 = Application.Match("技能名", Worksheets("Petskill").Range("2:2"), 0)
g31 = Application.Match("技能效果", Worksheets("Petskill").Range("2:2"), 0)
g32 = Application.Match("技能图标", Worksheets("Petskill").Range("2:2"), 0)
g33 = Application.Match("品质", Worksheets("Petskill").Range("2:2"), 0)
skill_name_s01 = Application.index(Worksheets("Petskill").Columns(g30), Application.Match(arr4(i), Worksheets("Petskill").Range("a:a"), 0))
skill_pro_s01 = Application.index(Worksheets("Petskill").Columns(g31), Application.Match(arr4(i), Worksheets("Petskill").Range("a:a"), 0))
skill_icon_s01 = Application.index(Worksheets("Petskill").Columns(g32), Application.Match(arr4(i), Worksheets("Petskill").Range("a:a"), 0))
skill_type_s01 = Application.index(Worksheets("Petskill").Columns(g33), Application.Match(arr4(i), Worksheets("Petskill").Range("a:a"), 0))
' Debug.Print "skill_name_s01= " & skill_name_s01
' Debug.Print "skill_pro_s01= " & skill_pro_s01
' Debug.Print "skill_icon_s01= " & skill_icon_s01
'其实如果已经先写到表里,可以不用dict,直接读表,复用上面的显示函数
'还是要利用dict的去重效果,然后再存表里,是可以的。只是不直接从dict读,而是从表里再读
Controls("image" & i + 40).PictureSizeMode = fmPictureSizeModeZoom
Controls("image" & i + 40).Picture = LoadPicture(ThisWorkbook.Path & "\res\skill\" & skill_icon_s01 & ".jpg")
Controls("image" & i + 40).ControlTipText = skill_name_s01 & " " & skill_pro_s01
If skill_type_s01 = 1 Then
Controls("image" & i + 40).BorderColor = RGB(0, 0, 255)
ElseIf skill_type_s01 = 2 Then
Controls("image" & i + 40).BorderColor = RGB(255, 165, 0)
Else
Debug.Print "品质有错"
End If
Next
Call merge_skill2(UBound(arr4), arr4)
'字典的显示
End Function
VBA 数组合并 和 用dict 去重数组相关推荐
- php数组合并 要保持两个数组的键名都不变
php数组合并 要保持两个数组的键名都不变 array_merge会使键名发生变化. 用 + 号最简单,且不会改变数组的键名 $a = array("a" => " ...
- php把这两个二维数组合并,两个二维数组的合并
合并前的数组a: array (size=3) 0 => array (size=2) 'id' => string '113' (length=3) 'email' => stri ...
- java 数组合并_JAVA将多个数组合并成一个数组
/** * @author xuekun *动态接收参数 *将给的数组合并成一个数组 *转载请注明出处 */ public static File[] arrayCopy(File[]... arra ...
- php两个数组合并 不使用函数,php数组合并array_merge()函数使用注意事项
array_merge()函数在php中是对数据进行合并的,可以把多个数组合成一个数组,并且不改变原数组的值了,但今天我在使用array_merge合并数组时碰到几个小细节上的问题,下面我举例子给各位 ...
- 数组合并,将两个数组合并为一个数组显示
将两个数组中的属性放到一个数组中 var arr1=[ {name: 'merchant', value: '1'}, {name: 'customer', value: '2'} ] var arr ...
- php 递归合并类 call,PHP多个数组合并(递归的进行)
/** * 对多个数组进行递归合并 返回新的数组 * 如果多个数组中有相同的键则会覆盖 * * @return type Array */ function multimerge() { $arrs ...
- ZZULIOJ 1124: 两个有序数组合并
两个有序数组合并 题目描述 已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中. 输入 输入有两行,第一行首先是一个正整数m,然后是m个整数 ...
- PHP数组合并的常见问题
一维数组的合并 <?php$arr1=array("a","b","c");$arr2=array("c",&qu ...
- 有序数组合并及等长数组对位穿插
将两个本身有序的数组合并为一个新的数组的方法 const arr1 = [11,15,18,23,26],arr2 = [11,19,21,25,27];let mergeTwoArr = (arr1 ...
最新文章
- 使用data uri将图片内嵌到html中
- 基于MATLAB的语音信号的时域特性分析(一)——分帧、窗函数
- 数据结构-队(C语言代码)
- 软件的安装(包括yum仓库与源码包的安装)
- effective c++_【阅读笔记】Effective C++()
- Git本地与远程配对命令:两种 一种是在推送push时候配对 一种是新建分支checkout -b时候配对
- 事物 @Transactional
- 服务器图纸被自动删除,JavaWeb项目图片消失的原因之一————服务器上图片目录被误删...
- 前端学HTTP之网络基础
- icem密度盒怎么设置_ICEM-自动体网格生成[精].ppt
- php 域名被劫持,域名被劫持怎么办
- php selectradio和checkbox默认选择的实现方法
- Java模拟微信发红包,一看就会
- mac播客播放器:Moon FM for Mac
- opencv海思平台移植解决warning: ../../lib/libopencv_imgproc.so, needed by ../lib/libopencv_imgcodecs.so, not
- HDOJ 1282 回文数猜想
- 大流量滤芯保安过滤器
- 基于ESP8266+433射频控制系统
- 我觉得项目经理,应该涨工资
- 关于在python中安装turtle出现的一些问题