ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 综合应用 > 找出对称字符串(答题时间已过,开帖)

找出对称字符串(答题时间已过,开帖)

作者:绿色风 分类: 时间:2022-08-18 浏览:124
楼主
toby08
如下图,找出A列的对称字符串,效果如C列所示
要求:1、除VBA外,可使用任何方法
       2、在Excel中批量完成
说明:可使用任意辅助列,并建议在2007以上版本完成该题。  本人答案的关键之处:2010(2007)、SQL 、字符串处理

源数据:

 
效果图:

 


对称字符串.rar
2楼
syz105729913
对称不对称?.rar

参与一下
公式稍微修改即可,在2007版本下使用。
  1. =INDEX(A:A,SMALL(IF(MMULT(1*EXACT(MID(LEFT(A$2:A$21,LEN(A$2:A$21)/2),COLUMN(A:BH),1),MID(REPT(" ",61-(RIGHT(LEN(A$2:A$21),2)+1)/2)&RIGHT(A$2:A$21,LEN(A$2:A$21)/2),61-COLUMN(A:BH),1)),ROW($1:$60)^0)=INT(LEN(A$2:A$21)/2),ROW($2:$21),4^8),ROW()-1))&""
3楼
rongjun
数组公式:

  1. =INDEX(A:A,SMALL(IF(MMULT(--EXACT(RIGHT(LEFT($A$2:$A$21,COLUMN(A:AZ))),LEFT(RIGHT($A$2:$A$21,COLUMN(A:AZ)))),ROW($1:$52)^0)=52,ROW($2:$21),4^8),ROW(A1)))&""


对称不对称?.rar
4楼
kevinchengcw
  1. Sub test()
  2. Dim M, N As Integer
  3. Dim Str As String
  4. N = 2
  5. For M = 2 To Range("a65536").End(3).Row
  6.     Str = CStr(Cells(M, 1).Value)
  7.     If Str = StrReverse(Str) Then
  8.         Cells(N, 3) = Str
  9.         N = N + 1
  10.     End If
  11. Next M
  12. End Sub
5楼
mosforyou
可以使用辅助列吗?
...........................

呵呵,下了新附件才明白,要区分大小写哦!
重新做了一个,看看是否合题意?适用所有高版本?
对称不对称.rar
6楼
wjc2090742
唉,参与一下,根本想不出来怎么批量处理。偶尔也要有我们菜鸟能做的题目嘛。
对称字符串.zip
7楼
wjc2090742
学习了草版循环引用的帖子,继续来参与一下,不管怎么说,比起上面的回答总是进步了。已经向人请教oricle中sql的写法了,不知道能否在本测试结束前学会楼主的解法。
做法见附件。
对称字符串.zip
8楼
donghan
学习高手的答案
9楼
wuxiang_123
不知道SQL中区分大小写的函数是什么,所以只能拆分出来用函数来比较。
对称字符串.gif
 

对称字符串.rar
10楼
xiongkehua2008
版主請查看附件,應用了自定義名稱(主要是為了縮減輔助列中公式的長度)+輔助列的方法完成...
111.rar
11楼
donghan
 
=INDEX(A:A,SMALL(IF(MMULT(--(CODE(MID(REPT("A",61-LEN(A1:A21))&A1:A21,COLUMN(A:BI),1))=CODE(MID(A1:A21&REPT("A",61-LEN(A1:A21)),62-COLUMN(A:BI),1))),ROW($1:$61)^0)/61<1,99,ROW(1:21)),ROW(1:21)),)&""
12楼
chrisfang
数组公式,03版本下亦可使用:
  1. =INDIRECT("A"&SMALL(IF(MMULT(--EXACT(RIGHT(LEFT(A$1:A$21,COLUMN(A:Z))),LEFT(RIGHT(A$1:A$21,COLUMN(A:Z)))),ROW($1:$26)^0)=26,ROW($1:$21)),ROW(A1)))

13楼
棉花糖
=INDEX(A:A,SMALL(IF((MMULT(--(EXACT(MID(A1:A21,61-COLUMN(A:BH),1),MID(A1:A21,TEXT(COLUMN(A:BH)-60+LEN(A1:A21),"[>0]0;99"),1))),ROW(1:60)^0)=60)*LEN(A1:A21),ROW(1:21),22),ROW(1:21)))&""
多单元格数组公式
14楼
wenshui2006
用了一个辅助列,,,适用2003/2007/2010版,,,,


    等看不用辅助列的方法,,,
对称字符串.rar
15楼
xiongkehua2008
再发个不用辅助列的
=INDIRECT("a"&SMALL(IF(MMULT(N(FIND(MID(A$2:A$21,COLUMN(A:BH),1),A$2:A$21)=FIND(LEFT(RIGHT(A$2:A$21,COLUMN(A:BH))),A$2:A$21)),ROW($1:$60)^0)=60,ROW($2:$21),4^8),ROW(A1)))&""
111.rar
16楼
arjoe
从第2行开始,07版数组公式
=OFFSET(A$1,SMALL(IF(MMULT(N(CODE(LEFT(RIGHT(A$2:A$21,COLUMN(A:AD))))=CODE(RIGHT(LEFT(A$2:A$21,COLUMN(A:AD))))),ROW(1:30)^0)=30,ROW($1:$20),4^8),ROW(A1)),)&""
17楼
rongjun
多单元格数组公式:
  1. =INDEX(A:A,SMALL(IF(MMULT(FIND(MID(A2:A21,COLUMN(A:BH),1),RIGHT(A2:A21,COLUMN(A:BH))&A2:A21),ROW(1:60)^0)=60,ROW(2:21),99),ROW(1:20)))&""
18楼
liuguansky
函数解决,区域数组,见附件。2003
=INDEX(A:A,SMALL(--TEXT(MMULT(--(CODE(MID(A2:A21&REPT(" ",60),COLUMN(A:BG),1))=CODE(RIGHT(REPT(" ",60)&A2:A21,COLUMN(A:BG)))),ROW(1:59)^0),"[=59]"""&ROW(2:21)&""";65536"),ROW(1:20)))&""
对称字符串.rar
19楼
水星钓鱼
toby的答案应该有辅助列吧?
20楼
toby08
我的做法:
SQL语句:

  1. Select *
  2. From [A$]
  3. Where StrComp(StrReverse(data),data,0)=0
动画演示如下:

 
若不习惯上面SQL语句的写法,可先写如下的过渡性语句:

  1. Select [A$].data
  2. From
  3. (Select StrReverse(data) as fz From [A$])T1,[A$]
  4. Where StrComp(T1.fz,[A$].data,0)=0
提示:本题的关键点在于StrReverse、StrComp这两个SQL文本处理函数的运用。
关于这两个函数的用法,可参考:

免责声明

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

评论列表
sitemap