ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 如何反转一个数字串?

如何反转一个数字串?

作者:绿色风 分类: 时间:2022-08-17 浏览:128
楼主
gvntw
Q:如何反转一个数字串,如把1230反转为0321?
A:假设数字串在A1单元格,数组:
=TEXT(SUM(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*10^ROW(INDIRECT("1:"&LEN(A1))))/10,REPT(0,LEN(A1)))
2楼
wshcw
公式57个字符足够了:

=MID(SUM((0&MID(A1&1,ROW($1:98),1))*10^ROW($2:99))%,2,98)
3楼
wshcw
不按数组三键,则公式长度为64字符:
=MID(SUMPRODUCT((0&MID(A1&1,ROW($1:98),1))*10^ROW($2:99))%,2,98)
4楼
gvntw
呵呵,公式是短了,可计算量却增加了。
5楼
willin2000
不需要到98,因为此法最大反转15位数.
6楼
wshcw
是的只需到15,实际最大反转14位数(因公式中&1占了一位)
=MID(SUM((0&MID(A1&1,ROW($1:$15),1))*10^ROW($2:$16))%,2,14)

7楼
apolloh
呵呵,我们应该提倡简约,但更要提倡效率,对于Excel函数与公式而言,运算速度应该是最重要的指标。
8楼
gvntw
使用INDIRECT函数还有一个好处,就是插入或删除行的操作,不会影响公式的计算结果。
9楼
wshcw
Sub 测试公式速度()
Dim F(1 To 5)
Dim I As Integer, J As Integer
F(1) = "=TEXT(SUM(MID(A1,ROW(INDIRECT(""1:""&LEN(A1))),1)*10^ROW(INDIRECT(""1:""&LEN(A1))))/10,REPT(0,LEN(A1)))"
F(2) = "=MID(SUM((0&MID(A1&1,ROW($1:$15),1))*10^ROW($2:$16))%,2,14)"
For J = 1 To 2
S = Timer
For I = 1 To 10000
    M = Evaluate(F(J))
    M = ""
Next
Debug.Print F(J) & Format(Timer - S, "        0.000")
Next
End Sub
测试结果:
[auto_open] <
[SetupFunctionIDs] <
[SetupFunctionIDs] >
[PickPlatform] <
[PickPlatform] >
[VerifyOpen] <
[VerifyOpen] > 1
[RegisterFunctionIDs] <
[RegisterFunctionIDs] >
[auto_open] >
=TEXT(SUM(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*10^ROW(INDIRECT("1:"&LEN(A1))))/10,REPT(0,LEN(A1)))        0.953
=MID(SUM((0&MID(A1&1,ROW($1:$15),1))*10^ROW($2:$16))%,2,14)        1.250
10楼
wshcw
测试结果:
A1空值时:
=TEXT(SUM(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*10^ROW(INDIRECT("1:"&LEN(A1))))/10,REPT(0,LEN(A1)))        1.922
=MID(SUM((0&MID(A1&1,ROW($1:$15),1))*10^ROW($2:$16))%,2,14)        2.156
A1为4位数时:
=TEXT(SUM(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*10^ROW(INDIRECT("1:"&LEN(A1))))/10,REPT(0,LEN(A1)))        2.219
=MID(SUM((0&MID(A1&1,ROW($1:$15),1))*10^ROW($2:$16))%,2,14)        2.188
A1为14位数时:
=TEXT(SUM(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*10^ROW(INDIRECT("1:"&LEN(A1))))/10,REPT(0,LEN(A1)))        2.500
=MID(SUM((0&MID(A1&1,ROW($1:$15),1))*10^ROW($2:$16))%,2,14)        2.172

11楼
gvntw
谢谢wshcw的测试,如果用数字15还行。
如果用COLUMN(1:1)   ROW(A:A)之类话,估计就差太多了,呵呵。
12楼
xyh9999
不如用自定义函数的好,如下:
Function lqc_StrReverse(ByVal ls)'返回一个字符串的反序字符串
lqc_StrReverse = StrReverse(ls)
End Function

例如:在B2中输入: =lqc_StrReverse(A1)
13楼
gvntw
呵呵,用自定义函数当然好了,但此帖是说明用函数的方法。
现在大部分人还是不会 VBA  的。
14楼
rongjun
Q: 如何将正整数逆序重排生成新的整数?

 
A: 采用如下公式:
  1. =SUMPRODUCT((0&MID(A2,ROW($1:$15),1))*10^(ROW($1:$15)-1))

如何将正整数逆序重排生成新的整数?.rar
15楼
lrlxxqxa
如果不是数字,是文本的话,如何逆序重拍呢?
16楼
rongjun

如何将一个字符串逆序返回? http://www.exceltip.net/thread-928-1-1.html
17楼
gvntw
文本逆转还是用VBA函数 StrReverse 比较好,简单实用。
数字反转虽然函数可用,但在实际应用中,我还是喜欢用VBA自定义函数。
18楼
yaoxuhuijsz
学习
19楼
yaoxuhuijsz
学习
20楼
paul001
高手过招 看的眼花缭乱
21楼
paul001
整数        逆序重排       
791220        22197       
  有个小问题  这个逆序排列后那个0  没有了

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap