Excel怎样2个数组 找出相同元素的数据元素?

494 人阅读
标签:至少1个,最多5个
Sub find函数练习2()
Dim rng As Range, address1, address2
Set rng = ActiveSheet.UsedRange.Find(what:="b")
address1 = rng.Address(0, 0)
Do Until address1 = address2
Set rng = ActiveSheet.UsedRange.FindNext(rng)
address2 = rng.Address(0, 0)
rng.Interior.ColorIndex = 6
0 收藏&&|&&0
你可能感兴趣的文章
你可能感兴趣的文章
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。excel如何先计算多个数值间位置相同元素之间的乘积再求和
  在excel日常使用中,该如何先计算出各个数组内位置相同的元素之间的乘积,然后计算出它们的和?下面为大家详细介绍一下,来看看吧!  方法/步骤  1、计算出各个数组内位置相同的元素之间的乘积,然后计算出它们的和需要使用到SUMPRODUCT函数。  2、其中,函数括号内的Array表示包含这些值得单元格区域范围。  3、如果范围比较多的多,我们可以指定多个范围,如图所示Array2,Array3等。  4、如图例子所示,表示冰箱的正价、折扣、会员折扣相乘+电视的正价、折扣、会员折扣相乘+洗衣机的正价、折扣、会员折扣相乘。  5、第四步的结果就是冰箱、电视、洗衣机营业额的总和。  6、当然,我们还可以用如图所示的嵌入式函数计算上面的结果。  注意事项  当参数的指定行乘以列大小不一样数组时,会返回错误值。  以上就是excel如何先计算多个数值间位置相同元素之间的乘积再求和方法介绍,操作很简单的,希望能对大家有所帮助!
