ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: zjcctv2006

[求助] vba读取每位员工的最高学历

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-7 16:15 | 显示全部楼层
本帖最后由 likaiyihou 于 2023-12-7 16:17 编辑

凑个热闹。。。。。。。
图片1.jpg

最高学历.zip

13.23 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2023-12-7 16:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
最高学历.rar (13.78 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2023-12-7 17:04 | 显示全部楼层
看大家不少解决方案都是 VBA+SQL

这里直接用 SQL 解决吧
利用两个 Switch 转换 即可
  1. select 姓名,
  2. switch(min(TP) = 1, "研究生", min(TP) = 2, "本科", min(TP) = 3, "专科") as 学历
  3. from
  4.     (
  5.         select 姓名, 学历,
  6.         switch(学历 = "研究生", 1, 学历 = "本科", 2, 学历 = "专科", 3) as TP from[
  7.             Sheet2$A: B]
  8.     )
  9. group by 姓名
复制代码


微信截图_20231207170245.png

TA的精华主题

TA的得分主题

发表于 2023-12-8 08:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-8 08:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-8 09:32 | 显示全部楼层
limonet 发表于 2023-12-7 13:04
要放在其它表中,改倒数第二行,如 sheet2.Range("a2").CopyFromRecordset Cn.Execute(StrSQL)
Sub limone ...

看着没问题,运行就有问题。第一个sql排序正确的,第二个sql用了first居然会出错。
360截图20231208093209864.jpg

TA的精华主题

TA的得分主题

发表于 2023-12-8 09:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
进一步研究发现,用first是提取的原表格相同姓名的第一个数据,和是否进行过排序无关。。。。真是奇怪。

TA的精华主题

TA的得分主题

发表于 2023-12-8 09:56 | 显示全部楼层
把学历转换成数字,再用max取值,再转化成学历。
360截图20231208093209864.jpg

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-12-8 10:15 | 显示全部楼层
参与一下。
  1. Sub test()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     Set d1 = CreateObject("scripting.dictionary")
  4.     sort_array = Array("研究生", "本科", "专科")
  5.     For i = 0 To UBound(sort_array)
  6.         d(sort_array(i)) = i
  7.     Next
  8.     arr = [a1].CurrentRegion
  9.     For i = 2 To UBound(arr)
  10.         If Not d1.exists(arr(i, 1)) Then
  11.             d1(arr(i, 1)) = d(arr(i, 2))
  12.         Else
  13.             d1(arr(i, 1)) = Application.Min(d1(arr(i, 1)), d(arr(i, 2)))
  14.         End If
  15.     Next
  16.     k = 1
  17.     For Each x In d1.keys
  18.         k = k + 1
  19.         arr(k, 1) = x: arr(k, 2) = sort_array(d1(x))
  20.     Next
  21.     Range("D1").Resize(k, 2) = arr
  22. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-12-8 11:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 04:02 , Processed in 0.050199 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表