ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

字符串转移

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-31 20:02 | 显示全部楼层 |阅读模式
image.png


如上图,A列信息,用\ ; ;/等符号分隔了(空格忽略)。
我想将A列信息内容,根据B列序的顺序填写到E列中。
英文字母区分,小写转大写;字符串中的空格去掉;
第3行的3个字符串要填写到5个序号的信息列中,则按信息的顺序循环填写
填写结果如下图:

image.png
请教老师,如何通过vba实现

模拟文档.zip

8.77 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-8-31 20:58 | 显示全部楼层
Sub qs()
Dim arr, i
Set dic = CreateObject("scripting.dictionary")
bb = [{"\",";",";","/"}]
arr = Sheet1.Range("a1").CurrentRegion.Value
For i = 2 To UBound(arr)
    arr(i, 1) = VBA.Replace(arr(i, 1), " ", "")
    arr(i, 1) = VBA.Replace(arr(i, 1), "q", "Q")
    For Each b In bb
        arr(i, 1) = Replace(arr(i, 1), b, "/")
    Next
Next
For i = 2 To UBound(arr)
    ss = Split(arr(i, 1), "/")
    tt = Split(arr(i, 2), "/")
    If UBound(ss) = UBound(tt) Then
    For j = LBound(tt) To UBound(tt)
        dic(tt(j)) = ss(j)
    Next
    ElseIf UBound(tt) > UBound(ss) Then
        x = 0
        For m = LBound(tt) To UBound(tt)
            
            dic(tt(m)) = ss(x)
            x = x + 1
            If x > UBound(ss) Then x = 0
        Next
    End If
Next
cr = Sheet1.Range("d1").CurrentRegion.Value
For i = 2 To UBound(cr)
    cr(i, 2) = dic(CStr(cr(i, 1)))
Next
Sheet1.Range("g1").Resize(UBound(cr), 2) = cr
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-31 21:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-31 21:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
试试..........

模拟文档.zip

17.92 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2024-8-31 21:06 | 显示全部楼层
参与一下,仅供参考。。。
image.png
image.png

模拟文档.zip

18.93 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-8-31 21:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码如下。。。
Sub test()
    arr = Sheet1.[a1].CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    Set dic = CreateObject("scripting.dictionary")
    br = Split("\ ; ; /")          '请注意,每个字符之间有个空格,这个根据实际情况添加减少。
    For i = 0 To UBound(br)
        d(br(i)) = ""
    Next
    For i = 2 To UBound(arr)
        For Each k In d.keys
            If InStr(arr(i, 1), k) Then arr(i, 1) = Replace(arr(i, 1), k, "/")
        Next
        crr = Split(arr(i, 1), "/")
        drr = Split(arr(i, 2), "/")
        If UBound(crr) < UBound(drr) Then
            n = 0
            For j = 0 To UBound(drr)
                If j <= UBound(crr) Then
                    dic(1 * drr(j)) = UCase(Replace(crr(j), " ", ""))
                Else
                    dic(1 * drr(j)) = UCase(Replace(crr(n), " ", "")): n = n + 1
                End If
            Next
        Else
            For j = 0 To UBound(drr)
                dic(1 * drr(j)) = UCase(Replace(crr(j), " ", ""))
            Next
        End If
    Next
    Key = dic.keys
    Item = dic.items
    For i = 0 To UBound(Key) - 1
        For j = i + 1 To UBound(Key)
            If Key(i) > Key(j) Then
                tmp = Key(i)
                Key(i) = Key(j)
                Key(j) = tmp
                tmp = Item(i)
                Item(i) = Item(j)
                Item(j) = tmp
            End If
        Next
    Next
    Sheet1.[g1:h1] = [{"序","信息"}]
    Sheet1.[g2].Resize(dic.Count) = Application.Transpose(Key)
    Sheet1.[h2].Resize(dic.Count) = Application.Transpose(Item)
    Set d = Nothing
    Set dic = Nothing
    Beep
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-31 21:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用PQ解决。借楼练一下PQ


是这个效果吗?






捕获.JPG

TA的精华主题

TA的得分主题

发表于 2024-8-31 21:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 19:40 , Processed in 0.041692 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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