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

说,我有2个字A1:ddC, A2:DDC

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

所以我试着, =Code(A1)它返回100,但如果我尝试=Code("dady")那么它也返回100.它是COS =Code()只有PIC字的第一个字符。

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

那么如何做到这一点,而不使用VBA?

*警告:*这不是标题问题“如何使用公式将单词转换为Excel中的唯一代码而不使用VBA?”的解决scheme。 而是一个解决我认为是下属问题,因为原来的问题陈述“这样我可以做区分大小写的查找”。 这是一个解决scheme,实现了一个区分大小写的查找,而不需要在这之前转换值。

另一种方法是转换所有值,然后查看转换后的值,可以在数组input的公式中使用INDEXMATCH函数,并直接查找值:

 =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)) 

痛苦,是的,但它应该工作。

干杯。