Excel上VB宏实现动态计算CRC

        Excel中有很多好用的函数,但是有一些复杂的运算还是需要宏来实现。本文介绍下如何利用VB宏实现CRC运算,并且与其他单元格联动,更改字符串后,计算结果自动更新。

        VB代码如下,VB作者也不是很熟,网上找找例子,照猫画葫芦,修改修改,见笑。

Function CalcCRC16() As String
    Dim cell As Range
    Dim hexString As String
    Dim hexArray() As Integer
    Dim crc As Long
    Dim i As Integer
    Dim j As Integer
    Dim tmp As Integer

    Set cell = Application.Caller.Offset(0, -1) ' 取左侧一个单元格
    hexString = cell.Value
    ReDim hexArray(Len(hexString) / 2 - 1)

    polynomial = &H1021 ' 多项式
    For i = 0 To Len(hexString) - 1 Step 2
        hexArray(i / 2) = Val("&H" & Mid(hexString, i + 1, 2) & "00")
    Next i

    crc = &H0 ' 初始值
    For i = 0 To UBound(hexArray)
        crc = crc Xor hexArray(i)
        For j = 0 To 7
            intStr = Right("0000" & Hex(crc * 2), 4)
            tmp = Val("&H" & intStr)
            If (crc And &H8000) <> 0 Then
                crc = (tmp Xor polynomial)
            Else
                crc = tmp
            End If
        Next j
    Next i

    crc = crc Xor &HFFFF ' 结果异或值

    CalcCRC16 = Right("0000" & Hex(crc), 4)
End Function

        在excel的开发工具里选择VB编辑器,然后插入模块。修改模块名字,然后就可以写VB代码。

写完之后,表格任选单元格先写一个字符串,然后右边单元格输入公式即可。

        此时VB宏只计算一次,如果需要实现输入修改,输出同步修改,可以双击sheet1,加入如下代码,即可在有修改时重新运算。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.CalculateFull
End Sub

        实现比较粗糙,大家可以根据需要修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值