excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel实战:去重取最大值记录「5」

如下图所示,如何获取每一个Sample Name的Height最大的那条记录呢?

图 1

本文分享VBA代码的解法。

思路循环两次源数据,首次得到不同Sample Name及其Height最大值存入字典中,第二次循环比较每条源记录和字典值,将满足的记录追加存入结果变量,最后将结果变量数据写入一张新的工作表里。

具体操作步骤如下:

Step1:右键单击工作表标签→【查看代码】。

图 2

Step2:双击“工程”窗口的“Sheet1”,在右侧的空白窗格里输入VBA代码。

图 3

完整代码如下:


'Author: 小千办公


Sub Fetch_Only_Max_Record()

'声明变量

Dim ArOri, ArRst

Dim i As Integer

Dim N As Integer

Dim Dic As Object


'创建字典对象

Set Dic = CreateObject("scripting.dictionary")


'将数据源区域赋值给ArOri变量

ArOri = Range("A1").CurrentRegion.Value


'循环生成各样本Height最大值存入字典

For i = 1 To UBound(ArOri)

If Not Dic.exists(ArOri(i, 1)) Then

Dic.Add ArOri(i, 1), ArOri(i, 3)

Else

If ArOri(i, 3) > Dic(ArOri(i, 1)) Then Dic(ArOri(i, 1)) = ArOri(i, 3)

End If

Next i


'定义存储预期结果数据的变量的维度大小

ReDim ArRst(1 To UBound(ArOri), 1 To UBound(ArOri, 2))


'循环源数据拾取满足条件的记录行追加到ArRst变量中

For i = 1 To UBound(ArOri)

If ArOri(i, 3) = Dic(ArOri(i, 1)) Then

N = N + 1

ArRst(N, 1) = ArOri(i, 1)

ArRst(N, 2) = ArOri(i, 2)

ArRst(N, 3) = ArOri(i, 3)

End If

Next i


'新建工作表,写入结果数据

Worksheets.Add

ActiveSheet.Range("A1").Resize(N, UBound(ArOri, 2)) = ArRst


'释放变量占据的内存

Erase ArRst

Erase ArOri

Set Dic = Nothing

End Sub

Step3:如图4,单击代码范围内任意位置,单击工具栏运行图标,结果如图5。

图 4 图 5

【关键解析】两次循环得到的结果如图6、图7。

图 6 图 7

本实例需求的其它解法如下:

操作与技巧解法:数据透视表解法:Power Query解法:函数公式+常规操作解法:

如果你有妙招,欢迎留言!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接