楼主 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: 采用如下公式:
如何将正整数逆序重排生成新的整数?.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 没有了 |