Excel精英培训网

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

[已解决]请教这两组代码合到一起怎么样写

[复制链接]
发表于 2012-2-12 09:12 | 显示全部楼层 |阅读模式
Sub test()
    Dim A, i%
    With Sheets("sheet1")
        A = .Range("b4:c" & .Range("b4").End(xlDown).Row)
    End With
    For i = 1 To UBound(A)
        A(i, 2) = pd(A(i, 1))
    Next i
    [c4].Resize(UBound(A), 1) = Application.Index(A, 0, 2)
End Sub

Function pd(x)    '判断
    Dim b%, s%, g%
100:
    pd = x
    b = Left(x, 1)
    s = Mid(x, 2, 1)
    g = Right(x, 1)
    '如果百位和十位相同 , 那么十位加1取尾
    If b = s Then
        x = b & Right((s + 1), 1) & g
        GoTo 100
    End If
    '如果十位和个位相同 , 那么个位加1取尾
    If s = g Then
        x = b & s & Right((g + 1), 1)
        GoTo 100
    End If
    '如果个位和百位相同 , 那么个位加1取尾
    If g = b Then
        x = b & s & Right((g + 1), 1)
        GoTo 100
    End If
    '如3个数码全相同,第2位加1取尾,第3位加2取尾
    If Replace(x, b, "", , 3) = "" Then
        pd = b & Right((s + 1), 1) & Right((g + 2), 1)
    End If   
End Function

http://www.excelpx.com/thread-222098-1-2.html
请教版主或高手这两组代码合到一起怎么样写,等待指教谢谢!
最佳答案
2012-2-12 13:36

  1. Sub test()
  2.     Dim A, i%, b%, s%, g%, x%
  3.     With Sheets("sheet1")
  4.         A = .Range("b4:c" & .Range("b4").End(xlDown).Row)
  5.     End With
  6.     For i = 1 To UBound(A)
  7.         x = A(i, 1)
  8. 100:
  9.         A(i, 2) = x
  10.         b = Left(x, 1)
  11.         s = Mid(x, 2, 1)
  12.         g = Right(x, 1)
  13.         
  14.         '如果百位和十位相同 , 那么十位加1取尾
  15.         If b = s Then
  16.             x = b & Right((s + 1), 1) & g
  17.             GoTo 100
  18.         End If
  19.         '如果十位和个位相同 , 那么个位加1取尾
  20.         If s = g Then
  21.             x = b & s & Right((g + 1), 1)
  22.             GoTo 100
  23.         End If
  24.         '如果个位和百位相同 , 那么个位加1取尾
  25.         If g = b Then
  26.             x = b & s & Right((g + 1), 1)
  27.             GoTo 100
  28.         End If
  29.         '如3个数码全相同,第2位加1取尾,第3位加2取尾
  30.         If Replace(x, b, "", , 3) = "" Then
  31.             A(i, 2) = b & Right((s + 1), 1) & Right((g + 2), 1)
  32.         End If
  33.         A(i, 2) = x
  34.     Next i
  35.     [c4].Resize(UBound(A), 1) = Application.Index(A, 0, 2)
  36. End Sub
复制代码
Book1d.rar (19.3 KB, 下载次数: 13)
发表于 2012-2-12 09:21 | 显示全部楼层
本帖最后由 雄鹰 于 2012-2-12 09:21 编辑

这样不是很好吗?
如果一定要合并:
Sub test()
    Dim A, i%
    With Sheets("sheet1")
        A = .Range("b4:c" & .Range("b4").End(xlDown).Row)
    End With
    For i = 1 To UBound(A)
            x = A(i, 1)
            b = Left(x, 1)
            s = Mid(x, 2, 1)
            g = Right(x, 1)
            '如果百位和十位相同 , 那么十位加1取尾
            If b = s Then
                x = b & Right((s + 1), 1) & g
                GoTo 100
            End If
            '如果十位和个位相同 , 那么个位加1取尾
            If s = g Then
                x = b & s & Right((g + 1), 1)
                GoTo 100
            End If
            '如果个位和百位相同 , 那么个位加1取尾
            If g = b Then
                x = b & s & Right((g + 1), 1)
                GoTo 100
            End If
            '如3个数码全相同,第2位加1取尾,第3位加2取尾
            If Replace(x, b, "", , 3) = "" Then
                pd = b & Right((s + 1), 1) & Right((g + 2), 1)
            End If
                A(i, 2) = pd
    Next i
    [c4].Resize(UBound(A), 1) = Application.Index(A, 0, 2)
End Sub

请测试是否与原代码效果一致。

回复

使用道具 举报

发表于 2012-2-12 09:32 | 显示全部楼层
                     向你们学习了!
回复

使用道具 举报

发表于 2012-2-12 10:14 | 显示全部楼层
学习中谢谢高手
回复

使用道具 举报

发表于 2012-2-12 10:26 | 显示全部楼层
你也可以在需要运行下边代码时,调用下边的代码啊,调用就用 CAII   加程序明
回复

使用道具 举报

发表于 2012-2-12 11:23 | 显示全部楼层
向各位高手学习了
回复

使用道具 举报

发表于 2012-2-12 13:36 | 显示全部楼层    本楼为最佳答案   

  1. Sub test()
  2.     Dim A, i%, b%, s%, g%, x%
  3.     With Sheets("sheet1")
  4.         A = .Range("b4:c" & .Range("b4").End(xlDown).Row)
  5.     End With
  6.     For i = 1 To UBound(A)
  7.         x = A(i, 1)
  8. 100:
  9.         A(i, 2) = x
  10.         b = Left(x, 1)
  11.         s = Mid(x, 2, 1)
  12.         g = Right(x, 1)
  13.         
  14.         '如果百位和十位相同 , 那么十位加1取尾
  15.         If b = s Then
  16.             x = b & Right((s + 1), 1) & g
  17.             GoTo 100
  18.         End If
  19.         '如果十位和个位相同 , 那么个位加1取尾
  20.         If s = g Then
  21.             x = b & s & Right((g + 1), 1)
  22.             GoTo 100
  23.         End If
  24.         '如果个位和百位相同 , 那么个位加1取尾
  25.         If g = b Then
  26.             x = b & s & Right((g + 1), 1)
  27.             GoTo 100
  28.         End If
  29.         '如3个数码全相同,第2位加1取尾,第3位加2取尾
  30.         If Replace(x, b, "", , 3) = "" Then
  31.             A(i, 2) = b & Right((s + 1), 1) & Right((g + 2), 1)
  32.         End If
  33.         A(i, 2) = x
  34.     Next i
  35.     [c4].Resize(UBound(A), 1) = Application.Index(A, 0, 2)
  36. End Sub
复制代码
Book1d.rar (19.3 KB, 下载次数: 13)

评分

参与人数 1 +3 收起 理由
东方智彩 + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-2-12 17:12 | 显示全部楼层
经测试效果正确,谢谢爱疯版主
回复

使用道具 举报

 楼主| 发表于 2012-2-12 17:15 | 显示全部楼层
雄鹰 发表于 2012-2-12 09:21
这样不是很好吗?
如果一定要合并:
Sub test()

谢谢雄鹰的热情解答,代码未能测试成功
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 23:42 , Processed in 0.402829 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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