全球主机交流论坛

标题: EXCEL高手进 [打印本页]

作者: Shinjuku    时间: 2023-6-27 14:50
标题: EXCEL高手进
本来想根据几列的字符串生成一个特征值,我目前想到的就是MD5函数,但是EXCEL好像没有MD5函数,有其他函数或者思路吗?


用&字符串拼接就算了,不大喜欢这种,因为字符串太长了
作者: woniu    时间: 2023-6-27 14:52
  1. Excel并没有内置的MD5函数,但是可以通过使用VBA编写自定义函数来实现MD5计算。下面是一个简单的VBA代码示例,可以将其添加到Excel工作簿中,并使用自定义函数 `MD5()` 来计算字符串的MD5值:

  2. ```VBA
  3. Function MD5(sInput As String) As String
  4.     Dim oMD5 As Object
  5.     Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
  6.     Dim bData() As Byte
  7.     bData = StrConv(sInput, vbFromUnicode)
  8.     Dim bHash() As Byte
  9.     bHash = oMD5.ComputeHash_2((bData))
  10.     Dim sOutput As String
  11.     Dim i As Integer
  12.     For i = LBound(bHash) To UBound(bHash)
  13.         sOutput = sOutput & LCase(Hex(bHash(i)))
  14.     Next i
  15.     MD5 = sOutput
  16. End Function
  17. ```

  18. 在上面的代码中,使用了 `System.Security.Cryptography.MD5CryptoServiceProvider` 类来计算字符串的MD5值。该类使用 .NET Framework 的安全框架来提供加密和解密服务。在函数中,将字符串转换为字节数组,然后使用 `ComputeHash_2()` 方法计算字节数组的MD5哈希值,并将哈希值转换为字符串返回。

  19. 使用该函数时,只需要在工作表中输入 `=MD5("要计算MD5值的字符串")`,就可以得到该字符串的MD5值。例如,`=MD5("Hello World")` 将会返回字符串 `b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9`。

  20. 需要注意的是,由于该函数使用了VBA编写,因此在使用前需要启用Excel的宏功能。同时,在计算大量数据的MD5值时,该函数可能会比较慢,因此不适合处理大规模数据。
复制代码

作者: five    时间: 2023-6-27 14:53
根据提供的信息,我认为您的问题是如何在Excel中根据几列的字符串生成一个特征值。

您可以使用Excel的公式和函数来将多列字符串组合成一个特征值。例如,您可以使用 CONCATENATE 函数将多列字符串连接成一个字符串,然后使用 HASH 函数将其转换为唯一的特征值。

以下是一个示例公式,将两列字符串A1和B1连接起来:=HASH(CONCATENATE(A1,B1))

在此示例中,CONCATENATE 函数将 A1 和 B1 的内容连接在一起,然后将其传递给 HASH 函数以生成一个特征值。

您可以根据需要调整此公式,例如添加更多列或选择不同的哈希算法。

希望这可以帮助您解决您的问题!

ai的回答
作者: Shinjuku    时间: 2023-6-27 14:55
five 发表于 2023-6-27 14:53
根据提供的信息,我认为您的问题是如何在Excel中根据几列的字符串生成一个特征值。

您可以使用Excel的公式 ...


关键没HASH这个函数  
作者: five    时间: 2023-6-27 14:57
Shinjuku 发表于 2023-6-27 14:55
关键没HASH这个函数

那就有点尴尬了,参考其他大佬的吧
作者: five    时间: 2023-6-27 15:01
又问了一下ai

如果你想在Excel中根据几列的字符串生成一个特征值,可以使用一些文本函数和数学函数来完成。下面是一个示例,假设你有三列字符串数据分别位于列A、B和C:

在列D中,使用 CONCATENATE 函数将三列字符串合并成一个字符串。例如,将 A2、B2 和 C2 合并,公式为:=CONCATENATE(A2, B2, C2)。

在列E中,使用 LEN 函数计算合并后字符串的长度。例如,将 D2 的长度计算公式为:=LEN(D2)。

在列F中,使用 CODE 函数计算合并后字符串的字符值之和。例如,将 D2 的字符值之和计算公式为:=SUM(CODE(MID(D2, ROW(INDIRECT("1:"&LEN(D2))), 1)))-64*LEN(D2)。

在列G中,使用 MOD 函数计算字符值之和的模(余数),这将生成最终的特征值。例如,将 F2 的模计算公式为:=MOD(F2, 100)。

这样,列G中的值就是根据几列字符串生成的特征值。

请注意,上述示例假设字符串只包含大写字母,并且生成的特征值在0到99之间。你可以根据实际情况进行修改和调整公式。
作者: 晴晴晴    时间: 2023-6-27 15:01
根据我的搜索结果,Excel自带的函数中没有专门用于生成哈希值的函数,但是您可以利用一些文本函数或者数学函数来实现类似的功能。例如,您可以使用FIND函数1来查找文本中的某个子串,并返回它的位置,然后再用其他函数如MOD、SUM、CONCATENATE等来组合这些位置,得到一个类似哈希值的结果。2
作者: 惜为伊人醉    时间: 2023-6-27 15:04
考虑用谷歌表格?
作者: 匿名    时间: 2023-6-27 15:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: seefan    时间: 2023-6-27 15:49
用Code函数计算第一个字符的数字代码,然后相乘;比如有3列,A1为“张三”,B1为“16岁”,C1为“男”,用公式就是=CODE(A1)*CODE(B1)*CODE(C1),但是超过15位就会出现科学计数,类似1.35106E+11,可以用LEFT函数取前15位,或者也可以用DEC2HEX转成十六进制,反正就是利用CODE函数对单元格某一位数值进行转换,转换后在加减乘除之类的运算,自己发挥。
作者: Shinjuku    时间: 2023-6-27 18:36
感谢楼上各位热心大佬的指点,大家的思维都不错,借鉴了,谢谢大家!




欢迎光临 全球主机交流论坛 (https://443502.xyz/) Powered by Discuz! X3.4