Bit Shifting Function in Excel VBA
Do you need Bitwise Shift operators in Excel VBA (similar to “<<" and ">>” operators in C++)? Unfortunately, VBA doesn't have any bit shift operators. But we can replicate bitwise shift operators with multiplying or dividing by the appropriate power of 2.
Bitwise Right Shift Function:
Public Function shr(ByVal Value As Long, ByVal Shift As Byte) As Long Dim i As Byte shr = Value If Shift > 0 Then shr = Int(shr / (2 ^ Shift)) End If End Function
Right shifting is equal to dividing Value by 2Shift.
Bitwise Left Shift Function:
Public Function shl(ByVal Value As Long, ByVal Shift As Byte) As Long shl = Value If Shift > 0 Then Dim i As Byte Dim m As Long For i = 1 To Shift m = shl And &H40000000 shl = (shl And &H3FFFFFFF) * 2 If m <> 0 Then shl = shl Or &H80000000 End If Next i End If End Function
Left shifting is equal to multiplying Value by 2Shift. But to avoid an overflow error we use small trick:
m = shl And &H40000000 ' save 30th bit shl = shl And &H3FFFFFFF ' clear 30th and 31st bits shl = shl * 2 ' multiply by 2 If m <> 0 Then shl = shl Or &H80000000 ' set 31st bit End If
Related articles: