Merge 3 cells in 1 with VBA
To answer another question I provided some helpful information about optimization in vba here, VBA syntax that compiles sub data into master sheet.
This maybe help you to skip the blank rows (You did not clarify your question but based on the data you provided I think that would be your problem) and find the actual last row used. It is in reference to this post. Here's the code:
Dim srcData As Range, rng As Range
Dim rowNum As Long, lastRow As Long
Dim wsh As Worksheet

Sub GSFC_V4()
 Set wsh = Worksheets(2)
 
 wsh.Activate
 Set srcData = Range(&quot;K:M&quot;)
 Set rng = Range(&quot;K4&quot;)


 With wsh 
  If Application.WorksheetFunction.CountA(.Cells) &lt;&gt; 0 Then
     lastrow = srcData.Find(What:=&quot;*&quot;, _
                  After:=rng, _
                  Lookat:=xlPart, _
                  LookIn:=xlFormulas, _
                  SearchOrder:=xlByRows, _
                  SearchDirection:=xlPrevious, _
                  MatchCase:=False).Row
 Else
     lastrow = 1  
 End If


     With .Cells(4, &quot;H&quot;).Resize(lastRow - 4 + 1, 1)
         .FormulaR1C1 = &quot;=rc[3]&amp;rc[4]&amp;rc[5]&quot;
         .Value = .Value2
     End With
 End With

End Sub

This is what I am using to optimize my macros. I call OptimizeVBA True at the beginning of each macro and at the end call OptimizeVBA False to set everything back to default. It increases the performance remarkably.
Sub OptimizeVBA(isOn As Boolean)

  Application.Calculation = IIf(isOn, xlCalculationManual, xlCalculationAutomatic)
  Application.EnableEvents = Not (isOn)
  Application.ScreenUpdating = Not (isOn)
  Application.StatusBar = Not (isOn)

End Sub

You need to be careful of how you refer to ranges to avoid getting errors.