excel vba根据单元格改变时计算其它单元


如下 0x86800000值发生变化时,它下面的单元格相应发生变化


0x86800000 
10
01
02
03
04
15
16
07
18
09
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031


0x86800000 
10
01
02
03
04
15
16
07
18
09
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031

Private Sub Worksheet_Change(ByVal Target As Range)

    With Target
        If .Column = 9 And .Offset(0, -1) = "" Then
            Select Case Target
            Case Is = ""
            
            Case Else
            
                
                Dim a1 As String
                Dim a2 As Integer
                Dim i As Integer
                i = 0
                a1 = Target.Text
                
                
                
                .Offset(1, 0) = BIT_VALUE(Target.Text, .Offset(1, 1))
                .Offset(2, 0) = BIT_VALUE(Target.Text, .Offset(2, 1))
                .Offset(3, 0) = BIT_VALUE(Target.Text, .Offset(3, 1))
                .Offset(4, 0) = BIT_VALUE(Target.Text, .Offset(4, 1))
                .Offset(5, 0) = BIT_VALUE(Target.Text, .Offset(5, 1))
                .Offset(6, 0) = BIT_VALUE(Target.Text, .Offset(6, 1))
                .Offset(7, 0) = BIT_VALUE(Target.Text, .Offset(7, 1))
                .Offset(8, 0) = BIT_VALUE(Target.Text, .Offset(8, 1))
                .Offset(9, 0) = BIT_VALUE(Target.Text, .Offset(9, 1))
                .Offset(10, 0) = BIT_VALUE(Target.Text, .Offset(10, 1))
                .Offset(11, 0) = BIT_VALUE(Target.Text, .Offset(11, 1))
                .Offset(12, 0) = BIT_VALUE(Target.Text, .Offset(12, 1))
                .Offset(13, 0) = BIT_VALUE(Target.Text, .Offset(13, 1))
                .Offset(14, 0) = BIT_VALUE(Target.Text, .Offset(14, 1))
                .Offset(15, 0) = BIT_VALUE(Target.Text, .Offset(15, 1))
                .Offset(16, 0) = BIT_VALUE(Target.Text, .Offset(16, 1))
                .Offset(17, 0) = BIT_VALUE(Target.Text, .Offset(17, 1))
                .Offset(18, 0) = BIT_VALUE(Target.Text, .Offset(18, 1))
                .Offset(19, 0) = BIT_VALUE(Target.Text, .Offset(19, 1))
                .Offset(20, 0) = BIT_VALUE(Target.Text, .Offset(20, 1))
                .Offset(21, 0) = BIT_VALUE(Target.Text, .Offset(21, 1))
                .Offset(22, 0) = BIT_VALUE(Target.Text, .Offset(22, 1))
                .Offset(23, 0) = BIT_VALUE(Target.Text, .Offset(23, 1))
                .Offset(24, 0) = BIT_VALUE(Target.Text, .Offset(24, 1))
                .Offset(25, 0) = BIT_VALUE(Target.Text, .Offset(25, 1))
                .Offset(26, 0) = BIT_VALUE(Target.Text, .Offset(26, 1))
                .Offset(27, 0) = BIT_VALUE(Target.Text, .Offset(27, 1))
                .Offset(28, 0) = BIT_VALUE(Target.Text, .Offset(28, 1))
                .Offset(29, 0) = BIT_VALUE(Target.Text, .Offset(29, 1))
                .Offset(30, 0) = BIT_VALUE(Target.Text, .Offset(30, 1))
                .Offset(31, 0) = BIT_VALUE(Target.Text, .Offset(31, 1))
                .Offset(32, 0) = BIT_VALUE(Target.Text, .Offset(32, 1))
                
            End Select
        End If
    End With

End Sub





Function BIT_VALUE(ByVal num As String, ByVal bit As Integer) As Long
    
    bit = 31 - bit
    
    Dim d1 As Double
    Dim d2 As Double
    Dim d3 As Double
    Dim d4 As Double
    Dim n1 As String
    Dim n2 As String
    Dim n3 As String
    Dim n4 As String
    
    d1 = 0
    d2 = 0
    d3 = 0
    d4 = 0
    
    Dim bIsHex As Boolean
    bIsHex = True
    
    If InStr(num, "0x") > 0 Then
        num = Replace(num, "0x", "")
    ElseIf InStr(num, "0X") > 0 Then
        num = Replace(num, "0X", "")
    Else
        bIsHex = False
    End If
        
    
    While Len(num) < 8
    
    num = "0" & num
    
    Wend
    
    n1 = Mid(num, 1, 2)
    n2 = Mid(num, 3, 2)
    n3 = Mid(num, 5, 2)
    n4 = Mid(num, 7, 2)
    
    If bIsHex Then
    n1 = "&H" & n1
    n2 = "&H" & n2
    n3 = "&H" & n3
    n4 = "&H" & n4
    End If
    
    d1 = Val(n1)
    d2 = Val(n2)
    d3 = Val(n3)
    d4 = Val(n4)
    
    If bit < 8 Then
        If d4 And 2 ^ bit Then
            BIT_VALUE = 1
        Else
            BIT_VALUE = 0
        End If
    ElseIf bit < 16 Then
        If d3 And 2 ^ (bit - 8) Then
            BIT_VALUE = 1
        Else
            BIT_VALUE = 0
        End If
    ElseIf bit < 24 Then
        If d2 And 2 ^ (bit - 16) Then
            BIT_VALUE = 1
        Else
            BIT_VALUE = 0
        End If
    Else
        If d1 And 2 ^ (bit - 24) Then
            BIT_VALUE = 1
        Else
            BIT_VALUE = 0
        End If
    End If
        
            
    
End Function

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值