xlf | xlfBinAdd1 function
xlfBinAdd1 - about the function
Description: returns a string value from the addition of two binary numbers
Syntax: xlfBinAdd(Bin1,Bin2)
Arguments: Bin1 (required): a positive binary integer.
Arguments: Bin2 (required): a positive binary integer.
Rules of binary addition
| A + B | Sum | Carry |
|---|---|---|
| 0 + 0 | 0 | 0 |
| 0 + 1 | 1 | 0 |
| 1 + 0 | 1 | 0 |
| 1 + 1 | 0 | 1 |
Example: \(100101\) (37) + \(10101\) (21) = \(111010\) (58)
$$ \begin{array}{r} &1\; 0\; 0\; 1\; 0\;1\\ +&1\;0\;1\;0\;1\\ \hline &1\;1\;1\;0\;1\;0 \end{array} $$
xlfBinAdd1 - the VBA code
Code 1: Function
xlfBinAdd1 returns a string value from the addition of two binary numbers
Function xlfBinAdd1(ByVal Bin1 As String, ByVal Bin2 As String) As Variant
' Variables: addition engine
Dim LenBin(1 To 2) As Integer
Dim Bin(1 To 2) As String
Dim Ans As String
Dim Carry As Integer, Carried As Integer
Dim i As Integer, NoLoops As Integer
Dim Tmp As Integer, Tmp1 As Integer, Tmp2 As Integer
' Variables: maintenance
Dim App As Application: Set App = Application
Bin(1) = Bin1: Bin(2) = Bin2
' Validate Bin1 and Bin2
' Check for only 0's and 1's
For i = 1 To 2
If Len(Bin(i)) <> Len(App.Substitute(Bin(i), "0", "")) + Len(App.Substitute(Bin(i), "1", "")) Then
xlfBinAdd1 = CVErr(xlErrValue)
Exit Function
End If
Next i
For i = 1 To 2
LenBin(i) = Len(Bin(i))
Next i
NoLoops = App.Max(LenBin)
For i = 1 To 2
Bin(i) = App.Rept("0", NoLoops - LenBin(i)) & Bin(i) ' pad leading zeros to equal number of binary digits
Next i
For i = NoLoops To 1 Step -1
Tmp1 = Mid(Bin(1), i, 1)
Tmp2 = Mid(Bin(2), i, 1)
' === Binary addition: apply rules
If Tmp1 = 0 And Tmp2 = 0 Then ' 0 + 0 = 0
Tmp = 0: Carry = 0
ElseIf Tmp1 = 0 And Tmp2 = 1 Then ' 0 + 1 = 1
Tmp = 1: Carry = 0
ElseIf Tmp1 = 1 And Tmp2 = 0 Then ' 1 + 0 = 1
Tmp = 1: Carry = 0
ElseIf Tmp1 = 1 And Tmp2 = 1 Then ' 1 + 1 = 0 carry 1
Tmp = 0: Carry = 1
End If
' === Binary addition, build result string
If Tmp = 0 And Carried = 0 Then ' 0, 0
Ans = 0 & Ans
ElseIf Tmp = 0 And Carried = 1 Then ' 0, 1
Ans = 1 & Ans: Carried = 0
ElseIf Tmp = 1 And Carried = 0 Then ' 1, 0
Ans = 1 & Ans
ElseIf Tmp = 1 And Carried = 1 Then ' 1, 1
Ans = 1 & Ans: Carried = 0
End If
Carried = Carry
Next i
xlfBinAdd1 = Ans
End Function
'
Code 2: Sub
TestxlfBinAdd1
Sub TestxlfBinAdd1()
Dim Ans As Variant
Ans = xlfBinAdd1("100101", "10101")
Stop
End Sub

- Development platform: Office 365 ProPlus - Excel 2016 MSO (16.0...) 64 bit
- Published: 11th May 2018
- Revised: Friday 24th of February 2023 - 02:38 PM, Pacific Time (PT)
