Excel精英培训网

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

[已解决]通过VBA 改变数据格式

[复制链接]
发表于 2016-2-29 11:15 | 显示全部楼层 |阅读模式
编程需要大量处理数据格式,希望大家帮忙看看附件,主要是想把sheet1和sheet2 中A列的数据改变格式成D列的
最佳答案
2016-2-29 16:02
hadesqu 发表于 2016-2-29 13:48
求版主给个附件吧,我按你编码发现有问题,感谢~~~

测试时若发现有问题,你应上传测试的附件,并明确解释。
不该只丢一句话,毕竟其它朋友都是付出了时间和精力的。


我把输出放在F列,你先试试。





Dim d

'主程序
Sub main()
    Dim i, j, k, t
    For i = 1 To 2
        Sheets(i).Activate
        Call total

        k = d.keys: t = d.items
        For j = 0 To UBound(k)
            If t(j) > 1 Then
                Select Case i
                Case 1
                    k(j) = formatString1(k(j), t(j))
                Case 2
                    k(j) = formatString2(k(j), t(j))
                End Select
            End If
        Next j
        k = Application.Transpose(k)
        Range("f:f").ClearContents
        Range("f1").Resize(UBound(k), 1) = k
    Next i
End Sub

'求各项次数
Private Sub total()
    Dim A, i, x
    A = Range("a1").CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(A)
        x = VBA.InStr(A(i, 1), "[")
        x = IIf(x, x, Len(A(i, 1)))
        x = Left(A(i, 1), x)
        d(x) = d(x) + 1
    Next i
End Sub

'格式化表1的字符串
Function formatString1(x, y)
    Dim A, B
    A = VBA.Split(x, Chr(32))
    B = VBA.Split(A(1), "[")
    formatString1 = A(0) & " [0:" & y - 1 & "] " & B(0) & ","
End Function

'格式化表2的字符串
Function formatString2(x, y)
    Dim str$, num$
    str = Mid(x, 2, InStr(x, "[") - 2)
    num = "[0:" & y - 1 & "]"
    formatString2 = "." & num & str & " (" & num & str & "),"
End Function

test2.rar (12.15 KB, 下载次数: 6)

test.rar

7.4 KB, 下载次数: 6

发表于 2016-2-29 11:48 | 显示全部楼层
回复

使用道具 举报

发表于 2016-2-29 12:04 来自手机 | 显示全部楼层
想到点思路了:
判断有无【,有就截取左边到【的子串到字典里计数,无直接添加到字典计数。
回复

使用道具 举报

发表于 2016-2-29 12:09 | 显示全部楼层
请见代码。
2016-2-29格式.png

评分

参与人数 1 +9 收起 理由
悠悠05 + 9 很给力,版主威武

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-2-29 13:48 | 显示全部楼层
蓝桥玄霜 发表于 2016-2-29 12:09
请见代码。

求版主给个附件吧,我按你编码发现有问题,感谢~~~
回复

使用道具 举报

 楼主| 发表于 2016-2-29 14:41 | 显示全部楼层
爱疯 发表于 2016-2-29 12:04
想到点思路了:
判断有无【,有就截取左边到【的子串到字典里计数,无直接添加到字典计数。

爱疯大神帮忙想想吧,版主可能比较忙,可能没空~~~
回复

使用道具 举报

发表于 2016-2-29 16:02 | 显示全部楼层    本楼为最佳答案   
hadesqu 发表于 2016-2-29 13:48
求版主给个附件吧,我按你编码发现有问题,感谢~~~

测试时若发现有问题,你应上传测试的附件,并明确解释。
不该只丢一句话,毕竟其它朋友都是付出了时间和精力的。


我把输出放在F列,你先试试。





Dim d

'主程序
Sub main()
    Dim i, j, k, t
    For i = 1 To 2
        Sheets(i).Activate
        Call total

        k = d.keys: t = d.items
        For j = 0 To UBound(k)
            If t(j) > 1 Then
                Select Case i
                Case 1
                    k(j) = formatString1(k(j), t(j))
                Case 2
                    k(j) = formatString2(k(j), t(j))
                End Select
            End If
        Next j
        k = Application.Transpose(k)
        Range("f:f").ClearContents
        Range("f1").Resize(UBound(k), 1) = k
    Next i
End Sub

'求各项次数
Private Sub total()
    Dim A, i, x
    A = Range("a1").CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(A)
        x = VBA.InStr(A(i, 1), "[")
        x = IIf(x, x, Len(A(i, 1)))
        x = Left(A(i, 1), x)
        d(x) = d(x) + 1
    Next i
End Sub

'格式化表1的字符串
Function formatString1(x, y)
    Dim A, B
    A = VBA.Split(x, Chr(32))
    B = VBA.Split(A(1), "[")
    formatString1 = A(0) & " [0:" & y - 1 & "] " & B(0) & ","
End Function

'格式化表2的字符串
Function formatString2(x, y)
    Dim str$, num$
    str = Mid(x, 2, InStr(x, "[") - 2)
    num = "[0:" & y - 1 & "]"
    formatString2 = "." & num & str & " (" & num & str & "),"
End Function

test2.rar (12.15 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2016-2-29 16:37 | 显示全部楼层
爱疯 发表于 2016-2-29 16:02
测试时若发现有问题,你应上传测试的附件,并明确解释。
不该只丢一句话,毕竟其它朋友都是付出了时间和 ...

是,是,我错啦,下次一定注意~~~
回复

使用道具 举报

 楼主| 发表于 2016-2-29 16:40 | 显示全部楼层
爱疯 发表于 2016-2-29 16:02
测试时若发现有问题,你应上传测试的附件,并明确解释。
不该只丢一句话,毕竟其它朋友都是付出了时间和 ...

感谢,就是这样,有些小问题,我自己修改就好,谢谢~~~{:29:}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 13:39 , Processed in 0.536062 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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