如何使用公式而不使用VBA将单词转换为Excel中的唯一代码?

时间:2013-11-18 06:08:55

标签: excel excel-formula

说,我有2个单词A1:ddC, A2:DDC

我想将这两个单词转换为唯一的代码,以便我可以进行区分大小写的查找。

所以我试过,=Code(A1)&它返回100,但是如果我尝试了=Code("dady")那么它也会返回100.只有cos =Code()才会显示该单词的第一个字符。

我想将单词转换为唯一代码(可以是ASCII代码或任何形式的唯一代码)。

那么如何在不使用VBA的情况下做到这一点?

4 个答案:

答案 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的解决方案,无需在执行此操作之前转换值。

转换所有值然后查看转换后的值的替代方法,您可以在输入数组的数组中使用INDEXMATCH函数,并直接查找值:

=INDEX(A1:A14,MATCH(TRUE,EXACT(A1:A14,"ddC"),0))

这将返回A1:A14中的值,在A1:A14ddC的完全(区分大小写)匹配的相同索引处,您可以非常轻松地将其修改为查找其他专栏。

说明:

首先将查找列表中所有完全匹配的数组添加到您的查找值:

所以如果我输入这个公式:

=EXACT(A1:A14,"ddC")

enter image description here

然后进入公式栏并按 F9 它将显示一个真假值的数组,与A1:A14范围内与我的表达式完全匹配的每个单元格相关“ddC”:

enter image description here

现在如果我们接受这个布尔数组,并使用Match函数返回数组中True的相对位置。

=MATCH(TRUE,EXACT(A1:A14,"ddC"),0)

enter image description here

但请记住,我们需要按 Ctrl + Shift + Enter 进入此项,因为我们需要EXACT(A1:A14,"ddC")公式的一部分作为数组返回。

现在我们在数组中有True的位置,在这种情况下6我们可以使用它来检索任何列中的相应值,只要它是关系的并且相同尺寸。因此,如果我们想在原始查找列中返回完全匹配的值(虽然在这种情况下相对无用,但将继续进行演示),我们只需将最后一个公式包装在Index函数中:

=INDEX(A1:A14,MATCH(TRUE,EXACT(A1:A14,"ddC"),0))

enter image description here

但请记住,我们需要按 Ctrl + Shift + Enter 进入此项,因为我们需要EXACT(A1:A14,"ddC")公式的一部分作为数组返回。

现在我们可以将相同的概念应用于更大的范围,以获得更有用的查找功能:

enter image description here

但请记住,我们需要按 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:B14A1: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))

痛苦,是的,但它应该有用。

干杯。