Please, try the next code. It is commented in a way to understand what each code line does:
Sub placeTwoColumnsStringInClipboard()
  Dim wb2 As Workbook, ws1 As Worksheet, ws2 As Worksheet, rng1 As Range, rng2 As Range
  Dim lastR As Long, arr1, arr11, arr2, arr22
  Const strStrange As String = "%$#@"
  
  Set wb2 = ActiveWorkbook 'use here the one you need
  Set ws1 = wb2.Sheets(1)
  Set ws2 = wb2.Sheets(2)
  
  lastR = ws1.Range("B" & ws1.rows.count).End(xlUp).Row 'last row in the first sheet
  Set rng1 = ws1.Range("B2:B" & lastR)
  arr1 = rng1.value
  
  lastR = ws2.Range("B" & ws2.rows.count).End(xlUp).Row 'last row in the first sheet
  Set rng2 = ws2.Range("B2:B" & lastR)
  arr2 = rng2.value
  
  
  'transform 2D column arrays in 1D and remove the empty cells:
  rng1.Replace "", strStrange, xlWhole: ' Stop
  arr11 = Application.Transpose(rng1.value) 'place the columln range in a 1D array
  arr11 = filter(arr11, strStrange, False)   'remove the former empty cells
  'Debug.Print Join(arr11, "|"): 'just to visually see it
  rng1.value = arr1 'place back the former range, spaces included
  
  rng2.Replace "", strStrange, xlWhole: 'Stop
  arr22 = Application.Transpose(rng2.value) 'place the columln range in a 1D array
  arr22 = filter(arr22, strStrange, False)   'remove the former empty cells
  'Debug.Print Join(arr22, "|"): ''just to visually see it
  rng2.value = arr2 'place back the former range, spaces included
  
  
  Dim arr3, Txt As String
  Join1DArrays arr3, arr22, arr11 'modified the order of the necessary array parameters!
  Txt = Join(arr3, ";") 'the necessary string
  Debug.Print Txt 'the necesssary string!!!
  
  'Added to test the new function for the next array:
  Dim arr4
  arr4 = Array(1, 3, 5, 7, 9, 11)
  Join1DArrays arr3, arr4
  Txt = Join(arr3, ";") 'the necessary string
  Debug.Print Txt 'see here the final string (including  arr4 content, too)!!!
  'Proceed in the same way for as many arrays you produce.
  'You can reuse the above arrays except arr3. They have never been re-dimensioned...
  'And use the above shown way. It is faster, compact, without iteration and no any condition.
End Sub
Sub Join1DArrays(arr3, arrr, Optional arr As Variant)'modified (the order of variables and the logic to except two necessary arrays)
   Dim i As Long, istart As Long
   If Not IsArray(arr3) Then arr3 = arr
   istart = UBound(arr3) 'where from the iteration to load the rest should start
   ReDim Preserve arr3(istart + UBound(arrr) + 1)
   
   For i = istart + 1 To UBound(arr3)
        arr3(i) = arrr(i - istart - 1)
   Next i
End Sub
If something not clear enough, please, do  not hesitate to ask for clarifications...