ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1461|回复: 19

[求助] 教师名册提取代码(已解决)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-18 09:11 | 显示全部楼层 |阅读模式
本帖最后由 jx928867128 于 2023-3-19 11:19 编辑

请好心人帮忙写个教师名册提取代码:1、课程清单表中从A2开始填写了“教师|星期|节次”这种格式的内容,需要代码把第一个|前的教师提取出来,并去重复值,再复制到教师名册表中的B2进行粘贴,并填写好序号。2、当课程清单表中的数据增加或减少后、数据改变后(教师|星期|节次这种格式不会变)程序也能正确运行。 教师名册提取.rar (68.11 KB, 下载次数: 24)
image.png

TA的精华主题

TA的得分主题

发表于 2023-3-18 09:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 wanghan519 于 2023-3-18 09:38 编辑

来凑热闹,感觉perl单行式写在公式栏里真的爽啊,其实只用公式应该也可以
  1. wps =UNIQUE(LEFT(A1:A13,FIND("|",A1:A13)-1))
复制代码



图片.jpg

TA的精华主题

TA的得分主题

发表于 2023-3-18 09:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

TA的精华主题

TA的得分主题

发表于 2023-3-18 09:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 字典数组法()
    Dim dic
    Set dic = CreateObject("scripting.dictionary")
    n = Sheet5.Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To n '源数据区行循环
        Key = Split(Sheet5.Cells(i, 1).Value, "|")(0) '关键字组合型
        If Not dic.exists(Key) And Key <> "" Then
            dic(Key) = dic.Count + 1
        End If
    Next
    Sheet2.Range("a2").Resize(10000, 2).ClearContents
    Sheet2.Range("a2").Resize(dic.Count, 2) = Application.Transpose(Array(dic.items, dic.keys))
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-18 10:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢老师帮忙,我抄了半天,还是出错,估计是抄时不正确,不知方便上传个附件吗

TA的精华主题

TA的得分主题

发表于 2023-3-18 10:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit
Sub TEST()
    Dim ar, strName$, i&, r&, dic As Object
   
    Set dic = CreateObject("Scripting.Dictionary")
   
    ar = Sheets("课程清单").[A1].CurrentRegion
    For i = 2 To UBound(ar)
        strName = Split(ar(i, 1), "|")(0)
        If strName <> "" Then
            If Not dic.exists(strName) Then
                r = r + 1
                dic(strName) = r
            End If
        End If
    Next i
   
    [A1].CurrentRegion.Offset(1).Clear
    [A2].Resize(dic.Count, 2) = Application.Transpose(Array(dic.items, dic.keys))
    Set dic = Nothing
    Beep
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-18 10:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请参考。。。

教师名册提取.rar

68.66 KB, 下载次数: 13

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-18 10:25 | 显示全部楼层
Sub 提取教师名册()
Dim ar As Variant
Dim br()
Dim d As Object
Set d = CreateObject("scripting.dictionary")
With Sheets("课程清单")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 2 Then MsgBox "课程清单为空!": End
    ar = .Range("a1:b" & r)
End With
ReDim br(1 To UBound(ar), 1 To 2)
For i = 2 To UBound(ar)
    If Trim(ar(i, 1)) <> "" Then
        If InStr(ar(i, 1), "|") > 0 Then
            xm = Split(ar(i, 1), "|")(0)
            t = d(xm)
            If t = "" Then
                k = k + 1
                d(xm) = k
                t = k
                br(k, 1) = k
                br(k, 2) = xm
            End If
        End If
    End If
Next i
With Sheets("教师名册")
    .[a1].CurrentRegion.Offset(1) = Empty
    .[a2].Resize(k, 2) = br
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-3-18 10:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-3-18 10:26 | 显示全部楼层
教师名册提取.rar (67.5 KB, 下载次数: 7)
121行数据有问题

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 09:48 , Processed in 0.041416 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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