Excel精英培训网

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

[已解决]【求】自定义函数计算数字

[复制链接]
发表于 2010-4-4 15:36 | 显示全部楼层 |阅读模式

希望能在单元格输入=Z(A1)
如果A1='062 计算结果为1345789
如果A1= 74 计算结果为01235689
即用函数表示的A1是3位数的情况是:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("0123456789",MID(A1,1,1),""),MID(A1,2,1),""),MID(A1,3,1),""))

注明:A1不指定是多少位的数字(文本数字)

如果可以请用到数组计算,这样计算才更快。

感谢老师赐教

最佳答案
2010-4-4 16:56

Function z(str As String) '数组办法1:差集filter
Dim i%, arr
arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
For i = 1 To Len(str)
    arr = Filter(arr, Mid(str, i, 1), False)
Next
z = Join(arr, "")
End Function

Function x(str As String) '数组办法2:split
Dim i%, arr
x = "0123456789"
For i = 1 To Len(str)
    x = Join(Split(x, Mid(str, i, 1)), "")
Next
End Function

发表于 2010-4-4 15:55 | 显示全部楼层

Function z(rng As Range)
Dim str$
If rng.Value <> "" Then
str = "0123456789"
    For i% = 1 To Len(rng.Value)
        str = Replace(str, Mid(rng, i, 1), "")
    Next
z = str
str = ""
End If
End Function

----------------------------------------------------------------------------------------------------

楼主,你的魔法表情特黄特暴露。

[em15]
[此贴子已经被作者于2010-4-4 16:03:52编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-4-4 16:14 | 显示全部楼层

QUOTE:
以下是引用cjainwei在2010-4-4 15:55:00的发言:

Function z(rng As Range)
Dim str$
If rng.Value <> "" Then
str = "0123456789"
    For i% = 1 To Len(rng.Value)
        str = Replace(str, Mid(rng, i, 1), "")
    Next
z = str
str = ""
End If
End Function

----------------------------------------------------------------------------------------------------

楼主,你的魔法表情特黄特暴露。

[em15]

表情是论坛里面选择到了。

要是能在上面的语句用到数组就好了。

谢谢

回复

使用道具 举报

 楼主| 发表于 2010-4-4 16:19 | 显示全部楼层

过2天才能上网,到时候来看有新答案没有,没有再评最佳了。

谢谢理解

回复

使用道具 举报

发表于 2010-4-4 16:53 | 显示全部楼层

QUOTE:
以下是引用cjainwei在2010-4-4 15:55:00的发言:

楼主,你的魔法表情特黄特暴露。

[em15]

[em04][em05]
回复

使用道具 举报

发表于 2010-4-4 16:56 | 显示全部楼层    本楼为最佳答案   

Function z(str As String) '数组办法1:差集filter
Dim i%, arr
arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
For i = 1 To Len(str)
    arr = Filter(arr, Mid(str, i, 1), False)
Next
z = Join(arr, "")
End Function

Function x(str As String) '数组办法2:split
Dim i%, arr
x = "0123456789"
For i = 1 To Len(str)
    x = Join(Split(x, Mid(str, i, 1)), "")
Next
End Function

回复

使用道具 举报

发表于 2010-4-4 18:29 | 显示全部楼层

=IF(LEN(SUBSTITUTE(A1,"0",""))=LEN(A1),"0","")&amp;SUBSTITUTE(123456789+SUM(-TEXT(MID(A1,ROW(INDIRECT("1:"&amp;LEN(A1))),1),"0"&amp;REPT("!0",10-MID(A1,ROW(INDIRECT("1:"&amp;LEN(A1))),1)-1))),"0","")不自定义,用它作数组公式也行哦。
回复

使用道具 举报

发表于 2010-4-4 18:39 | 显示全部楼层

=IF(ISERR(FIND(0,A1)),0,"")&SUBSTITUTE(SUM(IF(ISERR(FIND(ROW($1:$9),A1)),ROW($1:$9))*10^(9-ROW($1:$9))),0,"")

数组

回复

使用道具 举报

 楼主| 发表于 2010-4-5 10:38 | 显示全部楼层

富康和领风谢谢了。

求的是vba解决了。感谢

[em01]
回复

使用道具 举报

 楼主| 发表于 2010-4-5 10:44 | 显示全部楼层

QUOTE:
以下是引用枯禅在2010-4-4 16:56:00的发言:

Function z(str As String) '数组办法1:差集filter
Dim i%, arr
arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
For i = 1 To Len(str)
    arr = Filter(arr, Mid(str, i, 1), False)
Next
z = Join(arr, "")
End Function

Function x(str As String) '数组办法2:split
Dim i%, arr
x = "0123456789"
For i = 1 To Len(str)
    x = Join(Split(x, Mid(str, i, 1)), "")
Next
End Function

谢谢,

现在在网吧无法试验下,相信是好的方法,学习数组了。

感谢。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 13:51 , Processed in 0.272501 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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