最新更新栏目
您可能喜欢
大家都在搜怎么比较同个excel中两组不同的数据并找出相同或不同的
[问题点数:100分]
怎么比较同个excel中两组不同的数据并找出相同或不同的
[问题点数:100分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2018年5月 MS-SQL Server大版内专家分月排行榜第二2018年4月 MS-SQL Server大版内专家分月排行榜第二2018年1月 MS-SQL Server大版内专家分月排行榜第二2017年12月 MS-SQL Server大版内专家分月排行榜第二2017年11月 MS-SQL Server大版内专家分月排行榜第二2017年10月 MS-SQL Server大版内专家分月排行榜第二
2017年8月 MS-SQL Server大版内专家分月排行榜第三
2011年6月 Windows专区大版内专家分月排行榜第三2011年1月 Windows专区大版内专家分月排行榜第三2010年11月 Windows专区大版内专家分月排行榜第三2010年2月 Windows专区大版内专家分月排行榜第三2010年1月 Windows专区大版内专家分月排行榜第三
匿名用户不能发表回复!|一个小excel宏:找出一组数中和为某个值的所有组合 - QualitySong - 博客园
everything about EP (Engineering Productivity)
posts - 5, comments - 9, trackbacks - 0, articles - 6
朋友在账务分析时的一个需求,需要从excel的一列中找出和为某个值的所有组合,请我帮忙写一个。
我想,正好趁机会了解一下vba和excel宏的编写,就接下了这个小活,算法可能不一定最优,vba的代码可能也写的不专业(第1次写,见笑),但是好歹实现了出来,也算是对vba有一定的了解了,达到了随便研究研究的目的:)
算法大概就是遍历这组数的所有组合,找到和为给定值的组合。n个数的所有组合有2^n-1种,复杂度成指数级,跟朋友了解了一下,元素的总数不超过50个,每个数是小数点最多2位,有可能有重复的数,其中一部分数大于给定的和
实现的想法是,对一个用n+1 bit(n为数组元素个数)存储的数,每个bit的位置对应数组中元素的位置,从0开始,不断+1.直到最高位为1时停止,此过程中每次+1得到的bit位对应的数据元素组合,汇总起来就是数组中所有元素的全部组合,对这些组合进行计算,和为给定值,就是一个解
能想到优化点:1、把所有浮点数*100取整,再用于运算,避免过多浮点数预算2、先把大于给定和的元素剔除掉,把和等于给定元素的直接输出,剩下的再进行组合3、把数组从大到小排列,让和可能大于给定值的情况尽早暴漏,并终止计算(下面的代码没有把这个写进去,当时在加班,一忙就懒得写进去了,可以补进去)4、把之前算过的和记录下来,后面再用到时直接使用(动态规划的思想,但是我用python先实践了一下,发现需要的内存太大了,跑一会就耗光了内存,于是放弃了个方法)
另外学到一点vba写excel宏的皮毛:1、alt+F11切换到vba代码编辑器2、获取选中的excel表格区域:ActiveWindow.RangeSelection3、获取一个区域中某个单元格中的值:Cells(row, col)4、创建一个新的sheet:Sheets.Add5、根据变量设定数组大小的方式: 先定义一个未知大小的数组:Dim tmpArray() As Single 确定长度时,再重新定义大小:ReDim tmpArray(arrayLen - 1) As Single6、vb的Integer是2字节表示的有符号数,对于大于32768的数不能正确表示,所以需要用Long来记录*100以后的数组元素7、CLng函数把参数强制转成Long型数,CSng把参数强制转成浮点数
实现的代码如下:
Sub selectAll()Dim tmpArray() As SingleDim intArray() As LongDim arrayLen As IntegerDim intArrayLen As IntegerDim intSum As LongDim sumValue As SingleDim i As IntegerDim j As IntegerDim k As IntegerWith ActiveWindow.RangeSelectionarrayLen = .Columns.Count * .Rows.CountReDim tmpArray(arrayLen - 1) As Singlek = 0For i = 1 To .Columns.Count
For j = 1 To .Rows.Count
tmpArray(k) = .Cells(j, i)
Next jNext iEnd WithsumValue = InputBox("input sum:")intSum = CLng(sumValue * 100)With Sheets.Add
Dim cellRow As Integer
Dim cellCol As Integer
cellRow = 1
cellCol = 1
intArrayLen = 0
ReDim intArray(arrayLen - 1) As Long
Dim tmpIntValue As Long
For i = 0 To arrayLen - 1
tmpIntValue = CLng(tmpArray(i) * 100)
If tmpIntValue &= intSum Then
intArray(k) = tmpIntValue
intArrayLen = k
Dim bitArray() As Byte
ReDim bitArray(intArrayLen) As Byte
For i = 0 To intArrayLen
bitArray(i) = 0
bitArray(0) = 1
Dim tmpSum As Long
Dim tmpResult() As Long
ReDim tmpResult(intArrayLen) As Long
Dim tmpResNum As Integer
Dim flag As Integer
Do While bitArray(intArrayLen) && 1
tmpSum = 0
tmpResNum = 0
For j = 0 To intArrayLen - 1
If bitArray(j) = 1 Then
tmpSum = tmpSum + intArray(j)
If tmpSum & intSum Then
tmpResult(tmpResNum) = intArray(j)
tmpResNum = tmpResNum + 1
If tmpSum = intSum Then
For k = 0 To tmpResNum - 1
.Cells(cellRow, cellCol) = CSng(tmpResult(k)) / 100
cellCol = cellCol + 1
cellRow = cellRow + 1
cellCol = 1
For k = 0 To intArrayLen
If flag = 0 Then
ElseIf bitArray(k) = 0 Then
bitArray(k) = 1
bitArray(k) = 0
LoopEnd WithMsgBox ("FINISH!")End Sub如何在两个excel中查找相同内容,并进行标记。_百度知道
如何在两个excel中查找相同内容,并进行标记。
我有两个excel表,表1有7000多条数据,表2有100来条数据。这两个表中有一部分数据是相同的,但是也存在不同的数据。如何把表2中的数据,比如说姓名在表1中批量找到,并且标记出来啊,可以是另存一个表,也可以在两个表中用相同的颜色将相同的数据标记出来。举...
我有更好的答案
1:将表格B保存在A的sheet2中(A的信息在sheet1中)。&&&&2:将鼠标点入sheet1的C列第一个空白处即C2。3:点击fx。4:跳出对话框,选出vlookup。5:点击第一个输入框(该处是要输入要查找的信息),再点击该行的第一项。Excel会自动取出“张三”这个值。6:上一步选出了要查找的信息,这一步则是在第二个输入框中给出在sheet2中查找的范围。直接点击第二个输入框,再点击sheet2,进入到sheet2中,选出ABC三列。Excel自动取出这三列作为查找范围。7:这一步则是通过在第三个输入框中填入数字,以告诉Excel,如果在sheet2中找到了匹配的那一行,则返回什么值。由于在上一步中我们给出了查找范围,就从第一列开始数,数出要返回值的那一列在第几列。不要超出所选查找范围,本例中是输入3,即返回完成与否的值。8:最后一个输入框是告诉Excel是否进行精确匹配,0代表是,1代表否。有人经常把这个弄反,切记切记。本例中是精确查找,当然输入0。如上图。9:点击确定,显示如下#N/A代表查找不到。10:双击该项右下角(或者复制该项,然后粘贴到要进行匹配的行中),Excel会自动完成该列剩下的查找。得到结果如下。结束&&&&&&&&&&&&&&
采纳率:80%
来自团队:
在表一中的b1输入:=if(countif(表二!a:a,a1)&=1,a1,&&)公式下拉,显示姓名的是表二也有的,否则空白。在表二中的b1输入:=if(countif(表一!a:a,a1)&=1,a1,&&)公式下拉,显示姓名的是表一也有的,否则空白。PS:公式中的表一表二必须用你实际的工作表名替换
本回答被提问者采纳
假设姓名在A列SHEET1:选择A2及以下数据单元格(CTRL+SHIFT+下方向键)-格式-条件格式选择:公式 输入:=countif(sheet2!a:a,a2)&=1设置单元格颜色SHEET2:其他步骤相同,只是公式改为 =countif(sheet1!a:a,a2)&=1
假设姓名在A列那么,在表二的B2单元格中输入公式=IF(OR(COUNTIF(表一!$A$2:$A$8000,$A2)&1,COUNTIF(表一!$A$2:$A$8000,$A2)=1),&有相同&,&&)然后用填充柄将公式向下复制即可,看出效果
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
excel的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 数组找出相同元素 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信