Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2922|回复: 9

[已解决]求助将班级名称转为指定的简称

[复制链接]
发表于 2016-2-27 09:14 | 显示全部楼层 |阅读模式
本帖最后由 gavincar 于 2016-3-3 05:59 编辑

想实现:
1、将所选择的区域(如A列,或A2:A5)的班级名称进行简化,简化后放到其后面对应的单元格。
2、班级名称前面为年级(可能2位或3位),后面为班号(如1班、2班,有些没有班号,直接加上“1班”)
3、因为班级名称还有很多,VBA代码中,最好方便以后添加其它班级名称。

谢谢!

111.jpg

最佳答案
2016-3-2 09:09
gavincar 发表于 2016-3-2 06:02
谢谢版主!就是将数据放到代码中用这个替换单元格区域的赋值。[{"工商管理","工管";"文化产业管理","文管 ...

Function JC(rng As Range) As String
    Dim A, B, i

    JC = rng.Value
    A = Array("工商管理", "文化产业管理", "连锁经营管理", "酒店管理")
    B = Array("工管", "文管", "连管", "酒管")

    For i = 0 To UBound(B)
        If VBA.InStr(JC, A(i)) Then
            JC = VBA.Replace(JC, A(i), B(i))
            If VBA.InStr(JC, "班") = 0 Then JC = JC & "1班"
            Exit For
        End If
    Next i
End Function
转换简称3.rar (10.79 KB, 下载次数: 7)

转换简称.rar

6.22 KB, 下载次数: 9

发表于 2016-2-27 10:11 | 显示全部楼层
附件

转换简称.zip

7.95 KB, 下载次数: 10

回复

使用道具 举报

 楼主| 发表于 2016-2-27 10:22 | 显示全部楼层
baksy 发表于 2016-2-27 10:11
附件

谢谢,好像没找到附件里的代码
回复

使用道具 举报

发表于 2016-2-29 20:07 | 显示全部楼层
Sub test()
    Dim A, i
    Sheets(1).Select
    Range("a:a").Copy [b1]
    [b1] = "简称"

    '1)替换
    A = Sheets(2).Range("a1").CurrentRegion
    For i = 2 To UBound(A)
        Range("b:b").Replace A(i, 1), A(i, 2)
    Next

    '2)补充班级
    A = Range("a1:b" & Range("a65536").End(xlUp).Row)
    For i = 2 To UBound(A)
        If VBA.InStr(A(i, 2), "班") = 0 Then A(i, 2) = A(i, 2) & "1班"
    Next

    Range("a1").Resize(i - 1, 2) = A
End Sub

转换简称2.rar (12.73 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2016-3-1 20:23 | 显示全部楼层
爱疯 发表于 2016-2-29 20:07
Sub test()
    Dim A, i
    Sheets(1).Select

能不能将数据做到代码中?这样的话,做成加载宏,可用于任何文档。谢谢。
回复

使用道具 举报

发表于 2016-3-1 21:50 | 显示全部楼层
将数据做到代码中,不懂是什么意思?
回复

使用道具 举报

 楼主| 发表于 2016-3-2 06:02 | 显示全部楼层
爱疯 发表于 2016-3-1 21:50
将数据做到代码中,不懂是什么意思?

谢谢版主!就是将数据放到代码中用这个替换单元格区域的赋值。[{"工商管理","工管";"文化产业管理","文管";"连锁经营管理","连营";"酒店管理","酒管"}]

另外,能不能通过自定义的函数来实现?如我在B2单元格输入:=JC(A2)得到简称,然后下拉得到其它的简称。

因为班级名称中,可能不太规范,最好可以实现模糊查询。即:只要含有”工“和”管“字样的,简称就是”XX工管X班"
回复

使用道具 举报

发表于 2016-3-2 09:09 | 显示全部楼层    本楼为最佳答案   
gavincar 发表于 2016-3-2 06:02
谢谢版主!就是将数据放到代码中用这个替换单元格区域的赋值。[{"工商管理","工管";"文化产业管理","文管 ...

Function JC(rng As Range) As String
    Dim A, B, i

    JC = rng.Value
    A = Array("工商管理", "文化产业管理", "连锁经营管理", "酒店管理")
    B = Array("工管", "文管", "连管", "酒管")

    For i = 0 To UBound(B)
        If VBA.InStr(JC, A(i)) Then
            JC = VBA.Replace(JC, A(i), B(i))
            If VBA.InStr(JC, "班") = 0 Then JC = JC & "1班"
            Exit For
        End If
    Next i
End Function
转换简称3.rar (10.79 KB, 下载次数: 7)
回复

使用道具 举报

 楼主| 发表于 2016-3-3 06:08 | 显示全部楼层
爱疯 发表于 2016-3-2 09:09
Function JC(rng As Range) As String
    Dim A, B, i

非常感谢
能不能修改一下,实现模糊查找呢?
如只要含“工”和“管”,就简称“工管”,如“工商管理”、“工商企业管理”均简称为“工管”。
不知是否容易实现,麻烦了。
回复

使用道具 举报

发表于 2016-3-3 09:37 | 显示全部楼层
gavincar 发表于 2016-3-3 06:08
非常感谢
能不能修改一下,实现模糊查找呢?
如只要含“工”和“管”,就简称“工管”,如“工商管理” ...

Function JC(rng As Range) As String
    Dim A, B, i
    A = Array("工商管理", "文化产业管理", "连锁经营管理", "酒店管理", "工商企业管理")    '替换前
    B = Array("工管", "文管", "连管", "酒管", "工管")    '替换后

    JC = rng.Value
    If VBA.InStr(JC, "班") = 0 Then JC = JC & "1班"
    For i = 0 To UBound(B)
        If VBA.InStr(JC, A(i)) Then JC = VBA.Replace(JC, A(i), B(i)): Exit For
    Next i
End Function




也不能模糊查询,想不出怎么模糊查询,并且做法还简单 ....
什么,就在A和B中,对应的添加。

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 15:09 , Processed in 0.257830 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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