Excel精英培训网

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

[已解决]数据源格式不一样问题

[复制链接]
发表于 2012-12-12 18:44 | 显示全部楼层 |阅读模式
大家帮忙一下这个问题,宏执行A列数据源可以执行,执行G列数据源不行,帮我改改,这两种数据源格式都可执行,谢谢。
Sub KD()
   
  Dim Ar, Arr, i&
    Set R = CreateObject("vbscript.regexp")
    Dim An(1 To 99) As Long, K&, At(), Cel As Range
    Const CN As Double = 25.4
    Set Cel = Range("A:a").Find("%")
    Range("b2:d" & Rows.Count).ClearContents
    If Not Cel Is Nothing Then
        Ar = Range("A2:A" & Cel.Row - 1).Value
        Arr = Range(Cel.Offset(1), Cel.End(4)).Value
        ReDim At(1 To UBound(Ar), 1 To 3)
        With R
            .Global = True
            .Pattern = ".*X.*Y.*"
            For i = 1 To UBound(Arr)
                If Left(Arr(i, 1), 1) = "T" Then
                    K = CByte(Mid(Arr(i, 1), 2))
                Else
                    If .test(Arr(i, 1)) Then
                        An(K) = An(K) + 1
                    End If
                End If
            Next i
            .Pattern = "(T(\d{2}))C(\.\d+)$"
            For i = 1 To UBound(Ar)
                If .test(Ar(i, 1)) Then
                    Arr = Split(.Replace(Ar(i, 1), "$1 $3 $2"))
                    At(i, 1) = Arr(0)
                    At(i, 2) = Arr(1) * CN
                    At(i, 3) = An(CByte(Arr(2)))
                End If
            Next i
        End With
        [b2].Resize(UBound(At), 3) = At
        Set R = Nothing
        MsgBox "处理完毕,请验证。"
    End If
End Sub
最佳答案
2012-12-16 12:21
其实2段数据也可以共用这一段代码,不过得加个判断就行了。

Book188.rar

657.33 KB, 下载次数: 15

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-12-12 21:24 | 显示全部楼层
用的正则,不太熟,但我想,估计要通用有点难吧,内容没有太多的相似。
回复

使用道具 举报

发表于 2012-12-12 21:30 | 显示全部楼层
A列是2段,G列是4段,这上计算规则就不适用了。
回复

使用道具 举报

 楼主| 发表于 2012-12-12 21:37 | 显示全部楼层
hwc2ycy 发表于 2012-12-12 21:30
A列是2段,G列是4段,这上计算规则就不适用了。

那就拜托弄G列的宏,谢谢!!!
回复

使用道具 举报

发表于 2012-12-12 21:39 | 显示全部楼层
我不知道你计算%上面T开头的什么规律。
回复

使用道具 举报

 楼主| 发表于 2012-12-12 21:53 | 显示全部楼层
hwc2ycy 发表于 2012-12-12 21:39
我不知道你计算%上面T开头的什么规律。

编号取G列%以上有含C字母之前
孔径取C后S之前乘25.4
孔数取%以下如T1到T2含有XY坐标行数多少就是T1孔数,T1下面不一定接T2
回复

使用道具 举报

 楼主| 发表于 2012-12-12 21:56 | 显示全部楼层
hwc2ycy 发表于 2012-12-12 21:39
我不知道你计算%上面T开头的什么规律。

参考一下,这看简单

Book189.rar

124.1 KB, 下载次数: 9

回复

使用道具 举报

 楼主| 发表于 2012-12-13 17:51 | 显示全部楼层
hwc2ycy 发表于 2012-12-12 21:30
A列是2段,G列是4段,这上计算规则就不适用了。

http://www.excelpx.com/thread-292037-1-1.html 如有时间帮我这个改改,谢谢。
回复

使用道具 举报

发表于 2012-12-16 12:18 | 显示全部楼层
  1. Sub KD2()
  2.    
  3.   Dim Ar, Arr, i&
  4.     Set R = CreateObject("vbscript.regexp")
  5.     Dim An(1 To 99) As Long, K&, At(), Cel As Range
  6.     Const CN As Double = 25.4
  7.     Set Cel = Range("g:g").Find("%")
  8.     Range("h2:j" & Rows.Count).ClearContents
  9.     If Not Cel Is Nothing Then
  10.         Ar = Range("g2:g" & Cel.Row - 1).Value
  11.         Arr = Range(Cel.Offset(1), Cel.End(4)).Value
  12.         ReDim At(1 To UBound(Ar), 1 To 3)
  13.         With R
  14.             .Global = True
  15.             .Pattern = ".*X.*Y.*"
  16.             For i = 1 To UBound(Arr)
  17.                 If Left(Arr(i, 1), 1) = "T" Then
  18.                     K = CByte(Mid(Arr(i, 1), 2))
  19.                     'Debug.Print Arr(i, 1), i, K
  20.                 Else
  21.                     If .test(Arr(i, 1)) Then
  22.                         'Debug.Print Arr(i, 1), An(K)
  23.                         An(K) = An(K) + 1
  24.                     End If
  25.                 End If
  26.             Next i
  27.             
  28.             .Pattern = "(T(\d{2}))C(\.\d+)S(\d+)\.F(\d+)(\.H(\d+))$"
  29.             For i = 1 To UBound(Ar)
  30.                 If .test(Ar(i, 1)) Then
  31.                     Debug.Print Ar(i, 1)
  32.                     Dim temp
  33.                     temp = .Replace(Ar(i, 1), "$1 $3 $2")
  34.                     Arr = Split(.Replace(Ar(i, 1), "$1 $3 $2"))
  35.                     At(i, 1) = Arr(0)
  36.                     At(i, 2) = Arr(1) * CN
  37.                     At(i, 3) = An(CByte(Arr(2)))
  38.                 End If
  39.             Next i
  40.         End With
  41.         [h2].Resize(UBound(At), 3) = At
  42.         Set R = Nothing
  43.         MsgBox "处理完毕,请验证。"
  44.     End If
  45. End Sub
复制代码
回复

使用道具 举报

发表于 2012-12-16 12:21 | 显示全部楼层    本楼为最佳答案   
其实2段数据也可以共用这一段代码,不过得加个判断就行了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:28 , Processed in 0.554053 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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