1、创建启用宏的EXCEL文件,一般文件后缀为*.xlsm。
2、选择 开发工具 --- Visual Basic。(如果没有,那就去找找相关文章,如何调出开发工具,相关文章很多)
3、创建模块
4、输入代码(最核心)
Function CalculateCRC(inputHex As String) As String
Dim i As Integer
Dim j As Integer
Dim crc As Integer
Dim crcLowByte As Byte
Dim crcHighByte As Byte
crc = &HFFFF
For i = 1 To Len(inputHex) Step 2
crc = crc Xor Val("&H" & Mid(inputHex, i, 2))
For j = 1 To 8
If (crc And 1) = 1 Then
crc = ((crc And &HFFFF&) \ 2) Xor &HA001
Else
crc = (crc And &HFFFF&) \ 2
End If
Next j
Next i
crcLowByte = crc And &HFF
crcHighByte = (crc And &HFF00&) \ &H100
CalculateCRC = Right("00" & Hex(crcHighByte), 2) & Right("00" & Hex(crcLowByte), 2)
End Function
代码复杂度不高,最关键的核心是EXCEL的VB没有无符号类型的数据类型,所以需要对数据进行特殊处理,否则移位运算会出错,得到的结果不是预期想要的数据,简单的crc = crc \ 2是不行的。
5、回到EXCEL表,在单元格输入=CalculateCRC("12345678"),即可计算出0x12 0x34 0x56 0x78的CRC16-MODBUS的校验值。“12345678”可以直接取其他单元格的16进制字符串数据。(基础代码只适合偶数的字符串,对于奇数的字符串,没有做补零处理,需要自行处理。)
附件资源为其他作者利用EXCEL现成公式实现的CRC16计算。