说,我有2个单词A1:ddC, A2:DDC
我想将这两个单词转换为唯一的代码,以便我可以进行区分大小写的查找。
所以我试过,=Code(A1)
&它返回100,但是如果我尝试了=Code("dady")
那么它也会返回100.只有cos =Code()
才会显示该单词的第一个字符。
我想将单词转换为唯一代码(可以是ASCII代码或任何形式的唯一代码)。
那么如何在不使用VBA的情况下做到这一点?
答案 0 :(得分:5)
由于这是一个哈希值,一些字符串可能会以相同的值结束,但不太可能。
请注意,行函数使用1:255生成1到255之间的数字列表 - 如果字符串的结尾更长,则更改此数字。
=A1&SUMPRODUCT(IF(IFERROR(CODE(MID(A1,ROW($1:$255),1)),0)>96,1,0),POWER(2,ROW($1:$255)))
这必须使用 CTRL + SHIFT + ENTER 作为数组公式输入 - 您将看到{}
周围的ddC
公式,如果你已成功完成。
这将产生大写和小写字母的十进制表示,然后将其附加到单词本身 - 这将保证唯一性,因为单词和数字匹配的唯一方法是使用相同的单词和案件,这意味着它首先是一个副本。
有了这个,DDC
= ddC& 1 * 2 + 1 * 4 + 0 * 8 = ddC6
ddC
= DDC& 0 * 2 + 0 * 4 + 0 * 6 = DDC0
{{1}}(ddC后面有空格)= ddc& 1 * 2 + 1 * 4 + 1 * 8 + 0 * 16 = ddC 6
答案 1 :(得分:2)
*警告:* 这不是标题问题的解决方案 “如何在不使用VBA的情况下使用公式将单词转换为Excel中的唯一代码?”相反,它是我认为是基础问题的解决方案,因为原始问题表明“这样我就能做出区分大小写的Vlookup”。这是一个完成Case Sensitive Vlookup的解决方案,无需在执行此操作之前转换值。
转换所有值然后查看转换后的值的替代方法,您可以在输入数组的数组中使用INDEX
和MATCH
函数,并直接查找值:
=INDEX(A1:A14,MATCH(TRUE,EXACT(A1:A14,"ddC"),0))
这将返回A1:A14
中的值,在A1:A14
到ddC
的完全(区分大小写)匹配的相同索引处,您可以非常轻松地将其修改为查找其他专栏。
说明:
首先将查找列表中所有完全匹配的数组添加到您的查找值:
所以如果我输入这个公式:
=EXACT(A1:A14,"ddC")
然后进入公式栏并按 F9 它将显示一个真假值的数组,与A1:A14
范围内与我的表达式完全匹配的每个单元格相关“ddC”:
现在如果我们接受这个布尔数组,并使用Match
函数返回数组中True
的相对位置。
=MATCH(TRUE,EXACT(A1:A14,"ddC"),0)
但请记住,我们需要按 Ctrl + Shift + Enter 进入此项,因为我们需要EXACT(A1:A14,"ddC")
公式的一部分作为数组返回。
现在我们在数组中有True
的位置,在这种情况下6
我们可以使用它来检索任何列中的相应值,只要它是关系的并且相同尺寸。因此,如果我们想在原始查找列中返回完全匹配的值(虽然在这种情况下相对无用,但将继续进行演示),我们只需将最后一个公式包装在Index
函数中:
=INDEX(A1:A14,MATCH(TRUE,EXACT(A1:A14,"ddC"),0))
但请记住,我们需要按 Ctrl + Shift + Enter 进入此项,因为我们需要EXACT(A1:A14,"ddC")
公式的一部分作为数组返回。
现在我们可以将相同的概念应用于更大的范围,以获得更有用的查找功能:
但请记住,我们需要按 Ctrl + Shift + Enter 进入此项,因为我们需要EXACT(A1:A14,"ddC")
公式的一部分作为数组返回。
现在注意到最后一步,我提供了两个公式:
=INDEX(A1:B14,MATCH(TRUE,EXACT(A1:A14,D2),0),2)
并且
=INDEX(B1:B14,MATCH(TRUE,EXACT(A1:A14,D2),0))
第一列将A1:B14
中完全匹配位置的第二列A1:A14
范围内的值返回D2
中的值(在本例中为“dady”)
第二个返回B1:B14
中A1:A14
完全匹配位置D2
范围内的值与{{1}}中的值(在本例中为“dady”)
希望其他人可以添加更多输入,但据我所知,第二个可能表现更好,因为它具有较小的索引范围,并且不需要转到指定的列,它也更短。
虽然第一个对我来说更容易阅读,但对某些人来说(我认为更多的是偏好),因为你知道你正在查看一个跨越2列的查找表并且你要返回第二列中的值。
*注意:* 我注意到这个解决方案在实践中是否会更好,然后首先转换原始值,看看如何转换所有值一次,然后硬编码转换一旦完成,值将不需要额外的公式或计算(如果公式后面的值替换),此方法将重新计算,并且还输入数组。但我觉得在这种情况下,提问者正在单独查看更改查找列表(一个不断要求所有值都使用数组公式进行转换)此选项允许您删除每个单词的公式,只有一个公式 总而言之,我希望这能解决你原来的问题,
干杯!!
答案 2 :(得分:0)
如果所有字符串都像上面提到的那样,请尝试这样的事情:
= CONCATENATE(Code(A1) , Code(Mid(A1,2,1)) , Code(Mid(A1,3,1)))
答案 3 :(得分:0)
为了计算大写字母,你最终会得到一个非常长的公式,特别是如果你有很长的单词条目。如果没有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)的案例检查,并将其构建到您的唯一代码中。
为了扩展这个,通过在最后一个括号内添加这个片段JUST并修改MID()函数中的“3”来计算单词长度,添加其他案例来说明你正在使用的单词的长度“4”,“5”,“6”等:
IF(EXACT(A1,UPPER(A1))=TRUE,"b","s")&CODE(MID(A1,3,1))
痛苦,是的,但它应该有用。
干杯。