Excel精英培训网

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

[已解决]VBA做分别减到S列

[复制链接]
发表于 2014-4-2 10:24 | 显示全部楼层 |阅读模式
本帖最后由 zss7758258 于 2014-4-2 11:23 编辑

问题1问题2.zip (159.65 KB, 下载次数: 152)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-4-2 10:58 | 显示全部楼层
  1. 问题一问题二一样的,只要把第一行长度写成5或7.
  2. Sub tt()
  3.     xlen = 5
  4.     With ActiveSheet
  5.         r = .Cells(.Rows.Count, 4).End(3).Row
  6.         arr = .Range("d3:s" & r)
  7.         For i = 1 To UBound(arr)
  8.             x = CStr(arr(i, 1))
  9.             y = arr(i, 15) 'R列
  10.             If Len(x) < xlen Then x = Application.WorksheetFunction.Rept("0", xlen - Len(x)) & x
  11.             For j = 1 To Len(x)
  12.                 t = Val(Mid(x, j, 1)) - y
  13.                 arr(i, 16) = arr(i, 16) & IIf(t > 0, t, t + 10)
  14.             Next
  15.         Next
  16.         .[s3].Resize(UBound(arr), 1) = Application.Index(arr, , 16)
  17.     End With
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2014-4-2 11:04 | 显示全部楼层
代码小改动了一下。
  1. Sub 问题一()
  2.     Call tt(5)
  3. End Sub
  4. Sub 问题二()
  5.     Call tt(7)
  6. End Sub
  7. Sub tt(xlen)
  8.     With ActiveSheet
  9.         r = .Cells(.Rows.Count, 4).End(3).Row
  10.         .Range("s3:s" & r).Clear
  11.         arr = .Range("d3:s" & r)
  12.         For i = 1 To UBound(arr)
  13.             x = CStr(arr(i, 1))
  14.             y = arr(i, 15) 'R列
  15.             arr(i, 16) = "'"
  16.             If Len(x) < xlen Then x = Application.WorksheetFunction.Rept("0", xlen - Len(x)) & x
  17.             For j = 1 To Len(x)
  18.                 t = Val(Mid(x, j, 1)) - y
  19.                 arr(i, 16) = arr(i, 16) & IIf(t >= 0, t, t + 10)
  20.             Next
  21.         Next
  22.         .[s3].Resize(UBound(arr), 1) = Application.Index(arr, , 16)
  23.     End With
  24. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
zss7758258 + 3 谢谢老师

查看全部评分

回复

使用道具 举报

发表于 2014-4-2 11:05 | 显示全部楼层    本楼为最佳答案   
请看附件。

问题1问题2九7版本.rar

27.68 KB, 下载次数: 11

回复

使用道具 举报

发表于 2014-4-2 11:32 | 显示全部楼层
Function jf(x, y, z%) 'x表示原数,y表示被减数,z表示长度
    Dim i%
    x = Format(x, String(z, "0"))
    For i = 1 To Len(x)
        z = Mid(x, i, 1)
        jf = jf & IIf(z < y, 10 + z - y, z - y)
    Next i
End Function
自定义函数jf.rar (24.89 KB, 下载次数: 2)

评分

参与人数 1 +3 收起 理由
zss7758258 + 3 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-2-3 16:11 | 显示全部楼层
  1. Sub tt3()
  2.     xlen = 7  '数字自设
  3. With ActiveSheet
  4.         r = .Cells(.Rows.Count, 4).End(3).Row
  5.         .Range("s3:s" & r).Clear
  6.         arr = .Range("d3:s" & r)
  7.         For i = 1 To UBound(arr)
  8.             x = CStr(arr(i, 1))
  9.             y = arr(i, 15) 'R列
  10.             arr(i, 16) = "'"
  11.             If Len(x) < xlen Then x = Application.WorksheetFunction.Rept("0", xlen - Len(x)) & x
  12.             For j = 1 To Len(x)
  13.                 t = Val(Mid(x, j, 1)) - y
  14.                 arr(i, 16) = arr(i, 16) & IIf(t >= 0, t, t + 10)
  15.             Next
  16.         Next
  17.         .[s3].Resize(UBound(arr), 1) = Application.Index(arr, , 16)
  18.     End With
  19. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 06:44 , Processed in 0.718055 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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