怎么写个VBA程序求交集

怎么写个VBA程序求交集,第1张

1,建立字典dict分别记录数字和出现组别的次数:key+value=字符数字+组数,类似下图的表格内的数据记录;

字典根据提供表格数字分组保存的数据

2、利用嵌套双循环分别循环1(外)组别,循环2(内)组内数字,分别对比字典是否存在同一数字,if dict.exist(xx) then dict(xx)=dict(xx)+1记录分别每个数字出现过的组的次数;xx表示某个数字

3、新的循环在字典中,判断dict(xx).value=6的数字,就是组1~组6的交集。分别列入N列相应单元格。

一,要理解什么是交集:

求集合1与集合2的交集,就是求出既在集合1又在集合2的元素

二,求两个集合的交集的程序实现:

采用双重循环,一一比较。

出现下标越界,说明循环的设置有错误,应该并可以检查出错误原因。

Option Explicit'强制显式声明变量

Private Sub Command1_Click()

Dim A() As String '数组A,存储集合A中的元素

Dim B() As String '数组B,存储集合B中的元素

Dim S As String '字符串

Dim I As Integer'循环变量

Dim J As Integer'空格

Dim K As Integer'每个数据元素的起始位置

On Error Resume Next'防止因集合A或集合B的元素为空而出错

S = Trim(Text1.Text)'取集合A中数据

If S <>"" Then '集合A、B中应该有数据,因为要做交集比较嘛

J = 0

K = 1

S = S &" " '为了取得最后一个集合元素而在字符串后加一个空格

For I = 1 To Len(S)

If Mid(S, I, 1) = " " Then '集合元素之间以一个空格区分

J = J + 1 '统计空格数

ReDim Preserve A(J) '重新定义数组,保留原数组中的数据

A(J) = Mid(S, K, I - K) '存储集合元素到数组A

K = I + 1 '确定集合中下一个元素的起始位置

End If

Next I

End If

S = Trim(Text2.Text)'取集合B中数据

If S <>"" Then

J = 0

K = 1

S = S &" "

For I = 1 To Len(S)

If Mid(S, I, 1) = " " Then

J = J + 1

ReDim Preserve B(J)

B(J) = Mid(S, K, I - K) '存储集合元素到数组B

K = I + 1

End If

Next I

End If

'开始逐个比较比较集合A和集合B中的元素,若相同则为交集元素

S = "" '存储交集元素前应该使变量S为空

If UBound(A) >0 And UBound(B) >0 Then

For I = 1 To UBound(A)

For J = 1 To UBound(B)

If B(J) = A(I) Then

S = S &" " &A(I)

Exit For

End If

Next J

Next I

End If

Text3.Text = Trim(S)'去掉交集内容的前后空格并将交集显示出来

End Sub

在窗体内依次添加3个文本框Text1(用于输入集合A内容)、Text2(用于输入集合B内容)、Text3(用于存放交集结果内容)和一个命令按钮Command1,然后将以上代码复制、粘贴、运行即可...集合内容只要满足集合定义可以随便输,数字、字母和标点均可比较……呵呵!

注意:输入集合元素时,集合中的元素之间应该以一个空格分开!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7910734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存