如何使用公式在Excel中将单词转换为唯一代码而不使用VBA?
说,我有2个字A1:ddC, A2:DDC
我想将这两个单词转换为一个唯一的代码,以便我可以做区分大小写的查找。
所以我试着, =Code(A1)
它返回100,但如果我尝试=Code("dady")
那么它也返回100.它是COS =Code()
只有PIC字的第一个字符。
我想将单词转换为唯一代码(可以是ASCII代码或任何forms的唯一代码)。
那么如何做到这一点,而不使用VBA?
*警告:*这不是标题问题“如何使用公式将单词转换为Excel中的唯一代码而不使用VBA?”的解决scheme。 而是一个解决我认为是下属问题,因为原来的问题陈述“这样我可以做区分大小写的查找”。 这是一个解决scheme,实现了一个区分大小写的查找,而不需要在这之前转换值。
另一种方法是转换所有值,然后查看转换后的值,可以在数组input的公式中使用INDEX
和MATCH
函数,并直接查找值:
=INDEX(A1:A14,MATCH(TRUE,EXACT(A1:A14,"ddC"),0))
这将返回A1:A14
的值,与A1:A14
中的精确(区分大小写)匹配相同的索引到ddC
您可以非常容易地将其修改为其他列的查找。
说明:
从查找列表中获取所有完全匹配的数组开始,查找值:
所以如果我input这个公式:
=EXACT(A1:A14,"ddC")
然后进入公式栏,然后按F9它将显示一个真正的假数值的数组,与A1:A14
范围内的每个单元格都与我的expression式“ddC”完全匹配:
现在,如果我们使用这个布尔数组,并使用Match
函数返回数组中的True
的相对位置。
=MATCH(TRUE,EXACT(A1:A14,"ddC"),0)
但是请记住,我们需要按Ctrl + Shift + Enter来input,因为我们需要将公式的EXACT(A1:A14,"ddC")
部分作为数组返回。
现在我们在数组中有True
的位置,在这种情况下,我们可以使用它来检索任何列中的相应值,只要它是关系型和相同的大小。 因此,如果我们想在原始查找列中返回完全匹配的值(尽pipe在这种情况下相对无用,但将继续演示),我们只需将最后一个公式包含在Index
函数中:
=INDEX(A1:A14,MATCH(TRUE,EXACT(A1:A14,"ddC"),0))
但是请记住,我们需要按Ctrl + Shift + Enter来input,因为我们需要将公式的EXACT(A1:A14,"ddC")
部分作为数组返回。
现在我们可以将相同的概念应用到更大的范围以获得更有用的查找function:
但是请记住,我们需要按Ctrl + Shift + Enter来input,因为我们需要将公式的EXACT(A1:A14,"ddC")
部分作为数组返回。
现在注意在这最后一步我提供了2个公式:
=INDEX(A1:B14,MATCH(TRUE,EXACT(A1:A14,D2),0),2)
和
=INDEX(B1:B14,MATCH(TRUE,EXACT(A1:A14,D2),0))
第一个返回第二列A1:A14
精确匹配位置的范围A1:B14
中的值到D2
的值(本例中为“dady”)
第二个函数返回A1:A14
精确匹配位置的B1:B14
范围内的值到D2
的值(在本例中为“dady”)
希望别人可以添加更多的input,但据我所知,第二个可能会更好的执行,因为它有一个较小的索引范围,并不需要去指定的列,它也更短。
虽然对我来说第一个更容易阅读,但是对于某些(我认为更偏好),因为您知道您正在查看跨越2列的查找表,并且您正在返回第二列中的值。
*注:*我注意到,如果这个解决scheme在实践中更好,那么首先转换原始值,看看如何转换所有值一次,然后硬编码转换后的值将不需要额外的公式或计算(如果公式之后被replace为值)一旦完成,而这个方法将重新计算,也是数组input。 但是我觉得在这种情况下,提交者正在对一个不断变化的查找列表(一个不断要求所有值都使用数组公式进行转换的查询列表)进行单一查找,该选项允许您删除每个字的公式,总之,我希望这个解决你原来的问题,
干杯!!
由于这是一个散列,有些string可能会以相同的值结束,但这不太可能。
请注意,行函数使用1:255来生成1到255之间的数字列表 – 如果您的string结束时间更长,请更改此数字。
=A1&SUMPRODUCT(IF(IFERROR(CODE(MID(A1,ROW($1:$255),1)),0)>96,1,0),POWER(2,ROW($1:$255)))
这必须使用CTRL + SHIFT + ENTER以数组公式的formsinput – 如果已经成功完成,则会在公式周围看到{}
。
这将产生大小写字母的十进制表示forms,然后将其附加到单词本身 – 这将保证唯一性,因为唯一的方法是使单词和数字匹配具有相同的单词和大小写,意味着它首先是重复的。
由此, ddC
= ddC&1 * 2 + 1 * 4 + 0 * 8 = ddC6
DDC
= DDC&0 * 2 + 0 * 4 + 0 * 6 = DDC0
ddC
(ddC之后的空间)= ddc&1 * 2 + 1 * 4 + 1 * 8 + 0 * 16 = ddC 6
如果你所有的string像你上面指出的那样尝试像这样:
= CONCATENATE(Code(A1) , Code(Mid(A1,2,1)) , Code(Mid(A1,3,1)))
为了解释大写字母,你将会得到一个非常长的公式,特别是如果你有长词条目。 如果没有VBA,我会以这种方式来处理,并设置公式一次,以允许您预期的最大单词,然后根据需要复制它。
公式(展开):
=CONCATENATE(IF(EXACT(A1,UPPER(A1))=TRUE,"b","s")&CODE(A1),IF(EXACT(A1,UPPER(A1))=TRUE,"b","s")&CODE(MID(A1,2,1)),IF(EXACT(A1,UPPER(A1))=TRUE,"b","s")&CODE(MID(A1,3,1)), . . . )
你可以用你喜欢的任何东西来代替“b”和“s”。 我只是将这些用于大写字母(b = big,s = small)的大小写检查,并将其构build到您的唯一代码中。
为了扩大这个范围,通过在最后一个圆括号内添加这个片段JUST并修改MID()函数中的“3”以说明字长“4 “,”5“,”6“等
IF(EXACT(A1,UPPER(A1))=TRUE,"b","s")&CODE(MID(A1,3,1))
痛苦,是的,但它应该工作。
干杯。